Commit 461a3fe9 authored by Thomas's avatar Thomas
Browse files

back to viewpager

parent 82681f1a
Loading
Loading
Loading
Loading
+27 −21
Original line number Diff line number Diff line
@@ -900,11 +900,13 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
            itemFilter.setTitle(show_filtered);
        }
        popup.setOnDismissListener(menu1 -> {
            Fragment fragment = getSupportFragmentManager().findFragmentByTag("f" + binding.viewPager.getCurrentItem());
            if (binding.viewPager.getAdapter() != null) {
                Fragment fragment = (Fragment) binding.viewPager.getAdapter().instantiateItem(binding.viewPager, binding.tabLayout.getSelectedTabPosition());
                if (fragment instanceof FragmentMastodonTimeline && fragment.isVisible()) {
                    FragmentMastodonTimeline fragmentMastodonTimeline = ((FragmentMastodonTimeline) fragment);
                    fragmentMastodonTimeline.refreshAllAdapters();
                }
            }
        });
        String finalShow_filtered = show_filtered;
        popup.setOnMenuItemClickListener(item -> {
@@ -990,7 +992,8 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
    }

    public void refreshFragment() {
        Fragment fragment = getSupportFragmentManager().findFragmentByTag("f" + binding.viewPager.getCurrentItem());
        if (binding.viewPager.getAdapter() != null) {
            Fragment fragment = (Fragment) binding.viewPager.getAdapter().instantiateItem(binding.viewPager, binding.tabLayout.getSelectedTabPosition());
            if (fragment instanceof FragmentNotificationContainer) {
                FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction();
                fragTransaction.detach(fragment).commit();
@@ -999,6 +1002,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
                fragTransaction2.commit();
            }
        }
    }

    @Override
    protected void onDestroy() {
@@ -1035,7 +1039,8 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
     */
    private void scrollToTop() {

        Fragment fragment = getSupportFragmentManager().findFragmentByTag("f" + binding.viewPager.getCurrentItem());
        if (binding.viewPager.getAdapter() != null) {
            Fragment fragment = (Fragment) binding.viewPager.getAdapter().instantiateItem(binding.viewPager, binding.tabLayout.getSelectedTabPosition());
            if (fragment instanceof FragmentMastodonTimeline) {
                FragmentMastodonTimeline fragmentMastodonTimeline = ((FragmentMastodonTimeline) fragment);
                fragmentMastodonTimeline.scrollToTop();
@@ -1047,6 +1052,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
                fragmentNotificationContainer.scrollToTop();
            }
        }
    }


    @Override
+32 −21
Original line number Diff line number Diff line
@@ -33,15 +33,18 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;

@@ -94,6 +97,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
    private float startX;
    private float startY;
    private ActivityMediaPagerBinding binding;
    private FragmentMedia mCurrentFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
@@ -123,7 +127,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {

        setTitle("");

        ScreenSlidePagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(MediaActivity.this);
        ScreenSlidePagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        binding.mediaViewpager.setAdapter(mPagerAdapter);
        binding.mediaViewpager.setSaveEnabled(false);
        binding.mediaViewpager.setCurrentItem(mediaPosition - 1);
@@ -135,15 +139,14 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
            binding.mediaDescription.setText(description);

        }
        binding.mediaViewpager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
        binding.mediaViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            public void onPageScrollStateChanged(int state) {
            }

            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                String description = attachments.get(position).description;
                if (handler != null) {
                    handler.removeCallbacksAndMessages(null);
@@ -153,13 +156,9 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
                    binding.mediaDescription.setText(description);
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });


        setFullscreen(true);
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
@@ -358,18 +357,22 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }

    public FragmentMedia getCurrentFragment() {
        return mCurrentFragment;
    }

    /**
     * Media Pager
     */
    private class ScreenSlidePagerAdapter extends FragmentStateAdapter {

        ScreenSlidePagerAdapter(FragmentActivity fa) {
            super(fa);
    @SuppressWarnings("deprecation")
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        }

        @NonNull
        @NotNull
        @Override
        public Fragment createFragment(int position) {
        public Fragment getItem(int position) {
            Bundle bundle = new Bundle();
            FragmentMedia mediaSliderFragment = new FragmentMedia();
            bundle.putInt(Helper.ARG_MEDIA_POSITION, position);
@@ -379,7 +382,15 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
        }

        @Override
        public int getItemCount() {
        public void setPrimaryItem(@NotNull ViewGroup container, int position, @NotNull Object object) {
            if (getCurrentFragment() != object) {
                mCurrentFragment = ((FragmentMedia) object);
            }
            super.setPrimaryItem(container, position, object);
        }

        @Override
        public int getCount() {
            return attachments.size();
        }
    }
+19 −21
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.google.android.material.tabs.TabLayoutMediator;
import com.google.android.material.tabs.TabLayout;

import java.util.ArrayList;
import java.util.Date;
@@ -247,29 +247,27 @@ public class ProfileActivity extends BaseActivity {
        binding.accountTabLayout.clearOnTabSelectedListeners();
        binding.accountTabLayout.removeAllTabs();
        //Tablayout for timelines/following/followers
        FedilabProfileTLPageAdapter fedilabProfileTLPageAdapter = new FedilabProfileTLPageAdapter(ProfileActivity.this, account);
        binding.accountTabLayout.addTab(binding.accountTabLayout.newTab());
        binding.accountTabLayout.addTab(binding.accountTabLayout.newTab());
        binding.accountTabLayout.addTab(binding.accountTabLayout.newTab());
        FedilabProfileTLPageAdapter fedilabProfileTLPageAdapter = new FedilabProfileTLPageAdapter(getSupportFragmentManager(), account);
        binding.accountTabLayout.addTab(binding.accountTabLayout.newTab().setText(getString(R.string.status_cnt, Helper.withSuffix(account.statuses_count))));
        binding.accountTabLayout.addTab(binding.accountTabLayout.newTab().setText(getString(R.string.following_cnt, Helper.withSuffix(account.following_count))));
        binding.accountTabLayout.addTab(binding.accountTabLayout.newTab().setText(getString(R.string.followers_cnt, Helper.withSuffix(account.followers_count))));
        binding.accountViewpager.setAdapter(fedilabProfileTLPageAdapter);
        binding.accountViewpager.setOffscreenPageLimit(3);
        binding.accountViewpager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(binding.accountTabLayout));
        binding.accountTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                binding.accountViewpager.setCurrentItem(tab.getPosition());
            }

        new TabLayoutMediator(binding.accountTabLayout, binding.accountViewpager,
                (tab, position) -> {
                    binding.accountViewpager.setCurrentItem(tab.getPosition(), true);
                    switch (position) {
                        case 0:
                            tab.setText(getString(R.string.status_cnt, Helper.withSuffix(account.statuses_count)));
                            break;
                        case 1:
                            tab.setText(getString(R.string.following_cnt, Helper.withSuffix(account.following_count)));
                            break;
                        case 2:
                            tab.setText(getString(R.string.followers_cnt, Helper.withSuffix(account.followers_count)));
                            break;
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }
        ).attach();
        });
        binding.accountTabLayout.setTabTextColors(ThemeHelper.getAttColor(ProfileActivity.this, R.attr.mTextColor), ContextCompat.getColor(ProfileActivity.this, R.color.cyanea_accent_dark_reference));
        binding.accountTabLayout.setTabIconTint(ThemeHelper.getColorStateList(ProfileActivity.this));
        boolean disableGif = sharedpreferences.getBoolean(getString(R.string.SET_DISABLE_GIF), false);
+20 −21
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.core.content.ContextCompat;

import com.google.android.material.tabs.TabLayoutMediator;
import com.google.android.material.tabs.TabLayout;

import app.fedilab.android.R;
import app.fedilab.android.databinding.ActivityScheduledBinding;
@@ -56,31 +56,30 @@ public class ScheduledActivity extends BaseActivity {

        MastodonHelper.loadPPMastodon(binding.profilePicture, currentAccount.mastodon_account);
        binding.title.setText(R.string.scheduled);
        binding.scheduleTablayout.addTab(binding.scheduleTablayout.newTab());
        binding.scheduleTablayout.addTab(binding.scheduleTablayout.newTab());
        binding.scheduleTablayout.addTab(binding.scheduleTablayout.newTab());
        binding.scheduleTablayout.addTab(binding.scheduleTablayout.newTab().setText(getString(R.string.toots_server)));
        binding.scheduleTablayout.addTab(binding.scheduleTablayout.newTab().setText(getString(R.string.toots_client)));
        binding.scheduleTablayout.addTab(binding.scheduleTablayout.newTab().setText(getString(R.string.reblog)));

        binding.scheduleViewpager.setAdapter(new FedilabScheduledPageAdapter(ScheduledActivity.this));
        binding.scheduleViewpager.setAdapter(new FedilabScheduledPageAdapter(getSupportFragmentManager()));
        binding.scheduleViewpager.setOffscreenPageLimit(3);
        binding.scheduleViewpager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(binding.scheduleTablayout));
        binding.scheduleTablayout.setTabTextColors(ThemeHelper.getAttColor(ScheduledActivity.this, R.attr.mTextColor), ContextCompat.getColor(ScheduledActivity.this, R.color.cyanea_accent_dark_reference));
        binding.scheduleTablayout.setTabIconTint(ThemeHelper.getColorStateList(ScheduledActivity.this));

        new TabLayoutMediator(binding.scheduleTablayout, binding.scheduleViewpager,
                (tab, position) -> {
                    binding.scheduleViewpager.setCurrentItem(tab.getPosition(), true);
                    switch (position) {
                        case 0:
                            tab.setText(getString(R.string.toots_server));
                            break;
                        case 1:
                            tab.setText(getString(R.string.toots_client));
                            break;
                        case 2:
                            tab.setText(getString(R.string.reblog));
                            break;
        binding.scheduleTablayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                binding.scheduleViewpager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }
        ).attach();
        });
    }

    @Override
+51 −51
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;

@@ -28,11 +29,12 @@ import androidx.annotation.NonNull;
import androidx.appcompat.widget.SearchView;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

import org.jetbrains.annotations.NotNull;

@@ -75,35 +77,12 @@ public class SearchResultTabActivity extends BaseActivity {
            getSupportActionBar().setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.cyanea_primary)));
        }
        setTitle(search);
        binding.searchTabLayout.addTab(binding.searchTabLayout.newTab());
        binding.searchTabLayout.addTab(binding.searchTabLayout.newTab());
        binding.searchTabLayout.addTab(binding.searchTabLayout.newTab());
        binding.searchTabLayout.addTab(binding.searchTabLayout.newTab());
        binding.searchTabLayout.addTab(binding.searchTabLayout.newTab().setText(getString(R.string.tags)));
        binding.searchTabLayout.addTab(binding.searchTabLayout.newTab().setText(getString(R.string.accounts)));
        binding.searchTabLayout.addTab(binding.searchTabLayout.newTab().setText(getString(R.string.toots)));
        binding.searchTabLayout.addTab(binding.searchTabLayout.newTab().setText(getString(R.string.action_cache)));
        binding.searchTabLayout.setTabTextColors(ThemeHelper.getAttColor(SearchResultTabActivity.this, R.attr.mTextColor), ContextCompat.getColor(SearchResultTabActivity.this, R.color.cyanea_accent_dark_reference));
        binding.searchTabLayout.setTabIconTint(ThemeHelper.getColorStateList(SearchResultTabActivity.this));
        ScreenSlidePagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(SearchResultTabActivity.this);
        binding.searchViewpager.setAdapter(mPagerAdapter);
        binding.searchViewpager.setSaveEnabled(false);
        binding.searchViewpager.setOffscreenPageLimit(3);
        new TabLayoutMediator(binding.searchTabLayout, binding.searchViewpager,
                (tab, position) -> {
                    binding.searchViewpager.setCurrentItem(tab.getPosition(), true);
                    switch (position) {
                        case 0:
                            tab.setText(getString(R.string.tags));
                            break;
                        case 1:
                            tab.setText(getString(R.string.accounts));
                            break;
                        case 2:
                            tab.setText(getString(R.string.toots));
                            break;
                        case 3:
                            tab.setText(getString(R.string.action_cache));
                            break;
                    }
                }
        ).attach();
        binding.searchTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
@@ -112,12 +91,12 @@ public class SearchResultTabActivity extends BaseActivity {

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                Fragment fragment = getSupportFragmentManager().findFragmentByTag("f" + binding.searchViewpager.getCurrentItem());
                Fragment fragment;
                if (binding.searchViewpager.getAdapter() != null) {
                    fragment = (Fragment) binding.searchViewpager.getAdapter().instantiateItem(binding.searchViewpager, tab.getPosition());
                    if (fragment instanceof FragmentMastodonAccount) {
                        FragmentMastodonAccount fragmentMastodonAccount = ((FragmentMastodonAccount) fragment);
                        fragmentMastodonAccount.scrollToTop();
@@ -129,6 +108,7 @@ public class SearchResultTabActivity extends BaseActivity {
                        fragmentMastodonTag.scrollToTop();
                    }
                }
            }
        });
    }

@@ -149,7 +129,7 @@ public class SearchResultTabActivity extends BaseActivity {
                imm.hideSoftInputFromWindow(binding.searchTabLayout.getWindowToken(), 0);
                query = query.replaceAll("^#+", "");
                search = query.trim();
                ScreenSlidePagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(SearchResultTabActivity.this);
                ScreenSlidePagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
                binding.searchViewpager.setAdapter(mPagerAdapter);
                searchView.clearFocus();
                setTitle(search);
@@ -172,7 +152,24 @@ public class SearchResultTabActivity extends BaseActivity {
            searchView.setIconified(false);
        });

        PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        binding.searchViewpager.setAdapter(mPagerAdapter);
        binding.searchViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {
                TabLayout.Tab tab = binding.searchTabLayout.getTabAt(position);
                if (tab != null)
                    tab.select();
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });

        return true;
    }
@@ -193,16 +190,15 @@ public class SearchResultTabActivity extends BaseActivity {
    /**
     * Pager adapter for the 4 fragments
     */
    private class ScreenSlidePagerAdapter extends FragmentStateAdapter {

        ScreenSlidePagerAdapter(FragmentActivity fa) {
            super(fa);
    @SuppressWarnings("deprecation")
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        }


        @NonNull
        @NotNull
        @Override
        public Fragment createFragment(int position) {
        public Fragment getItem(int position) {
            Bundle bundle = new Bundle();
            switch (position) {
                case 0:
@@ -229,7 +225,11 @@ public class SearchResultTabActivity extends BaseActivity {
        }

        @Override
        public int getItemCount() {
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        }

        @Override
        public int getCount() {
            return 4;
        }
    }
Loading