Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java

Issue 681503002: Add Android AX functions to set the value and selection of a text field. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@link_text_from_image
Patch Set: Add to supported actions Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
index 3d55f437f9fe3220acdc3d77c38682e9d5ccf352..5f1ed457e45a5fecc5f825f24c87743443902272 100644
--- a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
+++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
@@ -40,6 +40,11 @@ import java.util.Locale;
public class BrowserAccessibilityManager {
private static final String TAG = "BrowserAccessibilityManager";
+ // Constants from AccessibilityNodeInfo defined in the L SDK.
+ private static final int ACTION_SET_TEXT = 0x200000;
+ private static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE =
+ "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+
private ContentViewCore mContentViewCore;
private final AccessibilityManager mAccessibilityManager;
private final RenderCoordinates mRenderCoordinates;
@@ -194,7 +199,6 @@ public class BrowserAccessibilityManager {
case AccessibilityNodeInfo.ACTION_CLEAR_FOCUS:
nativeBlur(mNativeObj);
return true;
-
case AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT: {
if (arguments == null) return false;
String elementType = arguments.getString(
@@ -211,7 +215,28 @@ public class BrowserAccessibilityManager {
elementType = elementType.toUpperCase(Locale.US);
return jumpToElementType(elementType, false);
}
-
+ case ACTION_SET_TEXT: {
+ if (arguments == null) return false;
+ String newText = arguments.getString(
+ ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE);
+ if (newText == null) return false;
+ nativeSetTextFieldValue(mNativeObj, virtualViewId, newText);
+ // Match Android framework and set the cursor to the end of the text field.
+ nativeSetSelection(mNativeObj, virtualViewId, newText.length(), newText.length());
+ break;
+ }
+ case AccessibilityNodeInfo.ACTION_SET_SELECTION: {
+ int selectionStart = 0;
+ int selectionEnd = 0;
+ if (arguments != null) {
+ selectionStart = arguments.getInt(
+ AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT);
+ selectionEnd = arguments.getInt(
+ AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT);
+ }
+ nativeSetSelection(mNativeObj, virtualViewId, selectionStart, selectionEnd);
+ break;
+ }
default:
break;
}
@@ -388,8 +413,8 @@ public class BrowserAccessibilityManager {
* gets initialized first.
*/
private boolean isFrameInfoInitialized() {
- return mRenderCoordinates.getContentWidthCss() != 0.0 ||
- mRenderCoordinates.getContentHeightCss() != 0.0;
+ return mRenderCoordinates.getContentWidthCss() != 0.0
+ || mRenderCoordinates.getContentHeightCss() != 0.0;
}
@CalledByNative
@@ -480,8 +505,8 @@ public class BrowserAccessibilityManager {
@CalledByNative
private void setAccessibilityNodeInfoBooleanAttributes(AccessibilityNodeInfo node,
int virtualViewId, boolean checkable, boolean checked, boolean clickable,
- boolean enabled, boolean focusable, boolean focused, boolean password,
- boolean scrollable, boolean selected, boolean visibleToUser) {
+ boolean editableText, boolean enabled, boolean focusable, boolean focused,
+ boolean password, boolean scrollable, boolean selected, boolean visibleToUser) {
node.setCheckable(checkable);
node.setChecked(checked);
node.setClickable(clickable);
@@ -496,6 +521,11 @@ public class BrowserAccessibilityManager {
node.addAction(AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT);
node.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT);
+ if (editableText && enabled) {
+ node.addAction(ACTION_SET_TEXT);
+ node.addAction(AccessibilityNodeInfo.ACTION_SET_SELECTION);
+ }
+
if (focusable) {
if (focused) {
node.addAction(AccessibilityNodeInfo.ACTION_CLEAR_FOCUS);
@@ -739,4 +769,8 @@ public class BrowserAccessibilityManager {
long nativeBrowserAccessibilityManagerAndroid, int id);
private native int nativeFindElementType(long nativeBrowserAccessibilityManagerAndroid,
int startId, String elementType, boolean forwards);
+ private native void nativeSetTextFieldValue(long nativeBrowserAccessibilityManagerAndroid,
+ int id, String newValue);
+ private native void nativeSetSelection(long nativeBrowserAccessibilityManagerAndroid,
+ int id, int start, int end);
}

Powered by Google App Engine
This is Rietveld 408576698