Save and restore selected tabs
This commit is contained in:
parent
49ea547003
commit
161e99f1db
@ -30,7 +30,6 @@ import android.content.res.Configuration;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Typeface;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.DrawableRes;
|
||||
import android.support.annotation.LayoutRes;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
@ -55,6 +54,7 @@ import org.solovyev.android.calculator.view.Tabs;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import static org.solovyev.android.calculator.App.cast;
|
||||
|
||||
@ -91,7 +91,6 @@ public class ActivityUi {
|
||||
private Preferences.Gui.Layout layout = Preferences.Gui.Layout.main_calculator;
|
||||
@Nonnull
|
||||
private Language language = Languages.SYSTEM_LANGUAGE;
|
||||
private int selectedNavigationIndex = 0;
|
||||
|
||||
public ActivityUi(@Nonnull AppCompatActivity activity, @LayoutRes int layoutId) {
|
||||
this.activity = activity;
|
||||
@ -127,11 +126,6 @@ public class ActivityUi {
|
||||
App.getGa().getAnalytics().reportActivityStart(activity);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
private static String makeLastTabKey(@Nonnull Activity activity) {
|
||||
return "tab_" + activity.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
public static void setFont(@Nonnull TextView view, @Nonnull Typeface newTypeface) {
|
||||
final Typeface oldTypeface = view.getTypeface();
|
||||
if (oldTypeface == newTypeface) {
|
||||
@ -188,26 +182,8 @@ public class ActivityUi {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
public void restoreSavedTab() {
|
||||
final ActionBar actionBar = activity.getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
if (selectedNavigationIndex >= 0 && selectedNavigationIndex < actionBar.getTabCount()) {
|
||||
actionBar.setSelectedNavigationItem(selectedNavigationIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onPause() {
|
||||
final ActionBar actionBar = activity.getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
final int selectedNavigationIndex = actionBar.getSelectedNavigationIndex();
|
||||
if (selectedNavigationIndex >= 0) {
|
||||
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||
final SharedPreferences.Editor editor = preferences.edit();
|
||||
editor.putInt(makeLastTabKey(activity), selectedNavigationIndex);
|
||||
editor.apply();
|
||||
}
|
||||
}
|
||||
tabs.onPause();
|
||||
}
|
||||
|
||||
public void onDestroy() {
|
||||
@ -248,10 +224,6 @@ public class ActivityUi {
|
||||
if (!restartIfThemeChanged(activity, theme)) {
|
||||
restartIfLanguageChanged(activity, language);
|
||||
}
|
||||
|
||||
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||
selectedNavigationIndex = preferences.getInt(makeLastTabKey(activity), -1);
|
||||
restoreSavedTab();
|
||||
}
|
||||
|
||||
private void addHelpInfo(@Nonnull Activity activity, @Nonnull View root) {
|
||||
|
@ -16,6 +16,7 @@ import org.solovyev.android.calculator.preferences.PreferencesActivity;
|
||||
import org.solovyev.android.calculator.preferences.PurchaseDialogActivity;
|
||||
import org.solovyev.android.calculator.variables.EditVariableFragment;
|
||||
import org.solovyev.android.calculator.variables.VariablesFragment;
|
||||
import org.solovyev.android.calculator.view.Tabs;
|
||||
import org.solovyev.android.calculator.wizard.DragButtonWizardStep;
|
||||
|
||||
import dagger.Component;
|
||||
@ -51,4 +52,5 @@ public interface AppComponent {
|
||||
void inject(DragButtonWizardStep fragment);
|
||||
void inject(BaseFragment fragment);
|
||||
void inject(HistoryActivity activity);
|
||||
void inject(Tabs tabs);
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ public class AppModule {
|
||||
public static final String THREAD_BACKGROUND = "thread-background";
|
||||
public static final String DIR_FILES = "dir-files";
|
||||
public static final String PREFS_FLOATING = "prefs-floating";
|
||||
public static final String PREFS_TABS = "prefs-tabs";
|
||||
|
||||
@NonNull
|
||||
private final Application application;
|
||||
@ -88,6 +89,13 @@ public class AppModule {
|
||||
return application.getSharedPreferences("floating-calculator", Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Named(PREFS_TABS)
|
||||
SharedPreferences provideTabsPreferences() {
|
||||
return application.getSharedPreferences("tabs", Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Named(THREAD_INIT)
|
||||
|
@ -1,34 +1,44 @@
|
||||
package org.solovyev.android.calculator.view;
|
||||
|
||||
import static org.solovyev.android.calculator.App.cast;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
import org.solovyev.android.calculator.AppModule;
|
||||
import org.solovyev.android.calculator.FragmentTab;
|
||||
import org.solovyev.android.calculator.R;
|
||||
import org.solovyev.android.calculator.entities.BaseEntitiesFragment;
|
||||
import org.solovyev.android.calculator.entities.Category;
|
||||
import org.solovyev.android.views.Adjuster;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
public class Tabs {
|
||||
|
||||
@Nonnull
|
||||
private final AppCompatActivity activity;
|
||||
@Nonnull
|
||||
private final TabFragments adapter;
|
||||
@Inject
|
||||
@Named(AppModule.PREFS_TABS)
|
||||
SharedPreferences preferences;
|
||||
@Nullable
|
||||
@Bind(R.id.tabs)
|
||||
TabLayout tabLayout;
|
||||
@ -42,6 +52,7 @@ public class Tabs {
|
||||
}
|
||||
|
||||
public void onCreate() {
|
||||
cast(activity.getApplicationContext()).getComponent().inject(this);
|
||||
ButterKnife.bind(this, activity);
|
||||
|
||||
if (tabLayout == null || viewPager == null) {
|
||||
@ -55,26 +66,7 @@ public class Tabs {
|
||||
viewPager.setAdapter(adapter);
|
||||
tabLayout.setTabMode(tabs > 3 ? TabLayout.MODE_SCROLLABLE : TabLayout.MODE_FIXED);
|
||||
tabLayout.setupWithViewPager(viewPager);
|
||||
|
||||
|
||||
if (ViewCompat.isLaidOut(tabLayout)) {
|
||||
tabLayout.setupWithViewPager(viewPager);
|
||||
} else {
|
||||
final ViewTreeObserver treeObserver = Adjuster.getTreeObserver(tabLayout);
|
||||
if (treeObserver != null) {
|
||||
treeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
final ViewTreeObserver anotherTreeObserver = Adjuster.getTreeObserver(tabLayout);
|
||||
if(anotherTreeObserver != null) {
|
||||
//noinspection deprecation
|
||||
anotherTreeObserver.removeGlobalOnLayoutListener(this);
|
||||
}
|
||||
tabLayout.setupWithViewPager(viewPager);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
restoreSelectedTab();
|
||||
}
|
||||
|
||||
public void addTab(@Nonnull Category category, @Nonnull FragmentTab tab) {
|
||||
@ -103,6 +95,13 @@ public class Tabs {
|
||||
return adapter.getItem(viewPager.getCurrentItem());
|
||||
}
|
||||
|
||||
public int getCurrentTab() {
|
||||
if (viewPager == null) {
|
||||
return -1;
|
||||
}
|
||||
return viewPager.getCurrentItem();
|
||||
}
|
||||
|
||||
private final class TabFragments extends FragmentPagerAdapter {
|
||||
|
||||
@Nonnull
|
||||
@ -152,4 +151,43 @@ public class Tabs {
|
||||
return Fragment.instantiate(activity, fragmentClass.getName(), fragmentArgs);
|
||||
}
|
||||
}
|
||||
|
||||
public int getTabCount() {
|
||||
return adapter.getCount();
|
||||
}
|
||||
|
||||
public void selectTab(int index) {
|
||||
if(tabLayout == null) {
|
||||
return;
|
||||
}
|
||||
final TabLayout.Tab tab = tabLayout.getTabAt(index);
|
||||
if (tab != null) {
|
||||
tab.select();
|
||||
}
|
||||
}
|
||||
|
||||
public void restoreSelectedTab() {
|
||||
final int selectedTab = preferences.getInt(makeTabKey(activity), -1);
|
||||
if (selectedTab >= 0 && selectedTab < getTabCount()) {
|
||||
selectTab(selectedTab);
|
||||
}
|
||||
}
|
||||
|
||||
public void onPause() {
|
||||
saveSelectedTab();
|
||||
}
|
||||
|
||||
private void saveSelectedTab() {
|
||||
final int selectedTab = getCurrentTab();
|
||||
if (selectedTab >= 0) {
|
||||
final SharedPreferences.Editor editor = preferences.edit();
|
||||
editor.putInt(makeTabKey(activity), selectedTab);
|
||||
editor.apply();
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
private static String makeTabKey(@Nonnull Activity activity) {
|
||||
return activity.getClass().getSimpleName();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user