Position/size adjustments to the floating action button.

+ Use new theme color for dialpad tints.
+ Translate FAB higher and make it 128% scaled in InCallUI.
+ Add methods so that dialpad is shown/hidden, FAB transitions
to/from its normal position and normal scale.
+ Translate button in/out when enabled/disabled.

Bug: 16399233
Change-Id: Ia8f56f494a89927c25657a75cfcca147c34c6c98
diff --git a/InCallUI/res/drawable/end_call_background.xml b/InCallUI/res/drawable/end_call_background.xml
index b3d877b..8f3926f 100644
--- a/InCallUI/res/drawable/end_call_background.xml
+++ b/InCallUI/res/drawable/end_call_background.xml
@@ -16,6 +16,4 @@
 
 <!-- Background drawable used to render the "end call" button. -->
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/end_call_touch_feedback_tint">
-    <item android:drawable="@drawable/fab_red" />
-</ripple>
+    android:color="@color/end_call_touch_feedback_tint" />
diff --git a/InCallUI/res/layout-land/call_card_content.xml b/InCallUI/res/layout-land/call_card_content.xml
index 7d1db8e..b1b5275 100644
--- a/InCallUI/res/layout-land/call_card_content.xml
+++ b/InCallUI/res/layout-land/call_card_content.xml
@@ -110,17 +110,21 @@
 
     <FrameLayout
         android:id="@+id/floating_end_call_action_button_container"
-        android:layout_width="@dimen/floating_action_button_width"
-        android:layout_height="@dimen/floating_action_button_height"
+        android:layout_width="@dimen/end_call_floating_action_button_diameter"
+        android:layout_height="@dimen/end_call_floating_action_button_diameter"
+        android:background="@drawable/fab_red"
+        android:layout_centerHorizontal="true"
         android:layout_marginBottom="@dimen/end_call_button_margin_bottom"
-        android:layout_alignParentBottom="true"
-        android:layout_centerHorizontal="true" >
+        android:layout_alignParentBottom="true" >
 
         <ImageButton android:id="@+id/floating_end_call_action_button"
-                     android:layout_width="match_parent"
-                     android:layout_height="match_parent"
-                     android:background="@drawable/end_call_background"
-                     android:src="@drawable/fab_ic_end_call"
-                     android:contentDescription="@string/onscreenEndCallText" />
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/end_call_background"
+            android:src="@drawable/fab_ic_end_call"
+            android:scaleType="center"
+            android:contentDescription="@string/onscreenEndCallText" />
+
     </FrameLayout>
+
 </RelativeLayout>
diff --git a/InCallUI/res/layout/call_card_content.xml b/InCallUI/res/layout/call_card_content.xml
index ec32d98..5437ef0 100644
--- a/InCallUI/res/layout/call_card_content.xml
+++ b/InCallUI/res/layout/call_card_content.xml
@@ -121,17 +121,21 @@
 
     <FrameLayout
         android:id="@+id/floating_end_call_action_button_container"
-        android:layout_width="@dimen/floating_action_button_width"
-        android:layout_height="@dimen/floating_action_button_height"
+        android:layout_width="@dimen/end_call_floating_action_button_diameter"
+        android:layout_height="@dimen/end_call_floating_action_button_diameter"
+        android:background="@drawable/fab_red"
+        android:layout_centerHorizontal="true"
         android:layout_marginBottom="@dimen/end_call_button_margin_bottom"
-        android:layout_alignParentBottom="true"
-        android:layout_centerHorizontal="true" >
+        android:layout_alignParentBottom="true" >
 
         <ImageButton android:id="@+id/floating_end_call_action_button"
-                     android:layout_width="match_parent"
-                     android:layout_height="match_parent"
-                     android:background="@drawable/end_call_background"
-                     android:src="@drawable/fab_ic_end_call"
-                     android:contentDescription="@string/onscreenEndCallText" />
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/end_call_background"
+            android:src="@drawable/fab_ic_end_call"
+            android:scaleType="center"
+            android:contentDescription="@string/onscreenEndCallText" />
+
     </FrameLayout>
+
 </RelativeLayout>
diff --git a/InCallUI/res/values/colors.xml b/InCallUI/res/values/colors.xml
index faf27e6..bd2642d 100644
--- a/InCallUI/res/values/colors.xml
+++ b/InCallUI/res/values/colors.xml
@@ -67,6 +67,6 @@
     <color name="glowpad_incoming_widget_tint">#a3a3a3</color>
     <color name="glowpad_incoming_widget_background_tint">#ffffff</color>
 
-    <!-- 30% opacity, accent color. -->
-    <color name="incall_dialpad_touch_tint">#66eeff41</color>
+    <!-- 20% opacity, theme color. -->
+    <color name="incall_dialpad_touch_tint">#330288d1</color>
 </resources>
diff --git a/InCallUI/res/values/dimens.xml b/InCallUI/res/values/dimens.xml
index f35a3f3..87dd667 100644
--- a/InCallUI/res/values/dimens.xml
+++ b/InCallUI/res/values/dimens.xml
@@ -59,6 +59,7 @@
     <dimen name="primary_call_elevation">4dp</dimen>
     <dimen name="secondary_call_elevation">4dp</dimen>
 
+    <dimen name="floating_action_bar_vertical_offset">-24dp</dimen>
 
     <!-- Padding at the left and right edges of the incall_touch_ui button
          cluster.  This padding is necessary because we can't allow the
@@ -102,7 +103,7 @@
     <dimen name="translucent_shadow_height">2dp</dimen>
 
     <dimen name="end_call_button_margin_bottom">8dp</dimen>
-    <dimen name="end_call_button_hide_offset">70dp</dimen>
+    <dimen name="end_call_button_hide_offset">80dp</dimen>
 
     <dimen name="call_card_anim_translate_y_offset">50dp</dimen>
 
@@ -111,4 +112,8 @@
     <dimen name="video_preview_small_dimension">90dp</dimen>
 
     <dimen name="video_preview_margin">20dp</dimen>
+
+    <dimen name="end_call_floating_action_button_diameter">72dp</dimen>
+    <dimen name="end_call_floating_action_button_small_diameter">56dp</dimen>
+
 </resources>
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index 6127a1d..33a5433 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -32,7 +32,6 @@
 import android.text.TextUtils;
 import android.view.Display;
 import android.view.LayoutInflater;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewAnimationUtils;
 import android.view.ViewGroup;
@@ -56,8 +55,11 @@
  */
 public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPresenter.CallCardUi>
         implements CallCardPresenter.CallCardUi {
+
     private int mRevealAnimationDuration;
     private int mShrinkAnimationDuration;
+    private int mFabNormalDiameter;
+    private int mFabSmallDiameter;
     private boolean mIsLandscape;
 
     // Primary caller info
@@ -92,6 +94,8 @@
 
     private FloatingActionButtonController mFloatingActionButtonController;
     private View mFloatingActionButtonContainer;
+    private ImageButton mFloatingActionButton;
+    private int mFloatingActionButtonVerticalOffset;
     private int mFloatingActionButtonHideOffset;
 
     // Cached DisplayMetrics density.
@@ -118,8 +122,14 @@
         mRevealAnimationDuration = getResources().getInteger(R.integer.reveal_animation_duration);
         mShrinkAnimationDuration = getResources().getInteger(R.integer.shrink_animation_duration);
         mVideoAnimationDuration = getResources().getInteger(R.integer.video_animation_duration);
+        mFloatingActionButtonVerticalOffset = getResources().getDimensionPixelOffset(
+                R.dimen.floating_action_bar_vertical_offset);
         mFloatingActionButtonHideOffset = getResources().getDimensionPixelOffset(
                 R.dimen.end_call_button_hide_offset);
+        mFabNormalDiameter = getResources().getDimensionPixelOffset(
+                R.dimen.end_call_floating_action_button_diameter);
+        mFabSmallDiameter = getResources().getDimensionPixelOffset(
+                R.dimen.end_call_floating_action_button_small_diameter);
         mIsLandscape = getResources().getConfiguration().orientation
                 == Configuration.ORIENTATION_LANDSCAPE;
     }
@@ -174,9 +184,9 @@
 
         mFloatingActionButtonContainer = view.findViewById(
                 R.id.floating_end_call_action_button_container);
-        ImageButton floatingActionButton = (ImageButton) view.findViewById(
+        mFloatingActionButton = (ImageButton) view.findViewById(
                 R.id.floating_end_call_action_button);
-        floatingActionButton.setOnClickListener(new View.OnClickListener() {
+        mFloatingActionButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 getPresenter().endCallClicked();
@@ -790,7 +800,14 @@
 
     @Override
     public void setEndCallButtonEnabled(boolean enabled) {
-        mFloatingActionButtonController.setVisible(enabled);
+        mFloatingActionButtonController.align(
+                mIsLandscape ? FloatingActionButtonController.ALIGN_QUARTER_END
+                        : FloatingActionButtonController.ALIGN_MIDDLE,
+                0 /* offsetX */,
+                enabled ? mFloatingActionButtonVerticalOffset /* offsetY */
+                        : mFloatingActionButtonHideOffset,
+                true);
+        mFloatingActionButton.setEnabled(enabled);
     }
 
     /**
@@ -873,6 +890,26 @@
         });
     }
 
+    public void onDialpadShow() {
+        mFloatingActionButtonController.align(
+                mIsLandscape ? FloatingActionButtonController.ALIGN_QUARTER_END
+                        : FloatingActionButtonController.ALIGN_MIDDLE,
+                0 /* offsetX */,
+                0 /* offsetY */,
+                true);
+        mFloatingActionButtonController.resize(mFabSmallDiameter, true);
+    }
+
+    public void onDialpadHide() {
+        mFloatingActionButtonController.align(
+                mIsLandscape ? FloatingActionButtonController.ALIGN_QUARTER_END
+                        : FloatingActionButtonController.ALIGN_MIDDLE,
+                0 /* offsetX */,
+                mFloatingActionButtonVerticalOffset /* offsetY */,
+                true);
+        mFloatingActionButtonController.resize(mFabNormalDiameter, true);
+    }
+
     /**
      * Animator that performs the upwards shrinking animation of the blue call card scrim.
      * At the start of the animation, each child view is moved downwards by a pre-specified amount
@@ -880,8 +917,7 @@
      */
     private Animator getShrinkAnimator(int startHeight, int endHeight) {
         final Animator shrinkAnimator =
-                ObjectAnimator.ofInt(mPrimaryCallCardContainer, "bottom",
-                        startHeight, endHeight);
+                ObjectAnimator.ofInt(mPrimaryCallCardContainer, "bottom", startHeight, endHeight);
         shrinkAnimator.setDuration(mShrinkAnimationDuration);
         shrinkAnimator.addListener(new AnimatorListenerAdapter() {
             @Override
@@ -892,12 +928,7 @@
                 assignTranslateAnimation(mCallTypeLabel, 4);
                 assignTranslateAnimation(mCallButtonsContainer, 5);
 
-                mFloatingActionButtonController.align(
-                        mIsLandscape ? FloatingActionButtonController.ALIGN_QUARTER_END
-                            : FloatingActionButtonController.ALIGN_MIDDLE,
-                        0 /* offsetX */,
-                        0 /* offsetY */,
-                        true);
+                setEndCallButtonEnabled(true);
             }
         });
         shrinkAnimator.setInterpolator(AnimUtils.EASE_IN);
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 03ccf15..d3d32bd 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -566,6 +566,9 @@
             if (showDialpad) {
                 showDialpad(true);
                 mDialpadFragment.animateShowDialpad();
+                mCallCardFragment.onDialpadShow();
+            } else {
+                mCallCardFragment.onDialpadHide();
             }
             mDialpadFragment.getView().startAnimation(showDialpad ? mSlideIn : mSlideOut);
         }