diff options
author | Alex Ning <chineseperson5@gmail.com> | 2020-09-23 01:41:51 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2020-09-23 01:41:51 +0000 |
commit | 3aa36ff74f38191efb8f4a04234974a57eccaf71 (patch) | |
tree | 400b3d900b657b24faad6c09bc87a4b1248fe4cc | |
parent | 31c32148bcd52250885e400ffd90fff1e08b384c (diff) | |
download | infinity-for-reddit-3aa36ff74f38191efb8f4a04234974a57eccaf71.tar infinity-for-reddit-3aa36ff74f38191efb8f4a04234974a57eccaf71.tar.gz infinity-for-reddit-3aa36ff74f38191efb8f4a04234974a57eccaf71.tar.bz2 infinity-for-reddit-3aa36ff74f38191efb8f4a04234974a57eccaf71.tar.lz infinity-for-reddit-3aa36ff74f38191efb8f4a04234974a57eccaf71.tar.xz infinity-for-reddit-3aa36ff74f38191efb8f4a04234974a57eccaf71.tar.zst infinity-for-reddit-3aa36ff74f38191efb8f4a04234974a57eccaf71.zip |
Migrate to ViewPager2 in AccountSavedThingActivity.
6 files changed, 83 insertions, 94 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/AccountSavedThingActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/AccountSavedThingActivity.java index 00416019..6da1325d 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/AccountSavedThingActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/AccountSavedThingActivity.java @@ -7,21 +7,23 @@ import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.viewpager.widget.ViewPager; +import androidx.lifecycle.Lifecycle; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; import com.r0adkll.slidr.Slidr; import com.r0adkll.slidr.model.SlidrInterface; @@ -68,7 +70,7 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT @BindView(R.id.tab_layout_tab_layout_account_saved_thing_activity_activity) TabLayout tabLayout; @BindView(R.id.view_pager_account_saved_thing_activity) - ViewPager viewPager; + ViewPager2 viewPager2; @Inject @Named("oauth") Retrofit mOauthRetrofit; @@ -82,6 +84,7 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT SharedPreferences mPostLayoutSharedPreferences; @Inject CustomThemeWrapper mCustomThemeWrapper; + private FragmentManager fragmentManager; private SectionsPagerAdapter sectionsPagerAdapter; private SlidrInterface mSlidrInterface; private Menu mMenu; @@ -137,6 +140,8 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT postLayoutBottomSheetFragment = new PostLayoutBottomSheetFragment(); + fragmentManager = getSupportFragmentManager(); + if (savedInstanceState != null) { mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); @@ -191,22 +196,24 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT } private void initializeViewPager() { - sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); - viewPager.setAdapter(sectionsPagerAdapter); - viewPager.setOffscreenPageLimit(2); - tabLayout.setupWithViewPager(viewPager); + sectionsPagerAdapter = new SectionsPagerAdapter(fragmentManager, getLifecycle()); + viewPager2.setAdapter(sectionsPagerAdapter); + viewPager2.setOffscreenPageLimit(2); + viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false)); + new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> { + switch (position) { + case 0: + tab.setText(R.string.posts); + break; + case 1: + tab.setText(R.string.comments); + break; + } + }).attach(); - viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { + viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { - if (isInLazyMode) { - if (viewPager.getCurrentItem() == 0) { - sectionsPagerAdapter.resumeLazyMode(); - } else { - sectionsPagerAdapter.pauseLazyMode(); - } - } - if (position == 0) { unlockSwipeRightToGoBack(); } else { @@ -326,17 +333,15 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT } } - private class SectionsPagerAdapter extends FragmentPagerAdapter { - private PostFragment postFragment; - private CommentsListingFragment commentsListingFragment; + private class SectionsPagerAdapter extends FragmentStateAdapter { - SectionsPagerAdapter(FragmentManager fm) { - super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + SectionsPagerAdapter(FragmentManager fm, Lifecycle lifecycle) { + super(fm, lifecycle); } @NonNull @Override - public Fragment getItem(int position) { + public Fragment createFragment(int position) { if (position == 0) { PostFragment fragment = new PostFragment(); Bundle bundle = new Bundle(); @@ -359,96 +364,75 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT return fragment; } - @Override - public int getCount() { - return 2; - } - - @Override - public CharSequence getPageTitle(int position) { - switch (position) { - case 0: - return "Posts"; - case 1: - return "Comments"; + @Nullable + private Fragment getCurrentFragment() { + if (viewPager2 == null || fragmentManager == null) { + return null; } - return null; - } - - @NonNull - @Override - public Object instantiateItem(@NonNull ViewGroup container, int position) { - Fragment fragment = (Fragment) super.instantiateItem(container, position); - switch (position) { - case 0: - postFragment = (PostFragment) fragment; - break; - case 1: - commentsListingFragment = (CommentsListingFragment) fragment; - } - return fragment; + return fragmentManager.findFragmentByTag("f" + viewPager2.getCurrentItem()); } public boolean handleKeyDown(int keyCode) { - return viewPager.getCurrentItem() == 0 && postFragment.handleKeyDown(keyCode); + if (viewPager2.getCurrentItem() == 0) { + Fragment fragment = getCurrentFragment(); + if (fragment instanceof PostFragment) { + return ((PostFragment) fragment).handleKeyDown(keyCode); + } + } + return false; } public void refresh() { - if (viewPager.getCurrentItem() == 0) { - if (postFragment != null) { - postFragment.refresh(); - } - } else { - if (commentsListingFragment != null) { - commentsListingFragment.refresh(); - } + Fragment fragment = getCurrentFragment(); + if (fragment instanceof PostFragment) { + ((PostFragment) fragment).refresh(); + } else if (fragment instanceof CommentsListingFragment) { + ((CommentsListingFragment) fragment).refresh(); } } boolean startLazyMode() { - if (postFragment != null) { - return ((FragmentCommunicator) postFragment).startLazyMode(); + Fragment fragment = getCurrentFragment(); + if (fragment instanceof FragmentCommunicator) { + return ((FragmentCommunicator) fragment).startLazyMode(); } return false; } void stopLazyMode() { - if (postFragment != null) { - ((FragmentCommunicator) postFragment).stopLazyMode(); - } - } - - void resumeLazyMode() { - if (postFragment != null) { - ((FragmentCommunicator) postFragment).resumeLazyMode(false); - } - } - - void pauseLazyMode() { - if (postFragment != null) { - ((FragmentCommunicator) postFragment).pauseLazyMode(false); + Fragment fragment = getCurrentFragment(); + if (fragment instanceof FragmentCommunicator) { + ((FragmentCommunicator) fragment).stopLazyMode(); } } public void changeNSFW(boolean nsfw) { - if (postFragment != null) { - postFragment.changeNSFW(nsfw); + Fragment fragment = getCurrentFragment(); + if (fragment instanceof PostFragment) { + ((PostFragment) fragment).changeNSFW(nsfw); } } public void changePostLayout(int postLayout) { - if (postFragment != null) { - ((FragmentCommunicator) postFragment).changePostLayout(postLayout); + Fragment fragment = getCurrentFragment(); + if (fragment instanceof PostFragment) { + ((PostFragment) fragment).changePostLayout(postLayout); } } public void goBackToTop() { - if (viewPager.getCurrentItem() == 0) { - postFragment.goBackToTop(); - } else { - commentsListingFragment.goBackToTop(); + Fragment fragment = getCurrentFragment(); + if (fragment instanceof PostFragment) { + ((PostFragment) fragment).goBackToTop(); + } else if (fragment instanceof CommentsListingFragment) { + ((CommentsListingFragment) fragment).goBackToTop(); } } + + @Override + public int getItemCount() { + return 2; + } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/SearchResultActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/SearchResultActivity.java index fede5b48..78f39e19 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/SearchResultActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/SearchResultActivity.java @@ -217,7 +217,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect } private void initializeViewPager() { - sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), getLifecycle()); + sectionsPagerAdapter = new SectionsPagerAdapter(fragmentManager, getLifecycle()); viewPager2.setAdapter(sectionsPagerAdapter); viewPager2.setOffscreenPageLimit(3); viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false)); @@ -235,13 +235,13 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> { switch (position) { case 0: - tab.setText("Posts"); + tab.setText(R.string.posts); break; case 1: - tab.setText("Comments"); + tab.setText(R.string.comments); break; case 2: - tab.setText("Users"); + tab.setText(R.string.users); break; } }).attach(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewSubredditDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewSubredditDetailActivity.java index b8686ad3..8089a65b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewSubredditDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewSubredditDetailActivity.java @@ -644,7 +644,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp } }).execute(); - sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), getLifecycle()); + sectionsPagerAdapter = new SectionsPagerAdapter(fragmentManager, getLifecycle()); viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { @@ -670,9 +670,9 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> { switch (position) { case 0: - tab.setText("Posts"); + tab.setText(R.string.posts); case 1: - tab.setText("Sidebar"); + tab.setText(R.string.sidebar); } }).attach(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewUserDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewUserDetailActivity.java index e56345a2..b793ad8b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewUserDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewUserDetailActivity.java @@ -514,16 +514,18 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele } private void initializeViewPager() { - sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), getLifecycle()); + sectionsPagerAdapter = new SectionsPagerAdapter(fragmentManager, getLifecycle()); viewPager2.setAdapter(sectionsPagerAdapter); viewPager2.setOffscreenPageLimit(2); viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false)); new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> { switch (position) { case 0: - tab.setText("Posts"); + tab.setText(R.string.posts); + break; case 1: - tab.setText("Comments"); + tab.setText(R.string.comments); + break; } }).attach(); diff --git a/app/src/main/res/layout/activity_account_saved_thing.xml b/app/src/main/res/layout/activity_account_saved_thing.xml index 57f61d2c..d297b727 100644 --- a/app/src/main/res/layout/activity_account_saved_thing.xml +++ b/app/src/main/res/layout/activity_account_saved_thing.xml @@ -47,7 +47,7 @@ </com.google.android.material.appbar.AppBarLayout> - <androidx.viewpager.widget.ViewPager + <androidx.viewpager2.widget.ViewPager2 android:id="@+id/view_pager_account_saved_thing_activity" android:layout_width="match_parent" android:layout_height="match_parent" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6020561e..b1c6893c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -187,6 +187,9 @@ <string name="subreddits">Subreddits</string> <string name="users">Users</string> <string name="multi_reddits">MultiReddits</string> + <string name="posts">Posts</string> + <string name="comments">Comments</string> + <string name="sidebar">Sidebar</string> <string name="bottom_sheet_post_text">Text</string> <string name="bottom_sheet_post_link">Link</string> |