diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/dialer/DialtactsActivity.java | 16 | ||||
-rw-r--r-- | src/com/android/dialer/list/SearchFragment.java | 63 | ||||
-rw-r--r-- | src/com/android/dialer/widget/SearchEditTextLayout.java | 28 |
3 files changed, 89 insertions, 18 deletions
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); |