Clearing accessibility focus of a view did not update the global state.
1. The code in clear accessibility focus was not updaing the global
accessibility focus reference in view root if the view not a
descendant has accessibility focus.
bug:6382856
Change-Id: I0c99578b5afd1f1f5d0df5bba05b0a03b5951a43
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 832d575..a74a0ef 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -6196,23 +6196,23 @@
* @hide
*/
public void clearAccessibilityFocus() {
- ViewRootImpl viewRootImpl = getViewRootImpl();
- if (viewRootImpl != null) {
- View focusHost = viewRootImpl.getAccessibilityFocusedHost();
- if (focusHost != null && focusHost != this
- && ViewRootImpl.isViewDescendantOf(focusHost, this)) {
- viewRootImpl.setAccessibilityFocusedHost(null);
- }
- }
if ((mPrivateFlags2 & ACCESSIBILITY_FOCUSED) != 0) {
mPrivateFlags2 &= ~ACCESSIBILITY_FOCUSED;
invalidate();
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
notifyAccessibilityStateChanged();
-
// Clear the text navigation state.
setAccessibilityCursorPosition(-1);
}
+ // Clear the global reference of accessibility focus if this
+ // view or any of its descendants had accessibility focus.
+ ViewRootImpl viewRootImpl = getViewRootImpl();
+ if (viewRootImpl != null) {
+ View focusHost = viewRootImpl.getAccessibilityFocusedHost();
+ if (focusHost != null && ViewRootImpl.isViewDescendantOf(focusHost, this)) {
+ viewRootImpl.setAccessibilityFocusedHost(null);
+ }
+ }
}
private void requestAccessibilityFocusFromHover() {