Merge changes I59b5f641,If438f1b7

* changes:
  Search, Dialpad, BottomBar and Toolbar now persist state through rotation.
  Descrease bubble bottom text scaling factor.
diff --git a/java/com/android/dialer/main/impl/BottomNavBar.java b/java/com/android/dialer/main/impl/BottomNavBar.java
index 9aaa988..66a57be 100644
--- a/java/com/android/dialer/main/impl/BottomNavBar.java
+++ b/java/com/android/dialer/main/impl/BottomNavBar.java
@@ -48,6 +48,7 @@
   private BottomNavItem contacts;
   private BottomNavItem voicemail;
   private OnBottomNavTabSelectedListener listener;
+  private @TabIndex int selectedTab;
 
   public BottomNavBar(Context context, @Nullable AttributeSet attrs) {
     super(context, attrs);
@@ -68,21 +69,25 @@
 
     speedDial.setOnClickListener(
         v -> {
+          selectedTab = TabIndex.SPEED_DIAL;
           setSelected(speedDial);
           listener.onSpeedDialSelected();
         });
     callLog.setOnClickListener(
         v -> {
+          selectedTab = TabIndex.HISTORY;
           setSelected(callLog);
           listener.onCallLogSelected();
         });
     contacts.setOnClickListener(
         v -> {
+          selectedTab = TabIndex.CONTACTS;
           setSelected(contacts);
           listener.onContactsSelected();
         });
     voicemail.setOnClickListener(
         v -> {
+          selectedTab = TabIndex.VOICEMAIL;
           setSelected(voicemail);
           listener.onVoicemailSelected();
         });
@@ -118,6 +123,10 @@
     this.listener = listener;
   }
 
+  public int getSelectedTab() {
+    return selectedTab;
+  }
+
   /** Listener for bottom nav tab's on click events. */
   public interface OnBottomNavTabSelectedListener {
 
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 7aae8cb..168589f 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -51,11 +51,9 @@
         DialpadFragment.HostInterface,
         SearchFragmentListener {
 
-  private static final String IS_FAB_HIDDEN_KEY = "is_fab_hidden";
   private static final String KEY_SAVED_LANGUAGE_CODE = "saved_language_code";
 
   private MainSearchController searchController;
-  private FloatingActionButton fab;
 
   /** Language the device was in last time {@link #onSaveInstanceState(Bundle)} was called. */
   private String savedLanguageCode;
@@ -75,24 +73,31 @@
     super.onCreate(savedInstanceState);
     LogUtil.enterBlock("MainActivity.onCreate");
     setContentView(R.layout.main_activity);
-    initLayout();
+    initLayout(savedInstanceState);
     SmartDialPrefix.initializeNanpSettings(this);
   }
 
-  private void initLayout() {
-    fab = findViewById(R.id.fab);
+  private void initLayout(Bundle savedInstanceState) {
+    FloatingActionButton fab = findViewById(R.id.fab);
     fab.setOnClickListener(v -> searchController.showDialpad(true));
 
     MainToolbar toolbar = findViewById(R.id.toolbar);
     setSupportActionBar(findViewById(R.id.toolbar));
 
-    BottomNavBar navBar = findViewById(R.id.bottom_nav_bar);
-    navBar.setOnTabSelectedListener(new MainBottomNavBarBottomNavTabListener());
-    // TODO(calderwoodra): Implement last tab
-    navBar.selectTab(BottomNavBar.TabIndex.SPEED_DIAL);
+    BottomNavBar bottomNav = findViewById(R.id.bottom_nav_bar);
+    bottomNav.setOnTabSelectedListener(new MainBottomNavBarBottomNavTabListener());
 
-    searchController = new MainSearchController(this, navBar, fab, toolbar);
+    searchController = new MainSearchController(this, bottomNav, fab, toolbar);
     toolbar.setSearchBarListener(searchController);
+
+    // 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);
+    } else {
+      // TODO(calderwoodra): Implement last tab
+      bottomNav.selectTab(BottomNavBar.TabIndex.SPEED_DIAL);
+    }
   }
 
   @Override
@@ -107,17 +112,8 @@
   @Override
   protected void onSaveInstanceState(Bundle bundle) {
     super.onSaveInstanceState(bundle);
-    bundle.putBoolean(IS_FAB_HIDDEN_KEY, !fab.isShown());
     bundle.putString(KEY_SAVED_LANGUAGE_CODE, CompatUtils.getLocale(this).getISO3Language());
-  }
-
-  @Override
-  protected void onRestoreInstanceState(Bundle savedInstanceState) {
-    super.onRestoreInstanceState(savedInstanceState);
-    if (savedInstanceState.getBoolean(IS_FAB_HIDDEN_KEY, false)) {
-      fab.hide();
-    }
-    savedLanguageCode = savedInstanceState.getString(KEY_SAVED_LANGUAGE_CODE);
+    searchController.onSaveInstanceState(bundle);
   }
 
   @Override
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 76c93bb..041e32e 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -17,6 +17,7 @@
 package com.android.dialer.main.impl;
 
 import android.app.FragmentTransaction;
+import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.design.widget.FloatingActionButton;
 import android.text.TextUtils;
@@ -52,6 +53,12 @@
  */
 final class MainSearchController implements SearchBarListener {
 
+  private static final String KEY_IS_FAB_HIDDEN = "is_fab_hidden";
+  private static final String KEY_CURRENT_TAB = "current_tab";
+  private static final String KEY_BOTTOM_NAV_VISIBILITY = "bottom_nav_visibility";
+  private static final String KEY_IS_TOOLBAR_EXPANDED = "is_toolbar_expanded";
+  private static final String KEY_IS_TOOLBAR_SLIDE_UP = "is_toolbar_slide_up";
+
   private static final String DIALPAD_FRAGMENT_TAG = "dialpad_fragment_tag";
   private static final String SEARCH_FRAGMENT_TAG = "search_fragment_tag";
 
@@ -155,6 +162,7 @@
   /** Should be called when {@link DialpadListener#onDialpadShown()} is called. */
   public void onDialpadShown() {
     getDialpadFragment().slideUp(true);
+    hideBottomNav();
   }
 
   /**
@@ -293,4 +301,26 @@
 
   @Override
   public void sendFeedback() {}
+
+  public void onSaveInstanceState(Bundle bundle) {
+    bundle.putBoolean(KEY_IS_FAB_HIDDEN, !fab.isShown());
+    bundle.putInt(KEY_CURRENT_TAB, bottomNav.getSelectedTab());
+    bundle.putInt(KEY_BOTTOM_NAV_VISIBILITY, bottomNav.getVisibility());
+    bundle.putBoolean(KEY_IS_TOOLBAR_EXPANDED, toolbar.isExpanded());
+    bundle.putBoolean(KEY_IS_TOOLBAR_SLIDE_UP, toolbar.isSlideUp());
+  }
+
+  public void onRestoreInstanceState(Bundle savedInstanceState) {
+    bottomNav.selectTab(savedInstanceState.getInt(KEY_CURRENT_TAB));
+    bottomNav.setVisibility(savedInstanceState.getInt(KEY_BOTTOM_NAV_VISIBILITY));
+    if (savedInstanceState.getBoolean(KEY_IS_FAB_HIDDEN, false)) {
+      fab.hide();
+    }
+    if (savedInstanceState.getBoolean(KEY_IS_TOOLBAR_EXPANDED, false)) {
+      toolbar.expand(false, Optional.absent());
+    }
+    if (savedInstanceState.getBoolean(KEY_IS_TOOLBAR_SLIDE_UP, false)) {
+      toolbar.slideUp(false);
+    }
+  }
 }
diff --git a/java/com/android/dialer/main/impl/toolbar/MainToolbar.java b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java
index 6e38d2e..1d7f7ce 100644
--- a/java/com/android/dialer/main/impl/toolbar/MainToolbar.java
+++ b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java
@@ -17,7 +17,6 @@
 package com.android.dialer.main.impl.toolbar;
 
 import android.content.Context;
-import android.support.annotation.VisibleForTesting;
 import android.support.v7.widget.PopupMenu.OnMenuItemClickListener;
 import android.support.v7.widget.Toolbar;
 import android.util.AttributeSet;
@@ -107,11 +106,14 @@
     searchBar.expand(animate, text);
   }
 
-  @VisibleForTesting
   public boolean isSlideUp() {
     return isSlideUp;
   }
 
+  public boolean isExpanded() {
+    return searchBar.isExpanded();
+  }
+
   public String getQuery() {
     return searchBar.getQuery();
   }
diff --git a/java/com/android/dialer/main/impl/toolbar/SearchBarView.java b/java/com/android/dialer/main/impl/toolbar/SearchBarView.java
index 6b9f39d..c84b8fc 100644
--- a/java/com/android/dialer/main/impl/toolbar/SearchBarView.java
+++ b/java/com/android/dialer/main/impl/toolbar/SearchBarView.java
@@ -185,6 +185,10 @@
     return searchBox.getText().toString();
   }
 
+  public boolean isExpanded() {
+    return isExpanded;
+  }
+
   public void setQueryWithoutUpdate(String query) {
     skipLatestTextChange = true;
     searchBox.setText(query);
diff --git a/java/com/android/newbubble/BottomActionViewController.java b/java/com/android/newbubble/BottomActionViewController.java
index a34d3a2..485d041 100644
--- a/java/com/android/newbubble/BottomActionViewController.java
+++ b/java/com/android/newbubble/BottomActionViewController.java
@@ -34,7 +34,7 @@
   private static final int SHOW_TARGET_DELAY = 100;
   private static final int SHOW_HIDE_TARGET_DURATION = 175;
   private static final int HIGHLIGHT_TARGET_DURATION = 150;
-  private static final float HIGHLIGHT_TARGET_SCALE = 1.5f;
+  private static final float HIGHLIGHT_TARGET_SCALE = 1.3f;
   private static final float UNHIGHLIGHT_TARGET_ALPHA = 0.38f;
 
   private final Context context;
diff --git a/java/com/android/newbubble/res/layout/bottom_action_base.xml b/java/com/android/newbubble/res/layout/bottom_action_base.xml
index af7f798..8f7ba75 100644
--- a/java/com/android/newbubble/res/layout/bottom_action_base.xml
+++ b/java/com/android/newbubble/res/layout/bottom_action_base.xml
@@ -17,20 +17,29 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="@dimen/bubble_bottom_action_view_height"
+    android:weightSum="2"
     android:orientation="horizontal"
     android:gravity="center"
     android:background="@drawable/bottom_action_scrim">
 
+  <!-- Add space to make sure text is not off screen when scaled. (1 - 1/1.3) / 2 ~= 0.11 -->
+  <View
+      android:layout_width="0dp"
+      android:layout_height="match_parent"
+      android:layout_weight="0.11"/>
+
   <LinearLayout
       android:id="@+id/bottom_action_dismiss_layout"
       android:layout_width="0dp"
       android:layout_height="match_parent"
-      android:layout_weight="1"
+      android:layout_weight="0.78"
       android:gravity="center">
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="@dimen/bubble_bottom_action_text_offset"
+        android:maxLines="2"
+        android:ellipsize="end"
         android:textColor="@color/bubble_button_color_white"
         android:textSize="16sp"
         android:fontFamily="roboto-medium"
@@ -41,16 +50,23 @@
         android:elevation="2dp"/>
   </LinearLayout>
 
+  <View
+      android:layout_width="0dp"
+      android:layout_height="match_parent"
+      android:layout_weight="0.22"/>
+
   <LinearLayout
       android:id="@+id/bottom_action_end_call_layout"
       android:layout_width="0dp"
       android:layout_height="match_parent"
-      android:layout_weight="1"
+      android:layout_weight="0.78"
       android:gravity="center">
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="@dimen/bubble_bottom_action_text_offset"
+        android:maxLines="2"
+        android:ellipsize="end"
         android:textColor="@color/bubble_button_color_white"
         android:textSize="16sp"
         android:fontFamily="roboto-medium"
@@ -61,4 +77,9 @@
         android:elevation="2dp"/>
   </LinearLayout>
 
+  <View
+      android:layout_width="0dp"
+      android:layout_height="match_parent"
+      android:layout_weight="0.11"/>
+
 </LinearLayout>
\ No newline at end of file
diff --git a/java/com/android/newbubble/res/values/strings.xml b/java/com/android/newbubble/res/values/strings.xml
index ce7d456..08c685e 100644
--- a/java/com/android/newbubble/res/values/strings.xml
+++ b/java/com/android/newbubble/res/values/strings.xml
@@ -25,8 +25,8 @@
     double tap to collapse call action menu". -->
   <string name="a11y_bubble_primary_button_collapse_action">Collapse call action menu</string>
 
-  <!-- The label of drag-and-drop target for dismissing bubble. [CHAR LIMIT=10]-->
+  <!-- The label of drag-and-drop target for dismissing bubble. [CHAR LIMIT=20]-->
   <string name="bubble_bottom_action_hide">Hide</string>
-  <!-- The label of drag-and-drop target for ending call. [CHAR LIMIT=10]-->
+  <!-- The label of drag-and-drop target for ending call. [CHAR LIMIT=20]-->
   <string name="bubble_bottom_action_end_call">End call</string>
-</resources>
\ No newline at end of file
+</resources>