diff options
Diffstat (limited to 'core/java/android/widget/TextView.java')
| -rw-r--r-- | core/java/android/widget/TextView.java | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 8ce6ee576b00..cbfa05caac6e 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -422,6 +422,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener */ static final int PROCESS_TEXT_REQUEST_CODE = 100; + // Accessibility action to send IME custom action for CTS testing. + public static final int ACCESSIBILITY_ACTION_IME_ENTER = R.id.accessibilityActionImeEnter; + /** * Return code of {@link #doKeyDown}. */ @@ -11741,6 +11744,23 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener info.setContentInvalid(true); info.setError(mEditor.mError); } + // TextView will expose this action if it is editable and has focus. + if (isTextEditable() && isFocused()) { + CharSequence imeActionLabel = mContext.getResources().getString( + com.android.internal.R.string.keyboardview_keycode_enter); + if (getImeActionId() != 0 && getImeActionLabel() != null) { + imeActionLabel = getImeActionLabel(); + final int imeActionId = getImeActionId(); + // put ime action id into the extra data with ACTION_ARGUMENT_IME_ACTION_ID_INT. + final Bundle argument = info.getExtras(); + argument.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_IME_ACTION_ID_INT, + imeActionId); + } + AccessibilityNodeInfo.AccessibilityAction action = + new AccessibilityNodeInfo.AccessibilityAction( + ACCESSIBILITY_ACTION_IME_ENTER, imeActionLabel); + info.addAction(action); + } } if (!TextUtils.isEmpty(mText)) { @@ -12052,6 +12072,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } } return true; + case ACCESSIBILITY_ACTION_IME_ENTER: { + if (isFocused() && isTextEditable()) { + final int imeActionId = (arguments != null) ? arguments.getInt( + AccessibilityNodeInfo.ACTION_ARGUMENT_IME_ACTION_ID_INT, + EditorInfo.IME_ACTION_UNSPECIFIED) + : EditorInfo.IME_ACTION_UNSPECIFIED; + if (imeActionId == getImeActionId()) { + onEditorAction(imeActionId); + } + } + } return true; default: { return super.performAccessibilityActionInternal(action, arguments); } |
