summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Lee <anwlee@google.com>2014-06-03 14:03:09 -0700
committerAndrew Lee <anwlee@google.com>2014-06-03 16:14:39 -0700
commit9da8fb46fa21159321295119e1b2075747cfbbf9 (patch)
tree4c793433ff90aa2f15fb610dfc0f696987a29e1e
parent82d6da53d993bb3a5cabf7c9f5f0c0e62488c15f (diff)
DO NOT MERGE. Styling search to match redlines.
- Cherrypicking changes back to master. Mostly, this involved transferring changes dealing with padding and the translation values. - Shift arrow/close icons. - Use 20sp font in expanded search (causes baseline to shift down). - Update action bar movement to use dialpad's interpolators and durations. - Smoothed out animations. Icons in the view being faded out are now instantaneously set to GONE. The margin animator when going from collapsed to expanded starts at 0.8f now, so that the searchbox does not shrink momentarily when switched to the 9-patch, because of the shadow. - Fix clipping because of 9-patch; refactored logic for updating the position and padding from the Activity into SearchFragment. This was motivated in part because we want a padding at the top of this list for the first item, but when the dialpad is shown we do not want that padding. Bug: 15343931 Conflicts: res/layout/search_edittext.xml res/values/dimens.xml src/com/android/dialer/DialtactsActivity.java src/com/android/dialer/list/SearchFragment.java Change-Id: I8519e7e2ef5c75c0f170ff61ed22f44f95e07f74
-rw-r--r--res/layout/search_edittext.xml33
-rw-r--r--res/values/dimens.xml8
-rw-r--r--src/com/android/dialer/DialtactsActivity.java16
-rw-r--r--src/com/android/dialer/list/SearchFragment.java63
-rw-r--r--src/com/android/dialer/widget/SearchEditTextLayout.java28
5 files changed, 112 insertions, 36 deletions
diff --git a/res/layout/search_edittext.xml b/res/layout/search_edittext.xml
index ce8568681..9b8031efe 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,23 +39,12 @@
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"
android:gravity="center_vertical"
android:hint="@string/dialer_hint_find_contact" />
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 0aa3cc5a2..416c3138d 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -98,12 +98,18 @@
<dimen name="search_top_margin">8dp</dimen>
<!-- Margin below the search box. -->
<dimen name="search_bottom_margin">8dp</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 -->
<dimen name="search_box_right_padding">8dp</dimen>
<dimen name="search_box_search_icon_padding">4dp</dimen>
- <!-- Elevation of the search box -->
+ <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>
+ <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 f2f49c1ae..4ea9651d5 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -142,8 +142,6 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
- private static final int ANIMATION_DURATION = 250;
-
private RelativeLayout parentLayout;
/**
@@ -232,8 +230,6 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
*/
private View mRemoveViewContainer;
- final Interpolator hideActionBarInterpolator = new AccelerateInterpolator(1.5f);
- final Interpolator showActionBarInterpolator = new DecelerateInterpolator(1.5f);
private String mSearchQuery;
private DialerDatabaseHelper mDialerDatabaseHelper;
@@ -689,8 +685,6 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
}
private void updateSearchFragmentPosition() {
- int startTranslationValue = mIsDialpadShown ? mActionBarHeight : 0;
- int endTranslationValue = mIsDialpadShown ? 0 : mActionBarHeight;
SearchFragment fragment = null;
if (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()) {
fragment = mSmartDialSearchFragment;
@@ -698,11 +692,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
fragment = mRegularSearchFragment;
}
if (fragment != null && fragment.isVisible()) {
- fragment.getListView().setTranslationY(startTranslationValue);
- fragment.getListView().animate().translationY(endTranslationValue)
- .setInterpolator(hideActionBarInterpolator)
- .setDuration(ANIMATION_DURATION)
- .start();
+ fragment.updatePosition(true /* animate */);
}
}
@@ -1176,6 +1166,10 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
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 f309f72ea..6abfcaa79 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -17,13 +17,16 @@ package com.android.dialer.list;
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.list.PhoneNumberPickerFragment;
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 @@ public class SearchFragment extends PhoneNumberPickerFragment {
*/
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,13 +84,20 @@ public class SearchFragment extends PhoneNumberPickerFragment {
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();
final ListView listView = getListView();
+
+ listView.setClipToPadding(false);
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
@@ -93,9 +109,8 @@ public class SearchFragment extends PhoneNumberPickerFragment {
int totalItemCount) {
}
});
- if (activity.isActionBarShowing()) {
- listView.setTranslationY(mActionBarHeight);
- }
+
+ updatePosition(false /* animate */);
}
@Override
@@ -147,4 +162,40 @@ public class SearchFragment extends PhoneNumberPickerFragment {
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 startTranslationValue =
+ mActivity.isDialpadShown() ? mActionBarHeight - mShadowHeight: -mShadowHeight;
+ int endTranslationValue =
+ mActivity.isDialpadShown() ? -mShadowHeight : mActionBarHeight -mShadowHeight;
+
+ if (animate) {
+ Interpolator interpolator =
+ mActivity.isDialpadShown() ? AnimUtils.EASE_IN : AnimUtils.EASE_OUT ;
+ int duration =
+ mActivity.isDialpadShown() ? mShowDialpadDuration : mHideDialpadDuration;
+ getView().setTranslationY(startTranslationValue);
+ getView().animate()
+ .translationY(endTranslationValue)
+ .setInterpolator(interpolator)
+ .setDuration(duration);
+ } else {
+ getView().setTranslationY(endTranslationValue);
+ }
+
+ // 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 dbb2b22de..d229aa402 100644
--- a/src/com/android/dialer/widget/SearchEditTextLayout.java
+++ b/src/com/android/dialer/widget/SearchEditTextLayout.java
@@ -19,6 +19,7 @@ package com.android.dialer.widget;
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.contacts.common.animation.AnimUtils;
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 @@ public class SearchEditTextLayout extends FrameLayout {
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 @@ public class SearchEditTextLayout extends FrameLayout {
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 class SearchEditTextLayout extends FrameLayout {
}
}
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 class SearchEditTextLayout extends FrameLayout {
}
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);