Loading core/java/android/view/accessibility/AccessibilityCache.java +35 −6 Original line number Diff line number Diff line Loading @@ -43,6 +43,8 @@ final class AccessibilityCache { private long mAccessibilityFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; private long mInputFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; private boolean mIsAllWindowsCached; private final SparseArray<AccessibilityWindowInfo> mWindowCache = new SparseArray<>(); Loading @@ -52,6 +54,24 @@ final class AccessibilityCache { private final SparseArray<AccessibilityWindowInfo> mTempWindowArray = new SparseArray<>(); public void setWindows(List<AccessibilityWindowInfo> windows) { synchronized (mLock) { if (DEBUG) { Log.i(LOG_TAG, "Set windows"); } clearWindowCache(); if (windows == null) { return; } final int windowCount = windows.size(); for (int i = 0; i < windowCount; i++) { final AccessibilityWindowInfo window = windows.get(i); addWindow(window); } mIsAllWindowsCached = true; } } public void addWindow(AccessibilityWindowInfo window) { synchronized (mLock) { if (DEBUG) { Loading Loading @@ -186,6 +206,10 @@ final class AccessibilityCache { public List<AccessibilityWindowInfo> getWindows() { synchronized (mLock) { if (!mIsAllWindowsCached) { return null; } final int windowCount = mWindowCache.size(); if (windowCount > 0) { // Careful to return the windows in a decreasing layer order. Loading Loading @@ -280,12 +304,7 @@ final class AccessibilityCache { if (DEBUG) { Log.i(LOG_TAG, "clear()"); } final int windowCount = mWindowCache.size(); for (int i = windowCount - 1; i >= 0; i--) { AccessibilityWindowInfo window = mWindowCache.valueAt(i); window.recycle(); mWindowCache.removeAt(i); } clearWindowCache(); final int nodesForWindowCount = mNodeCache.size(); for (int i = 0; i < nodesForWindowCount; i++) { final int windowId = mNodeCache.keyAt(i); Loading @@ -297,6 +316,16 @@ final class AccessibilityCache { } } private void clearWindowCache() { final int windowCount = mWindowCache.size(); for (int i = windowCount - 1; i >= 0; i--) { AccessibilityWindowInfo window = mWindowCache.valueAt(i); window.recycle(); mWindowCache.removeAt(i); } mIsAllWindowsCached = false; } private void clearNodesForWindowLocked(int windowId) { if (DEBUG) { Log.i(LOG_TAG, "clearNodesForWindowLocked(" + windowId + ")"); Loading core/java/android/view/accessibility/AccessibilityInteractionClient.java +1 −5 Original line number Diff line number Diff line Loading @@ -228,11 +228,7 @@ public final class AccessibilityInteractionClient windows = connection.getWindows(); Binder.restoreCallingIdentity(identityToken); if (windows != null) { final int windowCount = windows.size(); for (int i = 0; i < windowCount; i++) { AccessibilityWindowInfo window = windows.get(i); sAccessibilityCache.addWindow(window); } sAccessibilityCache.setWindows(windows); return windows; } } else { Loading Loading
core/java/android/view/accessibility/AccessibilityCache.java +35 −6 Original line number Diff line number Diff line Loading @@ -43,6 +43,8 @@ final class AccessibilityCache { private long mAccessibilityFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; private long mInputFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; private boolean mIsAllWindowsCached; private final SparseArray<AccessibilityWindowInfo> mWindowCache = new SparseArray<>(); Loading @@ -52,6 +54,24 @@ final class AccessibilityCache { private final SparseArray<AccessibilityWindowInfo> mTempWindowArray = new SparseArray<>(); public void setWindows(List<AccessibilityWindowInfo> windows) { synchronized (mLock) { if (DEBUG) { Log.i(LOG_TAG, "Set windows"); } clearWindowCache(); if (windows == null) { return; } final int windowCount = windows.size(); for (int i = 0; i < windowCount; i++) { final AccessibilityWindowInfo window = windows.get(i); addWindow(window); } mIsAllWindowsCached = true; } } public void addWindow(AccessibilityWindowInfo window) { synchronized (mLock) { if (DEBUG) { Loading Loading @@ -186,6 +206,10 @@ final class AccessibilityCache { public List<AccessibilityWindowInfo> getWindows() { synchronized (mLock) { if (!mIsAllWindowsCached) { return null; } final int windowCount = mWindowCache.size(); if (windowCount > 0) { // Careful to return the windows in a decreasing layer order. Loading Loading @@ -280,12 +304,7 @@ final class AccessibilityCache { if (DEBUG) { Log.i(LOG_TAG, "clear()"); } final int windowCount = mWindowCache.size(); for (int i = windowCount - 1; i >= 0; i--) { AccessibilityWindowInfo window = mWindowCache.valueAt(i); window.recycle(); mWindowCache.removeAt(i); } clearWindowCache(); final int nodesForWindowCount = mNodeCache.size(); for (int i = 0; i < nodesForWindowCount; i++) { final int windowId = mNodeCache.keyAt(i); Loading @@ -297,6 +316,16 @@ final class AccessibilityCache { } } private void clearWindowCache() { final int windowCount = mWindowCache.size(); for (int i = windowCount - 1; i >= 0; i--) { AccessibilityWindowInfo window = mWindowCache.valueAt(i); window.recycle(); mWindowCache.removeAt(i); } mIsAllWindowsCached = false; } private void clearNodesForWindowLocked(int windowId) { if (DEBUG) { Log.i(LOG_TAG, "clearNodesForWindowLocked(" + windowId + ")"); Loading
core/java/android/view/accessibility/AccessibilityInteractionClient.java +1 −5 Original line number Diff line number Diff line Loading @@ -228,11 +228,7 @@ public final class AccessibilityInteractionClient windows = connection.getWindows(); Binder.restoreCallingIdentity(identityToken); if (windows != null) { final int windowCount = windows.size(); for (int i = 0; i < windowCount; i++) { AccessibilityWindowInfo window = windows.get(i); sAccessibilityCache.addWindow(window); } sAccessibilityCache.setWindows(windows); return windows; } } else { Loading