Adds a UiAutomation#clearCache() to be consistent with A11yService.
Includes a @TestApi for CTS testing that the cache was cleared, also copied from A11yService. Bug: 263394275 Test: atest AccessibilityCacheTest Change-Id: Ia5fee5d13c6e4949ae1206edd9f0b22e53f0a437
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user