Merge "Adds a UiAutomation#clearCache() to be consistent with A11yService."

This commit is contained in:
Daniel Norman
2023-02-13 17:03:09 +00:00
committed by Android (Google) Code Review
3 changed files with 46 additions and 0 deletions

View File

@@ -7335,6 +7335,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();

View File

@@ -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);

View File

@@ -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