diff options
author | Guang Zhu <guangzhu@google.com> | 2014-02-12 19:54:30 -0800 |
---|---|---|
committer | Guang Zhu <guangzhu@google.com> | 2014-02-20 20:05:34 -0800 |
commit | 4cd353c038ec3c21f25c12897992e5e9826fe824 (patch) | |
tree | 6738ef0e78f1ad39481b6df073e42d70047da5b1 | |
parent | 1a405db22a2ade6b745f3e1cf93ba0c54b048d95 (diff) | |
download | frameworks_base-4cd353c038ec3c21f25c12897992e5e9826fe824.zip frameworks_base-4cd353c038ec3c21f25c12897992e5e9826fe824.tar.gz frameworks_base-4cd353c038ec3c21f25c12897992e5e9826fe824.tar.bz2 |
add new accessibility action for EditText to set text content
Bug: 12872344
Change-Id: I85a3805ab0c34b96a7d4228f2382c8ff664e36e8
4 files changed, 51 insertions, 1 deletions
diff --git a/api/current.txt b/api/current.txt index 89a4692..0575861 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 4fdbc1e..560d0c9 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 <code> + * null</code> or empty {@link CharSequence} will clear the text. This action will also put the + * cursor at the end of text. + * <p> + * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE}<br> + * <strong>Example:</strong> + * <code><pre><p> + * Bundle arguments = new Bundle(); + * arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, + * "android"); + * info.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); + * </code></pre></p> + */ + 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 + * <p> + * <strong>Type:</strong> CharSequence<br> + * <strong>Actions:</strong> {@link #ACTION_SET_TEXT} + * </p> + * + * @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 3a7cc87..a8ff562 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 43e1f12..959d4a9 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 |