From 5df20b3ec5e7a4f496f5d20da249df199c47bad5 Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Wed, 31 Jan 2018 20:27:44 -0800 Subject: Implemented Last tab in NUI. Now when the user exits Dialer NUI, next time they open Dialer they will return to the same location they were before. This change also preserves active tab through configuration changes. Bug: 72068052,72722083 Test: MainActivityIntegrationTest PiperOrigin-RevId: 184085830 Change-Id: Ic6d3bf7c9089b38d480dfc658127eec6c9c55bfb --- .../com/android/dialer/main/impl/MainActivity.java | 56 ++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) (limited to 'java') diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java index fd32aa2a1..ca9d47843 100644 --- a/java/com/android/dialer/main/impl/MainActivity.java +++ b/java/com/android/dialer/main/impl/MainActivity.java @@ -53,6 +53,7 @@ import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.DialerExecutorComponent; import com.android.dialer.common.concurrent.UiListener; import com.android.dialer.compat.CompatUtils; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.configprovider.ConfigProviderComponent; import com.android.dialer.constants.ActivityRequestCodes; import com.android.dialer.contactsfragment.ContactsFragment; @@ -76,6 +77,7 @@ import com.android.dialer.precall.PreCall; import com.android.dialer.searchfragment.list.NewSearchFragment.SearchFragmentListener; import com.android.dialer.smartdial.util.SmartDialPrefix; import com.android.dialer.speeddial.SpeedDialFragment; +import com.android.dialer.storage.StorageComponent; import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.util.DialerUtils; import com.android.dialer.util.TransactionSafeActivity; @@ -92,6 +94,8 @@ public final class MainActivity extends TransactionSafeActivity DisambigDialogDismissedListener { private static final String KEY_SAVED_LANGUAGE_CODE = "saved_language_code"; + private static final String KEY_CURRENT_TAB = "current_tab"; + private static final String KEY_LAST_TAB = "last_tab"; private final MainOnContactSelectedListener onContactSelectedListener = new MainOnContactSelectedListener(this); @@ -114,6 +118,9 @@ public final class MainActivity extends TransactionSafeActivity /** Language the device was in last time {@link #onSaveInstanceState(Bundle)} was called. */ private String savedLanguageCode; + private LastTabController lastTabController; + + private BottomNavBar bottomNav; private View snackbarContainer; private UiListener getLastOutgoingCallListener; @@ -152,7 +159,7 @@ public final class MainActivity extends TransactionSafeActivity MainToolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(findViewById(R.id.toolbar)); - BottomNavBar bottomNav = findViewById(R.id.bottom_nav_bar); + bottomNav = findViewById(R.id.bottom_nav_bar); MainBottomNavBarBottomNavTabListener bottomNavTabListener = new MainBottomNavBarBottomNavTabListener( this, getFragmentManager(), getSupportFragmentManager()); @@ -179,16 +186,24 @@ public final class MainActivity extends TransactionSafeActivity bottomNavTabListener, findViewById(R.id.contact_tile_drag_shadow_overlay)); onDragDropListener = new MainOnDragDropListener(); + lastTabController = new LastTabController(this, bottomNav); + // Restore our view state if needed, else initialize as if the app opened for the first time if (savedInstanceState != null) { savedLanguageCode = savedInstanceState.getString(KEY_SAVED_LANGUAGE_CODE); searchController.onRestoreInstanceState(savedInstanceState); + bottomNav.selectTab(savedInstanceState.getInt(KEY_CURRENT_TAB)); } else { - // TODO(calderwoodra): Implement last tab - bottomNav.selectTab(BottomNavBar.TabIndex.SPEED_DIAL); + lastTabController.selectLastTab(); } } + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + lastTabController.selectLastTab(); + } + @Override protected void onResume() { super.onResume(); @@ -203,6 +218,7 @@ public final class MainActivity extends TransactionSafeActivity @Override protected void onStop() { super.onStop(); + lastTabController.onActivityStop(); callLogFragmentListener.onActivityStop( isChangingConfigurations(), getSystemService(KeyguardManager.class).isKeyguardLocked()); } @@ -225,6 +241,7 @@ public final class MainActivity extends TransactionSafeActivity protected void onSaveInstanceState(Bundle bundle) { super.onSaveInstanceState(bundle); bundle.putString(KEY_SAVED_LANGUAGE_CODE, CompatUtils.getLocale(this).getISO3Language()); + bundle.putInt(KEY_CURRENT_TAB, bottomNav.getSelectedTab()); searchController.onSaveInstanceState(bundle); } @@ -847,4 +864,37 @@ public final class MainActivity extends TransactionSafeActivity transaction.commit(); } } + + private static final class LastTabController { + + private final Context context; + private final BottomNavBar bottomNavBar; + private final boolean isEnabled; + + public LastTabController(Context context, BottomNavBar bottomNavBar) { + this.context = context; + this.bottomNavBar = bottomNavBar; + isEnabled = ConfigProviderBindings.get(context).getBoolean("last_tab_enabled", false); + } + + /** Sets the last tab if the feature is enabled, otherwise defaults to speed dial. */ + public void selectLastTab() { + @TabIndex int tabIndex = TabIndex.SPEED_DIAL; + if (isEnabled) { + tabIndex = + StorageComponent.get(context) + .unencryptedSharedPrefs() + .getInt(KEY_LAST_TAB, TabIndex.SPEED_DIAL); + } + bottomNavBar.selectTab(tabIndex); + } + + public void onActivityStop() { + StorageComponent.get(context) + .unencryptedSharedPrefs() + .edit() + .putInt(KEY_LAST_TAB, bottomNavBar.getSelectedTab()) + .apply(); + } + } } -- cgit v1.2.3