diff options
-rw-r--r-- | res/anim/slide_in.xml | 2 | ||||
-rw-r--r-- | res/anim/slide_out.xml | 2 | ||||
-rw-r--r-- | res/layout/search_edittext.xml | 42 | ||||
-rw-r--r-- | res/values/animation_constants.xml | 2 | ||||
-rw-r--r-- | res/values/dimens.xml | 13 | ||||
-rw-r--r-- | src/com/android/dialer/DialtactsActivity.java | 12 | ||||
-rw-r--r-- | src/com/android/dialer/list/SearchFragment.java | 58 | ||||
-rw-r--r-- | src/com/android/dialer/widget/SearchEditTextLayout.java | 28 |
8 files changed, 113 insertions, 46 deletions
diff --git a/res/anim/slide_in.xml b/res/anim/slide_in.xml index b0eed3713..4463f2f24 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 231555e88..88687f477 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 50cbf5af9..ac1114e2a 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 786306092..05b8e218d 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 e659f5791..6efb5ac5c 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 df2a87c8a..26c169843 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -141,8 +141,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; /** @@ -206,8 +204,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; @@ -662,7 +658,6 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } private void updateSearchFragmentPosition() { - int translationValue = mIsDialpadShown ? -mActionBarHeight : 0; SearchFragment fragment = null; if (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()) { fragment = mSmartDialSearchFragment; @@ -670,8 +665,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O 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 @@ 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 9a30c4de6..9e2b8d089 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,9 +84,14 @@ 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(); parentView.setPaddingRelative( @@ -88,6 +102,7 @@ public class SearchFragment extends PhoneNumberPickerFragment { final ListView listView = getListView(); + listView.setClipToPadding(false); listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { @@ -100,10 +115,7 @@ public class SearchFragment extends PhoneNumberPickerFragment { } }); - - if (!activity.isActionBarShowing()) { - parentView.setTranslationY(-mActionBarHeight); - } + updatePosition(false /* animate */); } @Override @@ -155,4 +167,36 @@ 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 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 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); |