summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);