From 937008a4bd7b85aa86588f5bdf3af93750d78ce2 Mon Sep 17 00:00:00 2001 From: "H. Lehmann" Date: Tue, 21 Apr 2020 20:35:19 +0200 Subject: [PATCH] Remember last-used tab (#730) --- .../xbmc/kore/ui/AbstractTabsFragment.java | 26 +++++++++++++++++++ .../sections/addon/AddonDetailsFragment.java | 5 ++++ .../addon/AddonListContainerFragment.java | 5 ++++ .../sections/audio/ArtistDetailsFragment.java | 6 +++++ .../ui/sections/audio/MusicListFragment.java | 5 ++++ .../ui/sections/file/FileListFragment.java | 5 ++++ .../localfile/LocalFileListFragment.java | 5 ++++ .../ui/sections/video/PVRListFragment.java | 4 +++ 8 files changed, 61 insertions(+) diff --git a/app/src/main/java/org/xbmc/kore/ui/AbstractTabsFragment.java b/app/src/main/java/org/xbmc/kore/ui/AbstractTabsFragment.java index 58a1390..b4a5057 100644 --- a/app/src/main/java/org/xbmc/kore/ui/AbstractTabsFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/AbstractTabsFragment.java @@ -16,6 +16,8 @@ package org.xbmc.kore.ui; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.view.ViewPager; @@ -36,8 +38,11 @@ import butterknife.Unbinder; abstract public class AbstractTabsFragment extends AbstractFragment implements SharedElementTransition.SharedElement { private static final String TAG = LogUtils.makeLogTag(AbstractTabsFragment.class); + private static final String PREFERENCES_NAME = "AbstractTabsFragmentPreferences"; + private static final String PREFERENCE_PREFIX_LAST_TAB = "lastTab_"; @BindView(R.id.pager) ViewPager viewPager; + private SharedPreferences preferences; private Unbinder unbinder; @@ -57,13 +62,28 @@ abstract public class AbstractTabsFragment extends AbstractFragment return null; } + preferences = getContext().getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_default_view_pager, container, false); unbinder = ButterKnife.bind(this, root); viewPager.setAdapter(createTabsAdapter(getDataHolder())); + + if (shouldRememberLastTab()) { + viewPager.setCurrentItem(preferences.getInt(PREFERENCE_PREFIX_LAST_TAB + getClass().getName(), 0), false); + } return root; } + @Override + public void onStop() { + super.onStop(); + if (shouldRememberLastTab()) { + preferences.edit() + .putInt(PREFERENCE_PREFIX_LAST_TAB + getClass().getName(), viewPager.getCurrentItem()) + .apply(); + } + } + @Override public void onActivityCreated (Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); @@ -106,4 +126,10 @@ abstract public class AbstractTabsFragment extends AbstractFragment * @return */ abstract protected TabsAdapter createTabsAdapter(AbstractInfoFragment.DataHolder dataHolder); + + /** + * Specifies whether to store the last-used tab. + * @return true if the fragment should remember the last-used tab. + */ + abstract protected boolean shouldRememberLastTab(); } diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonDetailsFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonDetailsFragment.java index b40de79..bc75070 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonDetailsFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonDetailsFragment.java @@ -54,4 +54,9 @@ public class AddonDetailsFragment extends AbstractTabsFragment { .addTab(MediaFileListFragment.class, contentArgs(args), R.string.addon_content, baseFragmentId++) ; } + + @Override + protected boolean shouldRememberLastTab() { + return false; + } } diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonListContainerFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonListContainerFragment.java index 41d8078..c96bb57 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonListContainerFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/addon/AddonListContainerFragment.java @@ -75,4 +75,9 @@ public class AddonListContainerFragment extends AbstractTabsFragment { return tabsAdapter; } + + @Override + protected boolean shouldRememberLastTab() { + return true; + } } diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/audio/ArtistDetailsFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/audio/ArtistDetailsFragment.java index 98e71cb..006778b 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/audio/ArtistDetailsFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/audio/ArtistDetailsFragment.java @@ -43,4 +43,10 @@ public class ArtistDetailsFragment extends AbstractTabsFragment { .addTab(SongsListFragment.class, arguments, R.string.songs, baseFragmentId + 2); } + + + @Override + protected boolean shouldRememberLastTab() { + return false; + } } diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/audio/MusicListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/audio/MusicListFragment.java index 9c2744a..0266c5f 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/audio/MusicListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/audio/MusicListFragment.java @@ -84,4 +84,9 @@ public class MusicListFragment extends AbstractTabsFragment { .addTab(MusicVideoListFragment.class, getArguments(), R.string.music_videos, 5); return tabsAdapter; } + + @Override + protected boolean shouldRememberLastTab() { + return true; + } } diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/file/FileListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/file/FileListFragment.java index 515455b..8d49200 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/file/FileListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/file/FileListFragment.java @@ -77,4 +77,9 @@ public class FileListFragment extends AbstractTabsFragment // Not handled, let the activity handle it return false; } + + @Override + protected boolean shouldRememberLastTab() { + return true; + } } \ No newline at end of file diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/localfile/LocalFileListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/localfile/LocalFileListFragment.java index 0a346ec..5be7a33 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/localfile/LocalFileListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/localfile/LocalFileListFragment.java @@ -104,4 +104,9 @@ public class LocalFileListFragment extends AbstractTabsFragment // Not handled, let the activity handle it return false; } + + @Override + protected boolean shouldRememberLastTab() { + return true; + } } \ No newline at end of file diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/video/PVRListFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/video/PVRListFragment.java index 029e952..9c14616 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/video/PVRListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/video/PVRListFragment.java @@ -68,4 +68,8 @@ public class PVRListFragment extends AbstractTabsFragment return false; } + @Override + protected boolean shouldRememberLastTab() { + return true; + } }