diff --git a/core/api/current.txt b/core/api/current.txt index df10ffe1e24a1..47a11d544e27c 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -7275,6 +7275,7 @@ package android.app { public final class UiAutomation { method public void adoptShellPermissionIdentity(); method public void adoptShellPermissionIdentity(@Nullable java.lang.String...); + method public boolean clearCache(); method @Deprecated public void clearWindowAnimationFrameStats(); method public boolean clearWindowContentFrameStats(int); method public void dropShellPermissionIdentity(); diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 6a4584b39135c..f969f8a41daf7 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -448,6 +448,7 @@ package android.app { method @Deprecated public boolean grantRuntimePermission(String, String, android.os.UserHandle); method public boolean injectInputEvent(@NonNull android.view.InputEvent, boolean, boolean); method public void injectInputEventToInputFilter(@NonNull android.view.InputEvent); + method public boolean isNodeInCache(@NonNull android.view.accessibility.AccessibilityNodeInfo); method @Deprecated public boolean revokeRuntimePermission(String, String, android.os.UserHandle); method public void syncInputTransactions(); method public void syncInputTransactions(boolean); diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java index 249937a72d740..b3b1cf82b85af 100644 --- a/core/java/android/app/UiAutomation.java +++ b/core/java/android/app/UiAutomation.java @@ -17,6 +17,7 @@ package android.app; import android.accessibilityservice.AccessibilityGestureEvent; +import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityService.Callbacks; import android.accessibilityservice.AccessibilityService.IAccessibilityServiceClientWrapper; import android.accessibilityservice.AccessibilityServiceInfo; @@ -58,6 +59,7 @@ import android.view.ViewRootImpl; import android.view.Window; import android.view.WindowAnimationFrameStats; import android.view.WindowContentFrameStats; +import android.view.accessibility.AccessibilityCache; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityInteractionClient; import android.view.accessibility.AccessibilityNodeInfo; @@ -464,6 +466,48 @@ public final class UiAutomation { mIsDestroyed = true; } + /** + * Clears the accessibility cache. + * + * @return {@code true} if the cache was cleared + * @see AccessibilityService#clearCache() + */ + public boolean clearCache() { + final int connectionId; + synchronized (mLock) { + throwIfNotConnectedLocked(); + connectionId = mConnectionId; + } + final AccessibilityCache cache = AccessibilityInteractionClient.getCache(connectionId); + if (cache == null) { + return false; + } + cache.clear(); + return true; + } + + /** + * Checks if {@code node} is in the accessibility cache. + * + * @param node the node to check. + * @return {@code true} if {@code node} is in the cache. + * @hide + * @see AccessibilityService#isNodeInCache(AccessibilityNodeInfo) + */ + @TestApi + public boolean isNodeInCache(@NonNull AccessibilityNodeInfo node) { + final int connectionId; + synchronized (mLock) { + throwIfNotConnectedLocked(); + connectionId = mConnectionId; + } + final AccessibilityCache cache = AccessibilityInteractionClient.getCache(connectionId); + if (cache == null) { + return false; + } + return cache.isNodeInCache(node); + } + /** * Adopt the permission identity of the shell UID for all permissions. This allows * you to call APIs protected permissions which normal apps cannot hold but are