summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/dialer/DialtactsActivity.java9
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java7
-rw-r--r--src/com/android/dialer/list/SearchFragment.java68
3 files changed, 79 insertions, 5 deletions
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 653ed8b30..b8a1d4dce 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -1281,11 +1281,20 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
return mActionBarController;
}
+ @Override
public boolean isDialpadShown() {
return mIsDialpadShown;
}
@Override
+ public int getDialpadHeight() {
+ if (mDialpadFragment != null) {
+ return mDialpadFragment.getDialpadHeight();
+ }
+ return 0;
+ }
+
+ @Override
public int getActionBarHideOffset() {
return getActionBar().getHideOffset();
}
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 5b1e21129..b18069fdd 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -1669,6 +1669,13 @@ public class DialpadFragment extends Fragment
((DialpadSlidingRelativeLayout) getView()).setYFraction(yFraction);
}
+ public int getDialpadHeight() {
+ if (mDialpadView == null) {
+ return 0;
+ }
+ return mDialpadView.getHeight();
+ }
+
public void process_quote_emergency_unquote(String query) {
if (PseudoEmergencyAnimator.PSEUDO_EMERGENCY_NUMBER.equals(query)) {
if (mPseudoEmergencyAnimator == null) {
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 78c3ad3c1..1f33d5b75 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -21,17 +21,23 @@ import android.animation.AnimatorListenerAdapter;
import android.app.Activity;
import android.app.DialogFragment;
import android.content.Intent;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.TextUtils;
import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewGroup;
import android.view.animation.Interpolator;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
+import android.widget.LinearLayout;
import android.widget.ListView;
+import android.widget.Space;
import com.android.contacts.common.list.ContactEntryListAdapter;
import com.android.contacts.common.list.ContactListItemView;
@@ -63,11 +69,20 @@ public class SearchFragment extends PhoneNumberPickerFragment {
private int mShowDialpadDuration;
private int mHideDialpadDuration;
+ /**
+ * Used to resize the list view containing search results so that it fits the available space
+ * above the dialpad. Does not have a user-visible effect in regular touch usage (since the
+ * dialpad hides that portion of the ListView anyway), but improves usability in accessibility
+ * mode.
+ */
+ private Space mSpacer;
+
private HostInterface mActivity;
public interface HostInterface {
public boolean isActionBarShowing();
public boolean isDialpadShown();
+ public int getDialpadHeight();
public int getActionBarHideOffset();
public int getActionBarHeight();
}
@@ -270,17 +285,35 @@ public class SearchFragment extends PhoneNumberPickerFragment {
mActivity.isDialpadShown() ? 0 : mActionBarHeight -mShadowHeight;
}
if (animate) {
- Interpolator interpolator =
- mActivity.isDialpadShown() ? AnimUtils.EASE_IN : AnimUtils.EASE_OUT ;
- int duration =
- mActivity.isDialpadShown() ? mShowDialpadDuration : mHideDialpadDuration;
+ // If the dialpad will be shown, then this animation involves sliding the list up.
+ final boolean slideUp = mActivity.isDialpadShown();
+
+ Interpolator interpolator = slideUp ? AnimUtils.EASE_IN : AnimUtils.EASE_OUT ;
+ int duration = slideUp ? mShowDialpadDuration : mHideDialpadDuration;
getView().setTranslationY(startTranslationValue);
getView().animate()
.translationY(endTranslationValue)
.setInterpolator(interpolator)
- .setDuration(duration);
+ .setDuration(duration)
+ .setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ if (!slideUp) {
+ resizeListView();
+ }
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (slideUp) {
+ resizeListView();
+ }
+ }
+ });
+
} else {
getView().setTranslationY(endTranslationValue);
+ resizeListView();
}
// There is padding which should only be applied when the dialpad is not shown.
@@ -293,6 +326,19 @@ public class SearchFragment extends PhoneNumberPickerFragment {
listView.getPaddingBottom());
}
+ public void resizeListView() {
+ if (mSpacer == null) {
+ return;
+ }
+ int spacerHeight = mActivity.isDialpadShown() ? mActivity.getDialpadHeight() : 0;
+ if (spacerHeight != mSpacer.getHeight()) {
+ final LinearLayout.LayoutParams lp =
+ (LinearLayout.LayoutParams) mSpacer.getLayoutParams();
+ lp.height = spacerHeight;
+ mSpacer.setLayoutParams(lp);
+ }
+ }
+
@Override
protected void startLoading() {
if (PermissionsUtil.hasContactsPermissions(getActivity())) {
@@ -306,4 +352,16 @@ public class SearchFragment extends PhoneNumberPickerFragment {
public void setOnTouchListener(View.OnTouchListener onTouchListener) {
mActivityOnTouchListener = onTouchListener;
}
+
+ @Override
+ protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+ final LinearLayout parent = (LinearLayout) super.inflateView(inflater, container);
+ final int orientation = getResources().getConfiguration().orientation;
+ if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+ mSpacer = new Space(getActivity());
+ parent.addView(mSpacer,
+ new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0));
+ }
+ return parent;
+ }
}