Merge "DO NOT MERGE. Styling search to match redlines." into lmp-preview-dev
diff --git a/res/anim/slide_in.xml b/res/anim/slide_in.xml
index b0eed37..4463f2f 100644
--- a/res/anim/slide_in.xml
+++ b/res/anim/slide_in.xml
@@ -15,6 +15,6 @@
 -->
 <translate xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@interpolator/ease_in_interpolator"
-    android:duration="532"
+    android:duration="@integer/dialpad_slide_in_duration"
     android:fromYDelta="67%p"
     android:toYDelta="0" />
\ No newline at end of file
diff --git a/res/anim/slide_out.xml b/res/anim/slide_out.xml
index 231555e..88687f4 100644
--- a/res/anim/slide_out.xml
+++ b/res/anim/slide_out.xml
@@ -15,6 +15,6 @@
 -->
 <translate xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@interpolator/ease_out_interpolator"
-    android:duration="257"
+    android:duration="@integer/dialpad_slide_out_duration"
     android:fromYDelta="0"
     android:toYDelta="80%p" />
\ No newline at end of file
diff --git a/res/layout/search_edittext.xml b/res/layout/search_edittext.xml
index 50cbf5a..ac1114e 100644
--- a/res/layout/search_edittext.xml
+++ b/res/layout/search_edittext.xml
@@ -9,18 +9,28 @@
     android:layout_marginBottom="@dimen/search_bottom_margin"
     android:layout_marginLeft="@dimen/search_margin_horizontal"
     android:layout_marginRight="@dimen/search_margin_horizontal"
-    android:paddingLeft="@dimen/search_box_left_padding"
-    android:paddingRight="@dimen/search_box_right_padding"
     android:background="@drawable/rounded_corner"
-    android:elevation="@dimen/search_box_elevation"
-    >
+    android:elevation="@dimen/search_box_elevation">
+
     <LinearLayout
         android:id="@+id/search_box_collapsed"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:paddingStart="@dimen/search_box_left_padding"
+        android:paddingEnd="@dimen/search_box_right_padding"
         android:gravity="center_vertical"
         android:orientation="horizontal" >
 
+        <ImageView
+            android:id="@+id/search_magnifying_glass"
+            android:layout_height="@dimen/search_box_icon_size"
+            android:layout_width="@dimen/search_box_icon_size"
+            android:layout_margin="@dimen/search_box_icon_margin"
+            android:padding="@dimen/search_box_search_icon_padding"
+            android:src="@drawable/ic_ab_search"
+            android:importantForAccessibility="no"
+            android:tint="@color/searchbox_icon_tint" />
+
         <!-- Portion of the search box that starts a search when clicked -->
         <LinearLayout
             android:id="@+id/search_box_start_search"
@@ -29,21 +39,11 @@
             android:layout_weight="1"
             android:gravity="center_vertical" >
 
-            <ImageView
-                android:id="@+id/search_magnifying_glass"
-                android:layout_height="@dimen/search_box_icon_size"
-                android:layout_width="@dimen/search_box_icon_size"
-                android:layout_margin="@dimen/search_box_icon_margin"
-                android:padding="@dimen/search_box_search_icon_padding"
-                android:src="@drawable/ic_ab_search"
-                android:importantForAccessibility="no"
-                android:tint="@color/searchbox_icon_tint" />
-
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="@dimen/search_box_icon_size"
-                android:layout_marginLeft="@dimen/search_box_text_left_margin"
-                android:textSize="@dimen/search_text_size"
+                android:layout_marginLeft="@dimen/search_box_collapsed_text_margin_left"
+                android:textSize="@dimen/search_collapsed_text_size"
                 android:fontFamily="@string/search_font_family"
                 android:textColor="@color/searchbox_text_color"
                 android:textColorHint="@color/searchbox_hint_text_color"
@@ -88,7 +88,7 @@
             android:id="@+id/search_back_button"
             android:layout_width="@dimen/search_box_icon_size"
             android:layout_height="@dimen/search_box_icon_size"
-            android:layout_margin="@dimen/search_box_icon_margin"
+            android:layout_marginLeft="8dp"
             android:src="@drawable/ic_back_arrow"
             android:background="?android:attr/selectableItemBackground"
             android:contentDescription="@string/action_menu_overflow_description"
@@ -97,10 +97,10 @@
         <EditText
             android:id="@+id/search_view"
             android:layout_width="0dp"
-            android:layout_height="@dimen/search_box_icon_size"
+            android:layout_height="@dimen/action_bar_height"
             android:layout_weight="1"
-            android:layout_marginLeft="@dimen/search_box_text_left_margin"
-            android:textSize="@dimen/search_text_size"
+            android:layout_marginLeft="@dimen/search_box_expanded_text_margin_left"
+            android:textSize="@dimen/search_expanded_text_size"
             android:fontFamily="@string/search_font_family"
             android:textColor="@color/searchbox_text_color"
             android:inputType="textFilter" />
@@ -109,7 +109,7 @@
             android:id="@+id/search_close_button"
             android:layout_height="@dimen/search_box_icon_size"
             android:layout_width="@dimen/search_box_icon_size"
-            android:layout_margin="@dimen/search_box_icon_margin"
+            android:layout_marginRight="8dp"
             android:src="@drawable/ic_close_dk"
             android:clickable="true"
             android:background="?android:attr/selectableItemBackground"
diff --git a/res/values/animation_constants.xml b/res/values/animation_constants.xml
index 7863060..05b8e21 100644
--- a/res/values/animation_constants.xml
+++ b/res/values/animation_constants.xml
@@ -16,6 +16,8 @@
   -->
 <resources>
     <integer name="fade_duration">300</integer>
+    <integer name="dialpad_slide_in_duration">532</integer>
+    <integer name="dialpad_slide_out_duration">257</integer>
 
     <!-- Swipe constants -->
     <integer name="swipe_escape_velocity">100</integer>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e659f57..6efb5ac 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -16,9 +16,6 @@
 -->
 <resources>
 
-    <!--  Search View -->
-    <dimen name="search_text_size">14sp</dimen>
-
     <!--
           Drag to remove view (in dp because it is used in conjunction with a statically
           sized icon
@@ -106,8 +103,8 @@
     <dimen name="search_top_margin">8dp</dimen>
     <!-- Margin below the search box. -->
     <dimen name="search_bottom_margin">8dp</dimen>
-    <!-- Search box text size -->
-    <dimen name="search_text_size">13.24sp</dimen>
+    <dimen name="search_collapsed_text_size">14sp</dimen>
+    <dimen name="search_expanded_text_size">20sp</dimen>
     <!-- Search box interior padding - left -->
     <dimen name="search_box_left_padding">8dp</dimen>
     <!-- Search box interior padding - right -->
@@ -115,11 +112,11 @@
     <!-- Padding around the icon in the search box. -->
     <dimen name="search_box_icon_margin">4dp</dimen>
     <dimen name="search_box_search_icon_padding">4dp</dimen>
-    <!-- Left margin of the text field in the search box. -->
-    <dimen name="search_box_text_left_margin">27dp</dimen>
+    <dimen name="search_box_collapsed_text_margin_left">24dp</dimen>
+    <dimen name="search_box_expanded_text_margin_left">26dp</dimen>
     <!-- Size of the icon (voice search, close search) in the search box. -->
     <dimen name="search_box_icon_size">28dp</dimen>
-    <!-- Elevation of the search box -->
+    <dimen name="search_list_padding_top">8dp</dimen>
     <dimen name="search_box_elevation">3dp</dimen>
 
     <!-- Size of text in tabs. -->
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index df2a87c..26c1698 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -141,8 +141,6 @@
 
     private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
 
-    private static final int ANIMATION_DURATION = 250;
-
     private RelativeLayout parentLayout;
 
     /**
@@ -206,8 +204,6 @@
      */
     private View mRemoveViewContainer;
 
-    final Interpolator hideActionBarInterpolator = new AccelerateInterpolator(1.5f);
-    final Interpolator showActionBarInterpolator = new DecelerateInterpolator(1.5f);
     private String mSearchQuery;
 
     private DialerDatabaseHelper mDialerDatabaseHelper;
@@ -662,7 +658,6 @@
     }
 
     private void updateSearchFragmentPosition() {
-        int translationValue = mIsDialpadShown ?  -mActionBarHeight : 0;
         SearchFragment fragment = null;
         if (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()) {
             fragment = mSmartDialSearchFragment;
@@ -670,8 +665,7 @@
             fragment = mRegularSearchFragment;
         }
         if (fragment != null && fragment.isVisible()) {
-            fragment.getView().animate().translationY(translationValue)
-                    .setInterpolator(hideActionBarInterpolator).setDuration(ANIMATION_DURATION);
+            fragment.updatePosition(true /* animate */);
         }
     }
 
@@ -1145,6 +1139,10 @@
         return mActionBarController.isActionBarShowing();
     }
 
+    public boolean isDialpadShown() {
+        return mIsDialpadShown;
+    }
+
     @Override
     public int getActionBarHideOffset() {
         return getActionBar().getHideOffset();
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 9a30c4d..9e2b8d0 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -17,13 +17,16 @@
 
 import android.app.Activity;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
+import android.view.animation.Interpolator;
 import android.widget.AbsListView;
 import android.widget.AbsListView.OnScrollListener;
 import android.widget.ListView;
 
+import com.android.contacts.common.animation.AnimUtils;
 import com.android.contacts.common.list.ContactEntryListAdapter;
 import com.android.contacts.common.list.ContactListItemView;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
@@ -31,7 +34,6 @@
 import com.android.contacts.common.util.ViewUtil;
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
-import com.android.dialer.list.OnListFragmentScrolledListener;
 import com.android.dialer.util.DialerUtils;
 
 public class SearchFragment extends PhoneNumberPickerFragment {
@@ -44,9 +46,16 @@
      */
     private String mAddToContactNumber;
     private int mActionBarHeight;
+    private int mShadowHeight;
+    private int mPaddingTop;
+    private int mShowDialpadDuration;
+    private int mHideDialpadDuration;
+
+    private HostInterface mActivity;
 
     public interface HostInterface {
         public boolean isActionBarShowing();
+        public boolean isDialpadShown();
         public int getActionBarHideOffset();
         public int getActionBarHeight();
     }
@@ -75,9 +84,14 @@
             getAdapter().setHasHeader(0, false);
         }
 
-        HostInterface activity = (HostInterface) getActivity();
+        mActivity = (HostInterface) getActivity();
 
-        mActionBarHeight = activity.getActionBarHeight();
+        final Resources res = getResources();
+        mActionBarHeight = mActivity.getActionBarHeight();
+        mShadowHeight  = res.getDrawable(R.drawable.search_shadow).getIntrinsicHeight();
+        mPaddingTop = res.getDimensionPixelSize(R.dimen.search_list_padding_top);
+        mShowDialpadDuration = res.getInteger(R.integer.dialpad_slide_in_duration);
+        mHideDialpadDuration = res.getInteger(R.integer.dialpad_slide_out_duration);
 
         final View parentView = getView();
         parentView.setPaddingRelative(
@@ -88,6 +102,7 @@
 
         final ListView listView = getListView();
 
+        listView.setClipToPadding(false);
         listView.setOnScrollListener(new OnScrollListener() {
             @Override
             public void onScrollStateChanged(AbsListView view, int scrollState) {
@@ -100,10 +115,7 @@
             }
         });
 
-
-        if (!activity.isActionBarShowing()) {
-            parentView.setTranslationY(-mActionBarHeight);
-        }
+        updatePosition(false /* animate */);
     }
 
     @Override
@@ -155,4 +167,36 @@
                     R.string.add_contact_not_available);
         }
     }
+
+    /**
+     * Updates the position and padding of the search fragment, depending on whether the dialpad is
+     * shown. This can be optionally animated.
+     * @param animate
+     */
+    public void updatePosition(boolean animate) {
+        // Use negative shadow height instead of 0 to account for the 9-patch's shadow.
+        int translationValue = mActivity.isDialpadShown() ? -mActionBarHeight : -mShadowHeight;
+
+        if (animate) {
+            Interpolator interpolator =
+                    mActivity.isDialpadShown() ? AnimUtils.EASE_IN : AnimUtils.EASE_OUT ;
+            int duration =
+                    mActivity.isDialpadShown() ? mShowDialpadDuration : mHideDialpadDuration;
+            getView().animate()
+                    .translationY(translationValue)
+                    .setInterpolator(interpolator)
+                    .setDuration(duration);
+        } else {
+            getView().setTranslationY(translationValue);
+        }
+
+        // There is padding which should only be applied when the dialpad is not shown.
+        int paddingTop = mActivity.isDialpadShown() ? 0 : mPaddingTop;
+        final ListView listView = getListView();
+        listView.setPaddingRelative(
+                listView.getPaddingStart(),
+                paddingTop,
+                listView.getPaddingEnd(),
+                listView.getPaddingBottom());
+    }
 }
diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java
index dbb2b22..d229aa4 100644
--- a/src/com/android/dialer/widget/SearchEditTextLayout.java
+++ b/src/com/android/dialer/widget/SearchEditTextLayout.java
@@ -19,6 +19,7 @@
 import android.animation.ValueAnimator;
 import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.content.Context;
+import android.graphics.Color;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
 import android.view.View;
@@ -30,6 +31,7 @@
 import com.android.dialer.R;
 
 public class SearchEditTextLayout extends FrameLayout {
+    private static final float EXPAND_MARGIN_FRACTION_START = 0.8f;
     private static final int ANIMATION_DURATION = 200;
 
     private OnKeyListener mPreImeKeyListener;
@@ -47,6 +49,11 @@
     private View mCollapsed;
     private View mExpanded;
     private EditText mSearchView;
+    private View mCollapsedSearchBox;
+    private View mVoiceSearchButtonView;
+    private View mOverflowButtonView;
+    private View mBackButtonView;
+    private View mClearButtonView;
 
     private ValueAnimator mAnimator;
 
@@ -85,6 +92,12 @@
         mExpanded = findViewById(R.id.search_box_expanded);
         mSearchView = (EditText) mExpanded.findViewById(R.id.search_view);
 
+        mCollapsedSearchBox = findViewById(R.id.search_box_start_search);
+        mVoiceSearchButtonView = findViewById(R.id.voice_search_button);
+        mOverflowButtonView = findViewById(R.id.dialtacts_options_menu_button);
+        mBackButtonView = findViewById(R.id.search_back_button);
+        mClearButtonView = findViewById(R.id.search_close_button);
+
         mSearchView.setOnFocusChangeListener(new OnFocusChangeListener() {
             @Override
             public void onFocusChange(View v, boolean hasFocus) {
@@ -149,9 +162,16 @@
         }
     }
     public void expand(boolean animate, boolean requestFocus) {
+        mCollapsedSearchBox.setVisibility(View.GONE);
+        mVoiceSearchButtonView.setVisibility(View.GONE);
+        mOverflowButtonView.setVisibility(View.GONE);
+        mBackButtonView.setVisibility(View.VISIBLE);
+        mClearButtonView.setVisibility(View.VISIBLE);
+
         if (animate) {
             AnimUtils.crossFadeViews(mExpanded, mCollapsed, ANIMATION_DURATION);
-            mAnimator = ValueAnimator.ofFloat(1f, 0f);
+            mAnimator = ValueAnimator.ofFloat(EXPAND_MARGIN_FRACTION_START, 0f);
+            setMargins(EXPAND_MARGIN_FRACTION_START);
             prepareAnimator(true);
         } else {
             mExpanded.setVisibility(View.VISIBLE);
@@ -169,6 +189,12 @@
     }
 
     public void collapse(boolean animate) {
+        mCollapsedSearchBox.setVisibility(View.VISIBLE);
+        mVoiceSearchButtonView.setVisibility(View.VISIBLE);
+        mOverflowButtonView.setVisibility(View.VISIBLE);
+        mBackButtonView.setVisibility(View.GONE);
+        mClearButtonView.setVisibility(View.GONE);
+
         if (animate) {
             AnimUtils.crossFadeViews(mCollapsed, mExpanded, ANIMATION_DURATION);
             mAnimator = ValueAnimator.ofFloat(0f, 1f);