summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristofer Ã…kersten <akersten@google.com>2019-02-21 15:58:09 -0800
committerChristofer Ã…kersten <akersten@google.com>2019-02-22 10:22:47 -0800
commit4a33e34d7e24ded2a26a21fa263da03f2428d0ee (patch)
tree824d3f9737a78508ec3b3adf79805067a0818dd8
parented5c38228d6ff96dddd4ac05e960fe140ac432eb (diff)
downloadUniversalMediaPlayer-4a33e34d7e24ded2a26a21fa263da03f2428d0ee.tar.gz
Restore selected tab when switching views
Restores previously selected tab when switching views in the bottom navigation view. Test: manual Change-Id: Ic2437cd8eb2a5b940982e35a9b6ace3af9aaf8d0
-rw-r--r--java/com/android/pump/activity/PumpActivity.java106
1 files changed, 66 insertions, 40 deletions
diff --git a/java/com/android/pump/activity/PumpActivity.java b/java/com/android/pump/activity/PumpActivity.java
index db98321..fd9a910 100644
--- a/java/com/android/pump/activity/PumpActivity.java
+++ b/java/com/android/pump/activity/PumpActivity.java
@@ -22,6 +22,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
@@ -60,25 +61,27 @@ public class PumpActivity extends AppCompatActivity implements OnNavigationItemS
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
};
- private static final Page[] HOME_PAGES = {
- new Page(HomeFragment::newInstance, "Home")
- };
- private static final Page[] VIDEO_PAGES = {
- new Page(MovieFragment::newInstance, "Movies"),
- new Page(SeriesFragment::newInstance, "TV Shows"),
- new Page(OtherFragment::newInstance, "Personal"),
- new Page(HomeFragment::newInstance, "All videos")
- };
- private static final Page[] AUDIO_PAGES = {
- new Page(AudioFragment::newInstance, "All audios"),
- new Page(PlaylistFragment::newInstance, "Playlists"),
- new Page(AlbumFragment::newInstance, "Albums"),
- new Page(GenreFragment::newInstance, "Genres"),
- new Page(ArtistFragment::newInstance, "Artists")
- };
- private static final Page[] FAVORITE_PAGES = {
- new Page(HomeFragment::newInstance, "Videos"),
- new Page(HomeFragment::newInstance, "Audios")
+ private static final Pages[] PAGES_LIST = {
+ new Pages(R.id.menu_home, new Page[] {
+ new Page(HomeFragment::newInstance, "Home")
+ }),
+ new Pages(R.id.menu_video, new Page[] {
+ new Page(MovieFragment::newInstance, "Movies"),
+ new Page(SeriesFragment::newInstance, "TV Shows"),
+ new Page(OtherFragment::newInstance, "Personal"),
+ new Page(HomeFragment::newInstance, "All videos")
+ }),
+ new Pages(R.id.menu_audio, new Page[] {
+ new Page(AudioFragment::newInstance, "All audios"),
+ new Page(PlaylistFragment::newInstance, "Playlists"),
+ new Page(AlbumFragment::newInstance, "Albums"),
+ new Page(GenreFragment::newInstance, "Genres"),
+ new Page(ArtistFragment::newInstance, "Artists")
+ }),
+ new Pages(R.id.menu_favorite, new Page[] {
+ new Page(HomeFragment::newInstance, "Videos"),
+ new Page(HomeFragment::newInstance, "Audios")
+ })
};
private ActivityPagerAdapter mActivityPagerAdapter;
@@ -130,19 +133,11 @@ public class PumpActivity extends AppCompatActivity implements OnNavigationItemS
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_home:
- selectPages(item.getTitle(), HOME_PAGES);
- return true;
- case R.id.menu_video:
- selectPages(item.getTitle(), VIDEO_PAGES);
- return true;
- case R.id.menu_audio:
- selectPages(item.getTitle(), AUDIO_PAGES);
- return true;
- case R.id.menu_favorite:
- selectPages(item.getTitle(), FAVORITE_PAGES);
+ for (Pages pages : PAGES_LIST) {
+ if (pages.id == item.getItemId()) {
+ selectPages(item.getTitle(), pages);
return true;
+ }
}
return false;
}
@@ -194,42 +189,53 @@ public class PumpActivity extends AppCompatActivity implements OnNavigationItemS
return false;
}
- private void selectPages(@NonNull CharSequence title, @NonNull Page[] pages) {
+ private void selectPages(@NonNull CharSequence title, @NonNull Pages pages) {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle(title);
}
- mTabLayout.setVisibility(pages.length <= 1 ? View.GONE : View.VISIBLE);
- mTabLayout.setTabMode(pages.length <= 4 ? TabLayout.MODE_FIXED : TabLayout.MODE_SCROLLABLE);
+ Pages current = mActivityPagerAdapter.getPages();
+ if (current != null) {
+ current.setCurrent(mViewPager.getCurrentItem());
+ }
+
mActivityPagerAdapter.setPages(pages);
+ int count = mActivityPagerAdapter.getCount();
+ mTabLayout.setVisibility(count <= 1 ? View.GONE : View.VISIBLE);
+ mTabLayout.setTabMode(count <= 4 ? TabLayout.MODE_FIXED : TabLayout.MODE_SCROLLABLE);
+ mViewPager.setCurrentItem(pages.getCurrent());
}
private static class ActivityPagerAdapter extends FragmentPagerAdapter {
- private Page[] mPages;
+ private Pages mPages;
private ActivityPagerAdapter(@NonNull FragmentManager fm) {
super(fm);
}
- private void setPages(@NonNull Page[] pages) {
+ private void setPages(@NonNull Pages pages) {
mPages = pages;
notifyDataSetChanged();
}
+ private @Nullable Pages getPages() {
+ return mPages;
+ }
+
@Override
public int getCount() {
- return mPages.length;
+ return mPages.pages.length;
}
@Override
public @NonNull Fragment getItem(int position) {
- return mPages[position].pageCreator.newInstance();
+ return mPages.pages[position].pageCreator.newInstance();
}
@Override
public long getItemId(int position) {
- return mPages[position].id;
+ return mPages.pages[position].id;
}
@Override
@@ -239,7 +245,7 @@ public class PumpActivity extends AppCompatActivity implements OnNavigationItemS
@Override
public @NonNull CharSequence getPageTitle(int position) {
- return mPages[position].title;
+ return mPages.pages[position].title;
}
}
@@ -256,6 +262,26 @@ public class PumpActivity extends AppCompatActivity implements OnNavigationItemS
private final String title;
}
+ private static class Pages {
+ private Pages(@IdRes int id, @NonNull Page[] pages) {
+ this.id = id;
+ this.pages = pages;
+ }
+
+ private final int id;
+ private final Page[] pages;
+
+ private int current;
+
+ private void setCurrent(int current) {
+ this.current = current;
+ }
+
+ private int getCurrent() {
+ return current;
+ }
+ }
+
@FunctionalInterface
private interface PageCreator {
@NonNull Fragment newInstance();