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 --- .../android/dialer/dialpad/DialpadFragment.java | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'src/com/android/dialer/dialpad/DialpadFragment.java') 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