From 135e465360dc36f1b9602660e290825d1e1fd00e Mon Sep 17 00:00:00 2001 From: Yorke Lee Date: Fri, 23 Oct 2015 18:12:51 -0700 Subject: Fix issue with entering '+' with switch access Distinguish between a manual long press and system long press (via accessibility) when modifying the current dial string. Bug: 23554996 Change-Id: I3fc610c8e24bdb39729b827715e08a3e7d73ba1f --- src/com/android/dialer/DialtactsActivity.java | 5 ++++- .../android/dialer/dialpad/DialpadFragment.java | 24 +++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) (limited to 'src/com/android/dialer') diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 0893b1c56..140437e40 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -16,6 +16,8 @@ package com.android.dialer; +import com.google.common.annotations.VisibleForTesting; + import android.app.Fragment; import android.app.FragmentTransaction; import android.content.ActivityNotFoundException; @@ -128,7 +130,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O private static final String KEY_FIRST_LAUNCH = "first_launch"; private static final String KEY_IS_DIALPAD_SHOWN = "is_dialpad_shown"; - private static final String TAG_DIALPAD_FRAGMENT = "dialpad"; + @VisibleForTesting + public static final String TAG_DIALPAD_FRAGMENT = "dialpad"; private static final String TAG_REGULAR_SEARCH_FRAGMENT = "search"; private static final String TAG_SMARTDIAL_SEARCH_FRAGMENT = "smartdial"; private static final String TAG_FAVORITES_FRAGMENT = "favorites"; diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java index 9c77f30c5..517711016 100644 --- a/src/com/android/dialer/dialpad/DialpadFragment.java +++ b/src/com/android/dialer/dialpad/DialpadFragment.java @@ -414,6 +414,7 @@ public class DialpadFragment extends Fragment return mDigits != null; } + @VisibleForTesting public EditText getDigitsWidget() { return mDigits; } @@ -970,7 +971,7 @@ public class DialpadFragment extends Fragment // Just for safety we also check if the digits field is empty or not. if (isDigitsEmpty() || TextUtils.equals(mDigits.getText(), "1")) { // We'll try to initiate voicemail and thus we want to remove irrelevant string. - removePreviousDigitIfPossible(); + removePreviousDigitIfPossible('1'); List subscriptionAccountHandles = PhoneAccountUtils.getSubscriptionPhoneAccounts(getActivity()); @@ -1007,8 +1008,13 @@ public class DialpadFragment extends Fragment return false; } case R.id.zero: { - // Remove tentative input ('0') done by onTouch(). - removePreviousDigitIfPossible(); + if (mPressedDialpadKeys.contains(view)) { + // If the zero key is currently pressed, then the long press occurred by touch + // (and not via other means like certain accessibility input methods). + // Remove the '0' that was input when the key was first pressed. + removePreviousDigitIfPossible('0'); + } + keyPressed(KeyEvent.KEYCODE_PLUS); // Stop tone immediately @@ -1029,12 +1035,16 @@ public class DialpadFragment extends Fragment } /** - * Remove the digit just before the current position. This can be used if we want to replace - * the previous digit or cancel previously entered character. + * Remove the digit just before the current position of the cursor, iff the following conditions + * are true: + * 1) The cursor is not positioned at index 0. + * 2) The digit before the current cursor position matches the current digit. + * + * @param digit to remove from the digits view. */ - private void removePreviousDigitIfPossible() { + private void removePreviousDigitIfPossible(char digit) { final int currentPosition = mDigits.getSelectionStart(); - if (currentPosition > 0) { + if (currentPosition > 0 && digit == mDigits.getText().charAt(currentPosition - 1)) { mDigits.setSelection(currentPosition); mDigits.getText().delete(currentPosition - 1, currentPosition); } -- cgit v1.2.3