Remember last-used tab (#730)

This commit is contained in:
H. Lehmann 2020-04-21 20:35:19 +02:00 committed by GitHub
parent 0d25fc90d5
commit 937008a4bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 61 additions and 0 deletions

View File

@ -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 <code>true</code> if the fragment should remember the last-used tab.
*/
abstract protected boolean shouldRememberLastTab();
}

View File

@ -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;
}
}

View File

@ -75,4 +75,9 @@ public class AddonListContainerFragment extends AbstractTabsFragment {
return tabsAdapter;
}
@Override
protected boolean shouldRememberLastTab() {
return true;
}
}

View File

@ -43,4 +43,10 @@ public class ArtistDetailsFragment extends AbstractTabsFragment {
.addTab(SongsListFragment.class, arguments,
R.string.songs, baseFragmentId + 2);
}
@Override
protected boolean shouldRememberLastTab() {
return false;
}
}

View File

@ -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;
}
}

View File

@ -77,4 +77,9 @@ public class FileListFragment extends AbstractTabsFragment
// Not handled, let the activity handle it
return false;
}
@Override
protected boolean shouldRememberLastTab() {
return true;
}
}

View File

@ -104,4 +104,9 @@ public class LocalFileListFragment extends AbstractTabsFragment
// Not handled, let the activity handle it
return false;
}
@Override
protected boolean shouldRememberLastTab() {
return true;
}
}

View File

@ -68,4 +68,8 @@ public class PVRListFragment extends AbstractTabsFragment
return false;
}
@Override
protected boolean shouldRememberLastTab() {
return true;
}
}