Merge changes Iab543850,I305f8a0e

* changes:
  Keep promo state on rotate
  FAB is no longer visible on return to call dialog.
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 791a710..56e0a95 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -900,7 +900,7 @@
   }
 
   @Override
-  public void onContactsListScrolled(int scrollState) {
+  public void onContactsListScrolled(boolean isDragging) {
     // intentionally empty.
   }
 
diff --git a/java/com/android/dialer/contactsfragment/ContactsFragment.java b/java/com/android/dialer/contactsfragment/ContactsFragment.java
index 759897f..a8daa54 100644
--- a/java/com/android/dialer/contactsfragment/ContactsFragment.java
+++ b/java/com/android/dialer/contactsfragment/ContactsFragment.java
@@ -93,7 +93,7 @@
 
   /** Listener for contacts list scroll state. */
   public interface OnContactsListScrolledListener {
-    void onContactsListScrolled(int scrollState);
+    void onContactsListScrolled(boolean isDragging);
   }
 
   /**
@@ -248,7 +248,9 @@
     String anchoredHeaderString = adapter.getHeaderString(firstCompletelyVisible);
 
     FragmentUtils.getParentUnsafe(this, OnContactsListScrolledListener.class)
-        .onContactsListScrolled(recyclerView.getScrollState());
+        .onContactsListScrolled(
+            recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_DRAGGING
+                || fastScroller.isDragStarted());
 
     // If the user swipes to the top of the list very quickly, there is some strange behavior
     // between this method updating headers and adapter#onBindViewHolder updating headers.
diff --git a/java/com/android/dialer/contactsfragment/FastScroller.java b/java/com/android/dialer/contactsfragment/FastScroller.java
index 2a86a3b..2bd07ac 100644
--- a/java/com/android/dialer/contactsfragment/FastScroller.java
+++ b/java/com/android/dialer/contactsfragment/FastScroller.java
@@ -81,8 +81,13 @@
         container.setVisibility(INVISIBLE);
         scrollBar.setSelected(false);
         return true;
+      default:
+        return super.onTouchEvent(event);
     }
-    return super.onTouchEvent(event);
+  }
+
+  public boolean isDragStarted() {
+    return dragStarted;
   }
 
   private void setRecyclerViewPosition(float y) {
diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java
index c4e6c61..2316e86 100644
--- a/java/com/android/dialer/dialpadview/DialpadFragment.java
+++ b/java/com/android/dialer/dialpadview/DialpadFragment.java
@@ -1430,19 +1430,21 @@
     if (getActivity() == null || getView() == null) {
       return;
     }
-    final DialpadView dialpadView = getView().findViewById(R.id.dialpad_view);
     if (!hidden && !isDialpadChooserVisible()) {
       if (mAnimate) {
-        dialpadView.animateShow();
+        mDialpadView.animateShow();
       }
       ThreadUtil.getUiThreadHandler()
           .postDelayed(
-              () -> mFloatingActionButtonController.scaleIn(),
+              () -> {
+                if (!isDialpadChooserVisible()) {
+                  mFloatingActionButtonController.scaleIn();
+                }
+              },
               mAnimate ? mDialpadSlideInDuration : 0);
       FragmentUtils.getParentUnsafe(this, DialpadListener.class).onDialpadShown();
       mDigits.requestFocus();
-    }
-    if (hidden) {
+    } else if (hidden) {
       mFloatingActionButtonController.scaleOut();
     }
   }