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 6d63ded0c148b0b4c088d373b9af02707346af15..54ad7171810080c1d4434793253717ebb4deec92 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 |
@@ -35,8 +35,6 @@ import java.util.Locale; |
*/ |
@JNINamespace("content") |
public class BrowserAccessibilityManager { |
- private static final String TAG = "BrowserAccessibilityManager"; |
- |
// Constants from AccessibilityNodeInfo defined in the K SDK. |
private static final int ACTION_COLLAPSE = 0x00080000; |
private static final int ACTION_EXPAND = 0x00040000; |
@@ -75,6 +73,7 @@ public class BrowserAccessibilityManager { |
private int mSelectionEndIndex; |
protected int mAccessibilityFocusId; |
private Runnable mSendWindowContentChangedRunnable; |
+ private View mAutofillPopupView; |
/** |
* Create a BrowserAccessibilityManager object, which is owned by the C++ |
@@ -162,7 +161,6 @@ public class BrowserAccessibilityManager { |
if (!mAccessibilityManager.isEnabled() || mNativeObj == 0) { |
return null; |
} |
- |
int rootId = nativeGetRootId(mNativeObj); |
if (virtualViewId == View.NO_ID) { |
@@ -221,7 +219,6 @@ public class BrowserAccessibilityManager { |
switch (action) { |
case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: |
if (!moveAccessibilityFocusToId(virtualViewId)) return true; |
- |
if (!mIsHovering) { |
nativeScrollToMakeNodeVisible( |
mNativeObj, mAccessibilityFocusId); |
@@ -357,6 +354,20 @@ public class BrowserAccessibilityManager { |
return false; |
} |
+ public void onAutofillPopupDisplayed(View autofillPopupView) { |
+ if (mAccessibilityManager.isEnabled() && mNativeObj != 0) { |
+ mAutofillPopupView = autofillPopupView; |
+ nativeOnAutofillPopupDisplayed(mNativeObj); |
+ } |
+ } |
+ |
+ public void onAutofillPopupDismissed() { |
+ if (mAccessibilityManager.isEnabled() && mNativeObj != 0) { |
+ nativeOnAutofillPopupDismissed(mNativeObj); |
+ mAutofillPopupView = null; |
+ } |
+ } |
+ |
/** |
* @see View#onHoverEvent(MotionEvent) |
*/ |
@@ -543,6 +554,8 @@ public class BrowserAccessibilityManager { |
// for the whole subtree of the root. |
if (mAccessibilityFocusId == mCurrentRootId) { |
nativeSetAccessibilityFocus(mNativeObj, -1); |
+ } else if (nativeIsAutofillPopupNode(mNativeObj, mAccessibilityFocusId)) { |
+ mAutofillPopupView.requestFocus(); |
} else { |
nativeSetAccessibilityFocus(mNativeObj, mAccessibilityFocusId); |
} |
@@ -561,7 +574,6 @@ public class BrowserAccessibilityManager { |
AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED); |
mAccessibilityFocusId = View.NO_ID; |
} |
- |
moveAccessibilityFocusToId(newAccessibilityFocusId); |
} |
@@ -1162,8 +1174,14 @@ public class BrowserAccessibilityManager { |
Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0) == 1); |
} |
+ private native void nativeOnAutofillPopupDisplayed( |
+ long nativeBrowserAccessibilityManagerAndroid); |
+ private native void nativeOnAutofillPopupDismissed( |
+ long nativeBrowserAccessibilityManagerAndroid); |
private native int nativeGetRootId(long nativeBrowserAccessibilityManagerAndroid); |
private native boolean nativeIsNodeValid(long nativeBrowserAccessibilityManagerAndroid, int id); |
+ private native boolean nativeIsAutofillPopupNode( |
+ long nativeBrowserAccessibilityManagerAndroid, int id); |
private native boolean nativeIsEditableText( |
long nativeBrowserAccessibilityManagerAndroid, int id); |
private native boolean nativeIsFocused( |