Loading core/java/android/view/accessibility/AccessibilityCache.java +6 −0 Original line number Diff line number Diff line Loading @@ -336,7 +336,13 @@ public class AccessibilityCache { AccessibilityNodeInfo clone = AccessibilityNodeInfo.obtain(info); nodes.put(sourceId, clone); if (clone.isAccessibilityFocused()) { if (mAccessibilityFocus != AccessibilityNodeInfo.UNDEFINED_ITEM_ID && mAccessibilityFocus != sourceId) { refreshCachedNodeLocked(windowId, mAccessibilityFocus); } mAccessibilityFocus = sourceId; } else if (mAccessibilityFocus == sourceId) { mAccessibilityFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; } if (clone.isFocused()) { mInputFocus = sourceId; Loading core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -543,6 +543,27 @@ public class AccessibilityCacheTest { } } @Test public void addA11yFocusNodeBeforeFocusClearedEvent_previousA11yFocusNodeGetsRefreshed() { AccessibilityNodeInfo nodeInfo1 = getNodeWithA11yAndWindowId(SINGLE_VIEW_ID, WINDOW_ID_1); nodeInfo1.setAccessibilityFocused(true); mAccessibilityCache.add(nodeInfo1); AccessibilityNodeInfo nodeInfo2 = getNodeWithA11yAndWindowId(OTHER_VIEW_ID, WINDOW_ID_1); nodeInfo2.setAccessibilityFocused(true); mAccessibilityCache.add(nodeInfo2); AccessibilityEvent event = AccessibilityEvent.obtain( AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED); event.setSource(getMockViewWithA11yAndWindowIds(SINGLE_VIEW_ID, WINDOW_ID_1)); mAccessibilityCache.onAccessibilityEvent(event); event.recycle(); try { verify(mAccessibilityNodeRefresher).refreshNode(nodeInfo1, true); } finally { nodeInfo1.recycle(); nodeInfo2.recycle(); } } private void assertNodeIsRefreshedWithEventType(int eventType, int contentChangeTypes) { AccessibilityNodeInfo nodeInfo = getNodeWithA11yAndWindowId(SINGLE_VIEW_ID, WINDOW_ID_1); mAccessibilityCache.add(nodeInfo); Loading Loading
core/java/android/view/accessibility/AccessibilityCache.java +6 −0 Original line number Diff line number Diff line Loading @@ -336,7 +336,13 @@ public class AccessibilityCache { AccessibilityNodeInfo clone = AccessibilityNodeInfo.obtain(info); nodes.put(sourceId, clone); if (clone.isAccessibilityFocused()) { if (mAccessibilityFocus != AccessibilityNodeInfo.UNDEFINED_ITEM_ID && mAccessibilityFocus != sourceId) { refreshCachedNodeLocked(windowId, mAccessibilityFocus); } mAccessibilityFocus = sourceId; } else if (mAccessibilityFocus == sourceId) { mAccessibilityFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; } if (clone.isFocused()) { mInputFocus = sourceId; Loading
core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -543,6 +543,27 @@ public class AccessibilityCacheTest { } } @Test public void addA11yFocusNodeBeforeFocusClearedEvent_previousA11yFocusNodeGetsRefreshed() { AccessibilityNodeInfo nodeInfo1 = getNodeWithA11yAndWindowId(SINGLE_VIEW_ID, WINDOW_ID_1); nodeInfo1.setAccessibilityFocused(true); mAccessibilityCache.add(nodeInfo1); AccessibilityNodeInfo nodeInfo2 = getNodeWithA11yAndWindowId(OTHER_VIEW_ID, WINDOW_ID_1); nodeInfo2.setAccessibilityFocused(true); mAccessibilityCache.add(nodeInfo2); AccessibilityEvent event = AccessibilityEvent.obtain( AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED); event.setSource(getMockViewWithA11yAndWindowIds(SINGLE_VIEW_ID, WINDOW_ID_1)); mAccessibilityCache.onAccessibilityEvent(event); event.recycle(); try { verify(mAccessibilityNodeRefresher).refreshNode(nodeInfo1, true); } finally { nodeInfo1.recycle(); nodeInfo2.recycle(); } } private void assertNodeIsRefreshedWithEventType(int eventType, int contentChangeTypes) { AccessibilityNodeInfo nodeInfo = getNodeWithA11yAndWindowId(SINGLE_VIEW_ID, WINDOW_ID_1); mAccessibilityCache.add(nodeInfo); Loading