From 4cd353c038ec3c21f25c12897992e5e9826fe824 Mon Sep 17 00:00:00 2001 From: Guang Zhu Date: Wed, 12 Feb 2014 19:54:30 -0800 Subject: [PATCH] add new accessibility action for EditText to set text content Bug: 12872344 Change-Id: I85a3805ab0c34b96a7d4228f2382c8ff664e36e8 --- api/current.txt | 2 ++ .../accessibility/AccessibilityNodeInfo.java | 28 +++++++++++++++++++ core/java/android/widget/EditText.java | 19 +++++++++++++ .../AccessibilityManagerService.java | 3 +- 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/api/current.txt b/api/current.txt index 89a4692ff5169..0575861a7e062 100644 --- a/api/current.txt +++ b/api/current.txt @@ -30251,6 +30251,7 @@ package android.view.accessibility { field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT"; field public static final java.lang.String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT"; field public static final java.lang.String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT"; + field public static final java.lang.String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE"; field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80 field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2 field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8 @@ -30271,6 +30272,7 @@ package android.view.accessibility { field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000 field public static final int ACTION_SELECT = 4; // 0x4 field public static final int ACTION_SET_SELECTION = 131072; // 0x20000 + field public static final int ACTION_SET_TEXT = 2097152; // 0x200000 field public static final android.os.Parcelable.Creator CREATOR; field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2 field public static final int FOCUS_INPUT = 1; // 0x1 diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index 4fdbc1e90b019..560d0c9ba965d 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -282,6 +282,22 @@ public class AccessibilityNodeInfo implements Parcelable { */ public static final int ACTION_DISMISS = 0x00100000; + /** + * Action that sets the text of the node. Performing the action without argument, using + * null or empty {@link CharSequence} will clear the text. This action will also put the + * cursor at the end of text. + *

+ * Arguments: {@link #ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE}
+ * Example: + *

+ * Bundle arguments = new Bundle(); + * arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, + * "android"); + * info.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); + *

+ */ + public static final int ACTION_SET_TEXT = 0x00200000; + // Action arguments /** @@ -351,6 +367,18 @@ public class AccessibilityNodeInfo implements Parcelable { public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT"; + /** + * Argument for specifying the text content to set + *

+ * Type: CharSequence
+ * Actions: {@link #ACTION_SET_TEXT} + *

+ * + * @see #ACTION_SET_TEXT + */ + public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = + "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE"; + // Focus types /** diff --git a/core/java/android/widget/EditText.java b/core/java/android/widget/EditText.java index 3a7cc87caef6c..a8ff56280a29a 100644 --- a/core/java/android/widget/EditText.java +++ b/core/java/android/widget/EditText.java @@ -17,6 +17,7 @@ package android.widget; import android.content.Context; +import android.os.Bundle; import android.text.Editable; import android.text.Selection; import android.text.Spannable; @@ -132,4 +133,22 @@ public class EditText extends TextView { super.onInitializeAccessibilityNodeInfo(info); info.setClassName(EditText.class.getName()); } + + @Override + public boolean performAccessibilityAction(int action, Bundle arguments) { + switch (action) { + case AccessibilityNodeInfo.ACTION_SET_TEXT: { + CharSequence text = (arguments != null) ? arguments.getCharSequence( + AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE) : null; + setText(text); + if (text != null && text.length() > 0) { + setSelection(text.length()); + } + return true; + } + default: { + return super.performAccessibilityAction(action, arguments); + } + } + } } diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 43e1f12e6ce52..959d4a94b732a 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -2722,7 +2722,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { | AccessibilityNodeInfo.ACTION_SET_SELECTION | AccessibilityNodeInfo.ACTION_EXPAND | AccessibilityNodeInfo.ACTION_COLLAPSE - | AccessibilityNodeInfo.ACTION_DISMISS; + | AccessibilityNodeInfo.ACTION_DISMISS + | AccessibilityNodeInfo.ACTION_SET_TEXT; private static final int RETRIEVAL_ALLOWING_EVENT_TYPES = AccessibilityEvent.TYPE_VIEW_CLICKED