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
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index fd32aa2..ca9d478 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.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.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 @@
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 @@
/** 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<String> getLastOutgoingCallListener;
@@ -152,7 +159,7 @@
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,17 +186,25 @@
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();
callLogFragmentListener.onActivityResume();
@@ -203,6 +218,7 @@
@Override
protected void onStop() {
super.onStop();
+ lastTabController.onActivityStop();
callLogFragmentListener.onActivityStop(
isChangingConfigurations(), getSystemService(KeyguardManager.class).isKeyguardLocked());
}
@@ -225,6 +241,7 @@
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 @@
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();
+ }
+ }
}