From e998b7edbe286d50137eda883ac8afd8a04f0f34 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Sat, 19 Dec 2020 00:39:25 -0500 Subject: [PATCH] Migrate activities to ViewPager2 --- .../twire/activities/ChannelActivity.java | 76 ++++++++++--------- .../twire/activities/SearchActivity.java | 67 ++++++++-------- app/src/main/res/layout/activity_search.xml | 2 +- .../res/layout/activity_streamer_info.xml | 2 +- 4 files changed, 75 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/com/perflyst/twire/activities/ChannelActivity.java b/app/src/main/java/com/perflyst/twire/activities/ChannelActivity.java index f4019a3f..843e3514 100644 --- a/app/src/main/java/com/perflyst/twire/activities/ChannelActivity.java +++ b/app/src/main/java/com/perflyst/twire/activities/ChannelActivity.java @@ -27,12 +27,12 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; +import androidx.fragment.app.FragmentActivity; import androidx.palette.graphics.Palette; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import androidx.viewpager.widget.ViewPager; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.CustomTarget; @@ -41,6 +41,7 @@ import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; import com.perflyst.twire.R; import com.perflyst.twire.activities.main.LazyFetchingActivity; import com.perflyst.twire.adapters.PanelAdapter; @@ -69,11 +70,15 @@ public class ChannelActivity extends ThemeActivity { fragmentVodsBroadCastsOnlyArg = "vodsBroadcastsOnlyArg", fragmentVodsStreamerInfoArg = "streamerNameArg"; private final int SHOW_FAB_DELAY = 300; + private final static int POSITION_DESC = 0; + private final static int POSITION_BROADCASTS = 1; + private final static int POSITION_HIGHLIGHTS = 2; + private final static int TOTAL_COUNT = 3; private ChannelInfo info; private ImageView streamerImage; private Toolbar toolbar, additionalToolbar; - private ViewPager mViewPager; + private ViewPager2 mViewPager; private TabLayout mTabs; private AppBarLayout mAppBar; private FloatingActionButton mFab; @@ -153,10 +158,23 @@ public void onBackPressed() { private void setUpTabs() { assert mViewPager != null; - mViewPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager())); + mViewPager.setAdapter(new SectionsPagerAdapter(this)); assert mTabs != null; - mTabs.setupWithViewPager(mViewPager); + new TabLayoutMediator(mTabs, mViewPager, (tab, position) -> { + switch (position) { + default: // Deliberate fall-through to description tab + case POSITION_DESC: + tab.setText(R.string.streamerInfo_desc_tab); + break; + case POSITION_BROADCASTS: + tab.setText(R.string.streamerInfo_broadcasts_tab); + break; + case POSITION_HIGHLIGHTS: + tab.setText(R.string.streamerInfo_highlights_tab); + break; + } + }).attach(); mTabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override @@ -624,48 +642,32 @@ public List getVisualElements() throws JSONException { } } - private class SectionsPagerAdapter extends FragmentPagerAdapter { - private final int POSITION_DESC = 0; - private final int POSITION_BROADCASTS = 1; - private final int POSITION_HIGHLIGHTS = 2; + private class SectionsPagerAdapter extends FragmentStateAdapter { - - SectionsPagerAdapter(FragmentManager fm) { - super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + SectionsPagerAdapter(FragmentActivity fa) { + super(fa); mDescriptionFragment = InfoFragment.newInstance(info); mBroadcastsFragment = VodFragment.newInstance(true, info); mHighlightsFragment = VodFragment.newInstance(false, info); } + @NonNull @Override - public Fragment getItem(int position) { - if (position == POSITION_DESC) { - return mDescriptionFragment; - } else if (position == POSITION_BROADCASTS) { - return mBroadcastsFragment; - } else if (position == POSITION_HIGHLIGHTS) { - return mHighlightsFragment; - } else { - return InfoFragment.newInstance(info); - } - } - - @Override - public int getCount() { - return 3; - } - - @Override - public CharSequence getPageTitle(int position) { + public Fragment createFragment(int position) { switch (position) { - case POSITION_DESC: - return getResources().getString(R.string.streamerInfo_desc_tab); + default: + case POSITION_DESC: // Deliberate fall-through to description tab + return mDescriptionFragment; case POSITION_BROADCASTS: - return getResources().getString(R.string.streamerInfo_broadcasts_tab); + return mBroadcastsFragment; case POSITION_HIGHLIGHTS: - return getResources().getString(R.string.streamerInfo_highlights_tab); + return mHighlightsFragment; } - return null; + } + + @Override + public int getItemCount() { + return TOTAL_COUNT; } } } diff --git a/app/src/main/java/com/perflyst/twire/activities/SearchActivity.java b/app/src/main/java/com/perflyst/twire/activities/SearchActivity.java index f436cc5a..2f03e0ba 100644 --- a/app/src/main/java/com/perflyst/twire/activities/SearchActivity.java +++ b/app/src/main/java/com/perflyst/twire/activities/SearchActivity.java @@ -10,13 +10,15 @@ import android.widget.EditText; import android.widget.ImageView; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.viewpager.widget.ViewPager; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; import com.perflyst.twire.R; import com.perflyst.twire.activities.main.LazyFetchingActivity; import com.perflyst.twire.adapters.ChannelsAdapter; @@ -50,8 +52,12 @@ public class SearchActivity extends ThemeActivity { + private static final int POSITION_STREAMS = 0; + private static final int POSITION_CHANNELS = 1; + private static final int POSITION_GAMES = 2; + private static final int TOTAL_COUNT = 3; @BindView(R.id.container) - protected ViewPager mViewPager; + protected ViewPager2 mViewPager; @BindView(R.id.ic_back_arrow) protected ImageView mBackIcon; @BindView(R.id.edit_text_search) @@ -100,14 +106,26 @@ public void onBackPressed() { private void setUpTabs() { // Create the adapter that will return a fragment for each of the three // primary sections of the activity. - SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); + SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(this); - // Set up the ViewPager with the sections adapter. + // Set up the ViewPager2 with the sections adapter. mViewPager.setAdapter(mSectionsPagerAdapter); TabLayout tabLayout = findViewById(R.id.tabs); - assert tabLayout != null; - tabLayout.setupWithViewPager(mViewPager); + new TabLayoutMediator(tabLayout, mViewPager, (tab, position) -> { + switch (position) { + default: // Deliberate fall-through to stream tab + case POSITION_STREAMS: + tab.setText(R.string.streams_tab); + break; + case POSITION_CHANNELS: + tab.setText(R.string.streamers_tab); + break; + case POSITION_GAMES: + tab.setText(R.string.games_tab); + break; + } + }).attach(); } public String getQuery() { @@ -400,49 +418,32 @@ public void setMaxElementsToFetch(int aMax) { public abstract MainActivityAdapter constructAdapter(); } - private class SectionsPagerAdapter extends FragmentPagerAdapter { - private final int POSITION_STREAMS = 0; - private final int POSITION_CHANNELS = 1; - private final int POSITION_GAMES = 2; - + private class SectionsPagerAdapter extends FragmentStateAdapter { - SectionsPagerAdapter(FragmentManager fm) { - super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + SectionsPagerAdapter(FragmentActivity fa) { + super(fa); mStreamsFragment = SearchStreamsFragment.newInstance(); mChannelsFragment = SearchChannelsFragment.newInstance(); mGamesFragment = SearchGamesFragment.newInstance(); } + @NonNull @Override - public Fragment getItem(int position) { + public Fragment createFragment(int position) { switch (position) { + default: // Deliberate fall-through to stream tab case POSITION_STREAMS: return mStreamsFragment; case POSITION_CHANNELS: return mChannelsFragment; case POSITION_GAMES: return mGamesFragment; - default: - return SearchStreamsFragment.newInstance(); } } @Override - public int getCount() { - return 3; - } - - @Override - public CharSequence getPageTitle(int position) { - switch (position) { - case POSITION_STREAMS: - return getResources().getString(R.string.streams_tab); - case POSITION_CHANNELS: - return getResources().getString(R.string.streamers_tab); - case POSITION_GAMES: - return getResources().getString(R.string.games_tab); - } - return null; + public int getItemCount() { + return TOTAL_COUNT; } } } diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 2dd3bb02..3c5fcb50 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -92,7 +92,7 @@ - -