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

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

Issue 513483002: Clean up setting accessibility focus. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Try it with focus clear instead Created 6 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 8ba9800c62bd87cdf98b2741f7de52f806f47757..da8ff8fa8bfc826b2132b7ff048ab888467af06e 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
@@ -164,13 +164,8 @@ public class BrowserAccessibilityManager {
switch (action) {
case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS:
- if (mAccessibilityFocusId == virtualViewId) {
- return true;
- }
+ if (!moveAccessibilityFocusToId(virtualViewId)) return true;
- mAccessibilityFocusId = virtualViewId;
- sendAccessibilityEvent(mAccessibilityFocusId,
- AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
if (!mIsHovering) {
nativeScrollToMakeNodeVisible(
mNativeObj, mAccessibilityFocusId);
@@ -270,8 +265,7 @@ public class BrowserAccessibilityManager {
// (Re-) focus focused element, since we weren't able to create an
// AccessibilityNodeInfo for this element before.
if (mAccessibilityFocusId != View.NO_ID) {
- sendAccessibilityEvent(mAccessibilityFocusId,
- AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
+ moveAccessibilityFocusToIdAndRefocusIfNeeded(mAccessibilityFocusId);
}
}
@@ -280,11 +274,33 @@ public class BrowserAccessibilityManager {
if (id == 0)
return false;
- mAccessibilityFocusId = id;
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
+ moveAccessibilityFocusToId(id);
+ return true;
+ }
+
+ private boolean moveAccessibilityFocusToId(int newAccessibilityFocusId) {
+ if (newAccessibilityFocusId == mAccessibilityFocusId)
+ return false;
+
+ mAccessibilityFocusId = newAccessibilityFocusId;
+ sendAccessibilityEvent(mAccessibilityFocusId,
+ AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
return true;
}
+ private void moveAccessibilityFocusToIdAndRefocusIfNeeded(int newAccessibilityFocusId) {
+ // Work around a bug in the Android framework where it doesn't fully update the object
+ // with accessibility focus even if you send it a WINDOW_CONTENT_CHANGED. To work around
+ // this, clear focus and then set focus again.
+ if (newAccessibilityFocusId == mAccessibilityFocusId) {
+ sendAccessibilityEvent(newAccessibilityFocusId,
+ AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
dmazzoni 2014/08/27 19:27:11 I changed this to a focus clear, as suggested in t
+ mAccessibilityFocusId = View.NO_ID;
+ }
+
+ moveAccessibilityFocusToId(newAccessibilityFocusId);
+ }
+
private void sendAccessibilityEvent(int virtualViewId, int eventType) {
// If we don't have any frame info, then the virtual hierarchy
// doesn't exist in the view of the Android framework, so should
@@ -371,20 +387,14 @@ public class BrowserAccessibilityManager {
if (mUserHasTouchExplored) return;
if (mContentViewCore.shouldSetAccessibilityFocusOnPageLoad()) {
- mAccessibilityFocusId = id;
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
+ moveAccessibilityFocusToIdAndRefocusIfNeeded(id);
}
}
@CalledByNative
private void handleFocusChanged(int id) {
sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_FOCUSED);
-
- // Update accessibility focus if not already set to this node.
- if (mAccessibilityFocusId != id) {
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
- mAccessibilityFocusId = id;
- }
+ moveAccessibilityFocusToId(id);
}
@CalledByNative
@@ -428,12 +438,7 @@ public class BrowserAccessibilityManager {
@CalledByNative
private void handleScrolledToAnchor(int id) {
- if (mAccessibilityFocusId == id) {
- return;
- }
-
- mAccessibilityFocusId = id;
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
+ moveAccessibilityFocusToId(id);
}
@CalledByNative
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698