Add trace for AccessibilityManagerService,
AccessibilityServiceConnection and AccessibilityService.
Bug: 157601519
Test: adb shell cmd accessibility start-trace
adb shell cmd accessibility stop-trace
Change-Id: Ia2c13ac26c391dcb56da4bfc9f8d643dff4d7772
This commit is contained in:
@@ -102,6 +102,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
FingerprintGestureDispatcher.FingerprintGestureClient {
|
||||
private static final boolean DEBUG = false;
|
||||
private static final String LOG_TAG = "AbstractAccessibilityServiceConnection";
|
||||
private static final String TRACE_A11Y_SERVICE_CONNECTION =
|
||||
LOG_TAG + ".IAccessibilityServiceConnection";
|
||||
private static final String TRACE_A11Y_SERVICE_CLIENT =
|
||||
LOG_TAG + ".IAccessibilityServiceClient";
|
||||
private static final int WAIT_WINDOWS_TIMEOUT_MILLIS = 5000;
|
||||
|
||||
protected static final String TAKE_SCREENSHOT = "takeScreenshot";
|
||||
@@ -127,6 +131,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
protected final Object mLock;
|
||||
|
||||
protected final AccessibilitySecurityPolicy mSecurityPolicy;
|
||||
protected final AccessibilityTrace mTrace;
|
||||
|
||||
// The service that's bound to this instance. Whenever this value is non-null, this
|
||||
// object is registered as a death recipient
|
||||
@@ -247,7 +252,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
public AbstractAccessibilityServiceConnection(Context context, ComponentName componentName,
|
||||
AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler,
|
||||
Object lock, AccessibilitySecurityPolicy securityPolicy, SystemSupport systemSupport,
|
||||
WindowManagerInternal windowManagerInternal,
|
||||
AccessibilityTrace trace, WindowManagerInternal windowManagerInternal,
|
||||
SystemActionPerformer systemActionPerfomer,
|
||||
AccessibilityWindowManager a11yWindowManager) {
|
||||
mContext = context;
|
||||
@@ -259,6 +264,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
mSecurityPolicy = securityPolicy;
|
||||
mSystemActionPerformer = systemActionPerfomer;
|
||||
mSystemSupport = systemSupport;
|
||||
mTrace = trace;
|
||||
mMainHandler = mainHandler;
|
||||
mInvocationHandler = new InvocationHandler(mainHandler.getLooper());
|
||||
mA11yWindowManager = a11yWindowManager;
|
||||
@@ -291,6 +297,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onKeyEvent",
|
||||
keyEvent + ", " + sequenceNumber);
|
||||
}
|
||||
mServiceInterface.onKeyEvent(keyEvent, sequenceNumber);
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
@@ -354,11 +364,18 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public void setOnKeyEventResult(boolean handled, int sequence) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setOnKeyEventResult",
|
||||
"handled=" + handled + ";sequence=" + sequence);
|
||||
}
|
||||
mSystemSupport.getKeyEventDispatcher().setOnKeyEventResult(this, handled, sequence);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccessibilityServiceInfo getServiceInfo() {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getServiceInfo");
|
||||
}
|
||||
synchronized (mLock) {
|
||||
return mAccessibilityServiceInfo;
|
||||
}
|
||||
@@ -375,6 +392,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public void setServiceInfo(AccessibilityServiceInfo info) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setServiceInfo", "info=" + info);
|
||||
}
|
||||
final long identity = Binder.clearCallingIdentity();
|
||||
try {
|
||||
synchronized (mLock) {
|
||||
@@ -400,6 +420,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
@Nullable
|
||||
@Override
|
||||
public AccessibilityWindowInfo.WindowListSparseArray getWindows() {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getWindows");
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return null;
|
||||
@@ -434,6 +457,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public AccessibilityWindowInfo getWindow(int windowId) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getWindow", "windowId=" + windowId);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
int displayId = Display.INVALID_DISPLAY;
|
||||
if (windowId != AccessibilityWindowInfo.UNDEFINED_WINDOW_ID) {
|
||||
@@ -469,6 +495,13 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
long accessibilityNodeId, String viewIdResName, int interactionId,
|
||||
IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
|
||||
throws RemoteException {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".findAccessibilityNodeInfosByViewId",
|
||||
"accessibilityWindowId=" + accessibilityWindowId + ";accessibilityNodeId="
|
||||
+ accessibilityNodeId + ";viewIdResName=" + viewIdResName + ";interactionId="
|
||||
+ interactionId + ";callback=" + callback + ";interrogatingTid="
|
||||
+ interrogatingTid);
|
||||
}
|
||||
final int resolvedWindowId;
|
||||
RemoteAccessibilityConnection connection;
|
||||
Region partialInteractiveRegion = Region.obtain();
|
||||
@@ -530,6 +563,12 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
long accessibilityNodeId, String text, int interactionId,
|
||||
IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
|
||||
throws RemoteException {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".findAccessibilityNodeInfosByText",
|
||||
"accessibilityWindowId=" + accessibilityWindowId + ";accessibilityNodeId="
|
||||
+ accessibilityNodeId + ";text=" + text + ";interactionId=" + interactionId
|
||||
+ ";callback=" + callback + ";interrogatingTid=" + interrogatingTid);
|
||||
}
|
||||
final int resolvedWindowId;
|
||||
RemoteAccessibilityConnection connection;
|
||||
Region partialInteractiveRegion = Region.obtain();
|
||||
@@ -591,6 +630,14 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
int accessibilityWindowId, long accessibilityNodeId, int interactionId,
|
||||
IAccessibilityInteractionConnectionCallback callback, int flags,
|
||||
long interrogatingTid, Bundle arguments) throws RemoteException {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(
|
||||
TRACE_A11Y_SERVICE_CONNECTION + ".findAccessibilityNodeInfoByAccessibilityId",
|
||||
"accessibilityWindowId=" + accessibilityWindowId + ";accessibilityNodeId="
|
||||
+ accessibilityNodeId + ";interactionId=" + interactionId + ";callback="
|
||||
+ callback + ";flags=" + flags + ";interrogatingTid=" + interrogatingTid
|
||||
+ ";arguments=" + arguments);
|
||||
}
|
||||
final int resolvedWindowId;
|
||||
RemoteAccessibilityConnection connection;
|
||||
Region partialInteractiveRegion = Region.obtain();
|
||||
@@ -652,6 +699,13 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
int focusType, int interactionId,
|
||||
IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
|
||||
throws RemoteException {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".findFocus",
|
||||
"accessibilityWindowId=" + accessibilityWindowId + ";accessibilityNodeId="
|
||||
+ accessibilityNodeId + ";focusType=" + focusType + ";interactionId="
|
||||
+ interactionId + ";callback=" + callback + ";interrogatingTid="
|
||||
+ interrogatingTid);
|
||||
}
|
||||
final int resolvedWindowId;
|
||||
RemoteAccessibilityConnection connection;
|
||||
Region partialInteractiveRegion = Region.obtain();
|
||||
@@ -713,6 +767,13 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
int direction, int interactionId,
|
||||
IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
|
||||
throws RemoteException {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".focusSearch",
|
||||
"accessibilityWindowId=" + accessibilityWindowId + ";accessibilityNodeId="
|
||||
+ accessibilityNodeId + ";direction=" + direction + ";interactionId="
|
||||
+ interactionId + ";callback=" + callback + ";interrogatingTid="
|
||||
+ interrogatingTid);
|
||||
}
|
||||
final int resolvedWindowId;
|
||||
RemoteAccessibilityConnection connection;
|
||||
Region partialInteractiveRegion = Region.obtain();
|
||||
@@ -770,10 +831,18 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public void sendGesture(int sequence, ParceledListSlice gestureSteps) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".sendGesture",
|
||||
"sequence=" + sequence + ";gestureSteps=" + gestureSteps);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispatchGesture(int sequence, ParceledListSlice gestureSteps, int displayId) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".dispatchGesture", "sequence="
|
||||
+ sequence + ";gestureSteps=" + gestureSteps + ";displayId=" + displayId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -781,6 +850,13 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
long accessibilityNodeId, int action, Bundle arguments, int interactionId,
|
||||
IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
|
||||
throws RemoteException {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".performAccessibilityAction",
|
||||
"accessibilityWindowId=" + accessibilityWindowId + ";accessibilityNodeId="
|
||||
+ accessibilityNodeId + ";action=" + action + ";arguments=" + arguments
|
||||
+ ";interactionId=" + interactionId + ";callback=" + callback
|
||||
+ ";interrogatingTid=" + interrogatingTid);
|
||||
}
|
||||
final int resolvedWindowId;
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
@@ -802,6 +878,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public boolean performGlobalAction(int action) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".performGlobalAction",
|
||||
"action=" + action);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return false;
|
||||
@@ -812,6 +892,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public @NonNull List<AccessibilityNodeInfo.AccessibilityAction> getSystemActions() {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getSystemActions");
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return Collections.emptyList();
|
||||
@@ -822,6 +905,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public boolean isFingerprintGestureDetectionAvailable() {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(
|
||||
TRACE_A11Y_SERVICE_CONNECTION + ".isFingerprintGestureDetectionAvailable");
|
||||
}
|
||||
if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
|
||||
return false;
|
||||
}
|
||||
@@ -835,6 +922,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public float getMagnificationScale(int displayId) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getMagnificationScale",
|
||||
"displayId=" + displayId);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return 1.0f;
|
||||
@@ -850,6 +941,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public Region getMagnificationRegion(int displayId) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getMagnificationRegion",
|
||||
"displayId=" + displayId);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
final Region region = Region.obtain();
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
@@ -874,6 +969,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public float getMagnificationCenterX(int displayId) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getMagnificationCenterX",
|
||||
"displayId=" + displayId);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return 0.0f;
|
||||
@@ -896,6 +995,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public float getMagnificationCenterY(int displayId) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getMagnificationCenterY",
|
||||
"displayId=" + displayId);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return 0.0f;
|
||||
@@ -928,6 +1031,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public boolean resetMagnification(int displayId, boolean animate) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".resetMagnification",
|
||||
"displayId=" + displayId + ";animate=" + animate);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return false;
|
||||
@@ -950,6 +1057,11 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
@Override
|
||||
public boolean setMagnificationScaleAndCenter(int displayId, float scale, float centerX,
|
||||
float centerY, boolean animate) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setMagnificationScaleAndCenter",
|
||||
"displayId=" + displayId + ";scale=" + scale + ";centerX=" + centerX
|
||||
+ ";centerY=" + centerY + ";animate=" + animate);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return false;
|
||||
@@ -974,6 +1086,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public void setMagnificationCallbackEnabled(int displayId, boolean enabled) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setMagnificationCallbackEnabled",
|
||||
"displayId=" + displayId + ";enabled=" + enabled);
|
||||
}
|
||||
mInvocationHandler.setMagnificationCallbackEnabled(displayId, enabled);
|
||||
}
|
||||
|
||||
@@ -983,11 +1099,19 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public void setSoftKeyboardCallbackEnabled(boolean enabled) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setSoftKeyboardCallbackEnabled",
|
||||
"enabled=" + enabled);
|
||||
}
|
||||
mInvocationHandler.setSoftKeyboardCallbackEnabled(enabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void takeScreenshot(int displayId, RemoteCallback callback) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".takeScreenshot",
|
||||
"displayId=" + displayId + ";callback=" + callback);
|
||||
}
|
||||
final long currentTimestamp = SystemClock.uptimeMillis();
|
||||
if (mRequestTakeScreenshotTimestampMs != 0
|
||||
&& (currentTimestamp - mRequestTakeScreenshotTimestampMs)
|
||||
@@ -1157,6 +1281,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
*/
|
||||
@Override
|
||||
public IBinder getOverlayWindowToken(int displayId) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getOverlayWindowToken",
|
||||
"displayId=" + displayId);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
return mOverlayWindowTokens.get(displayId);
|
||||
}
|
||||
@@ -1170,6 +1298,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
*/
|
||||
@Override
|
||||
public int getWindowIdForLeashToken(@NonNull IBinder token) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getWindowIdForLeashToken",
|
||||
"token=" + token);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
return mA11yWindowManager.getWindowIdLocked(token);
|
||||
}
|
||||
@@ -1181,6 +1313,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
// Clear the proxy in the other process so this
|
||||
// IAccessibilityServiceConnection can be garbage collected.
|
||||
if (mServiceInterface != null) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".init", "null, " + mId + ", null");
|
||||
}
|
||||
mServiceInterface.init(null, mId, null);
|
||||
}
|
||||
} catch (RemoteException re) {
|
||||
@@ -1329,6 +1464,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
}
|
||||
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onAccessibilityEvent",
|
||||
event + ";" + serviceWantsEvent);
|
||||
}
|
||||
listener.onAccessibilityEvent(event, serviceWantsEvent);
|
||||
if (DEBUG) {
|
||||
Slog.i(LOG_TAG, "Event " + event + " sent to " + listener);
|
||||
@@ -1382,6 +1521,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
|
||||
if (listener != null) {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onMagnificationChanged", displayId
|
||||
+ ", " + region + ", " + scale + ", " + centerX + ", " + centerY);
|
||||
}
|
||||
listener.onMagnificationChanged(displayId, region, scale, centerX, centerY);
|
||||
} catch (RemoteException re) {
|
||||
Slog.e(LOG_TAG, "Error sending magnification changes to " + mService, re);
|
||||
@@ -1397,6 +1540,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
|
||||
if (listener != null) {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onSoftKeyboardShowModeChanged",
|
||||
String.valueOf(showState));
|
||||
}
|
||||
listener.onSoftKeyboardShowModeChanged(showState);
|
||||
} catch (RemoteException re) {
|
||||
Slog.e(LOG_TAG, "Error sending soft keyboard show mode changes to " + mService,
|
||||
@@ -1409,6 +1556,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
|
||||
if (listener != null) {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onAccessibilityButtonClicked",
|
||||
String.valueOf(displayId));
|
||||
}
|
||||
listener.onAccessibilityButtonClicked(displayId);
|
||||
} catch (RemoteException re) {
|
||||
Slog.e(LOG_TAG, "Error sending accessibility button click to " + mService, re);
|
||||
@@ -1427,6 +1578,11 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
|
||||
if (listener != null) {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(
|
||||
TRACE_A11Y_SERVICE_CLIENT + ".onAccessibilityButtonAvailabilityChanged",
|
||||
String.valueOf(available));
|
||||
}
|
||||
listener.onAccessibilityButtonAvailabilityChanged(available);
|
||||
} catch (RemoteException re) {
|
||||
Slog.e(LOG_TAG,
|
||||
@@ -1440,6 +1596,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
|
||||
if (listener != null) {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onGesture",
|
||||
gestureInfo.toString());
|
||||
}
|
||||
listener.onGesture(gestureInfo);
|
||||
} catch (RemoteException re) {
|
||||
Slog.e(LOG_TAG, "Error during sending gesture " + gestureInfo
|
||||
@@ -1452,6 +1612,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
|
||||
if (listener != null) {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onSystemActionsChanged");
|
||||
}
|
||||
listener.onSystemActionsChanged();
|
||||
} catch (RemoteException re) {
|
||||
Slog.e(LOG_TAG, "Error sending system actions change to " + mService,
|
||||
@@ -1464,6 +1627,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
|
||||
if (listener != null) {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".clearAccessibilityCache");
|
||||
}
|
||||
listener.clearAccessibilityCache();
|
||||
} catch (RemoteException re) {
|
||||
Slog.e(LOG_TAG, "Error during requesting accessibility info cache"
|
||||
@@ -1790,14 +1956,27 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
|
||||
@Override
|
||||
public void setGestureDetectionPassthroughRegion(int displayId, Region region) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setGestureDetectionPassthroughRegion",
|
||||
"displayId=" + displayId + ";region=" + region);
|
||||
}
|
||||
mSystemSupport.setGestureDetectionPassthroughRegion(displayId, region);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTouchExplorationPassthroughRegion(int displayId, Region region) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setTouchExplorationPassthroughRegion",
|
||||
"displayId=" + displayId + ";region=" + region);
|
||||
}
|
||||
mSystemSupport.setTouchExplorationPassthroughRegion(displayId, region);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFocusAppearance(int strokeWidth, int color) { }
|
||||
public void setFocusAppearance(int strokeWidth, int color) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setFocusAppearance",
|
||||
"strokeWidth=" + strokeWidth + ";color=" + color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,6 +149,7 @@ import java.util.function.Predicate;
|
||||
*/
|
||||
public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
implements AbstractAccessibilityServiceConnection.SystemSupport,
|
||||
AccessibilityTrace,
|
||||
AccessibilityUserState.ServiceInfoChangeListener,
|
||||
AccessibilityWindowManager.AccessibilityEventSender,
|
||||
AccessibilitySecurityPolicy.AccessibilityUserManager,
|
||||
@@ -243,6 +244,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
final SparseArray<AccessibilityUserState> mUserStates = new SparseArray<>();
|
||||
|
||||
private final UiAutomationManager mUiAutomationManager = new UiAutomationManager(mLock);
|
||||
private final WindowManagerInternal.AccessibilityControllerInternal mA11yController;
|
||||
|
||||
private int mCurrentUserId = UserHandle.USER_SYSTEM;
|
||||
|
||||
@@ -288,6 +290,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
mContext = context;
|
||||
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
|
||||
mWindowManagerService = LocalServices.getService(WindowManagerInternal.class);
|
||||
mA11yController = mWindowManagerService.getAccessibilityController();
|
||||
mMainHandler = new MainHandler(mContext.getMainLooper());
|
||||
mActivityTaskManagerService = LocalServices.getService(ActivityTaskManagerInternal.class);
|
||||
mPackageManager = packageManager;
|
||||
@@ -308,6 +311,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
mContext = context;
|
||||
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
|
||||
mWindowManagerService = LocalServices.getService(WindowManagerInternal.class);
|
||||
mA11yController = mWindowManagerService.getAccessibilityController();
|
||||
mMainHandler = new MainHandler(mContext.getMainLooper());
|
||||
mActivityTaskManagerService = LocalServices.getService(ActivityTaskManagerInternal.class);
|
||||
mPackageManager = mContext.getPackageManager();
|
||||
@@ -328,16 +332,25 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public int getCurrentUserIdLocked() {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getCurrentUserIdLocked");
|
||||
}
|
||||
return mCurrentUserId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccessibilityButtonShown() {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".isAccessibilityButtonShown");
|
||||
}
|
||||
return mIsAccessibilityButtonShown;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceInfoChangedLocked(AccessibilityUserState userState) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".onServiceInfoChangedLocked", "userState=" + userState);
|
||||
}
|
||||
scheduleNotifyClientsOfServicesStateChangeLocked(userState);
|
||||
}
|
||||
|
||||
@@ -395,6 +408,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
PackageMonitor monitor = new PackageMonitor() {
|
||||
@Override
|
||||
public void onSomePackagesChanged() {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".PM.onSomePackagesChanged");
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
// Only the profile parent can install accessibility services.
|
||||
// Therefore we ignore packages from linked profiles.
|
||||
@@ -419,6 +436,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
// mBindingServices in binderDied() during updating. Remove services from this
|
||||
// package from mBindingServices, and then update the user state to re-bind new
|
||||
// versions of them.
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".PM.onPackageUpdateFinished",
|
||||
"packageName=" + packageName + ";uid=" + uid);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
final int userId = getChangingUserId();
|
||||
if (userId != mCurrentUserId) {
|
||||
@@ -448,6 +469,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void onPackageRemoved(String packageName, int uid) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".PM.onPackageRemoved",
|
||||
"packageName=" + packageName + ";uid=" + uid);
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
final int userId = getChangingUserId();
|
||||
// Only the profile parent can install accessibility services.
|
||||
@@ -487,6 +513,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
@Override
|
||||
public boolean onHandleForceStop(Intent intent, String[] packages,
|
||||
int uid, boolean doit) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".PM.onHandleForceStop", "intent=" + intent + ";packages="
|
||||
+ packages + ";uid=" + uid + ";doit=" + doit);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
final int userId = getChangingUserId();
|
||||
// Only the profile parent can install accessibility services.
|
||||
@@ -533,6 +563,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
mContext.registerReceiverAsUser(new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".BR.onReceive", "context=" + context + ";intent=" + intent);
|
||||
}
|
||||
|
||||
String action = intent.getAction();
|
||||
if (Intent.ACTION_USER_SWITCHED.equals(action)) {
|
||||
switchUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
|
||||
@@ -616,6 +650,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public long addClient(IAccessibilityManagerClient callback, int userId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".addClient", "callback=" + callback + ";userId=" + userId);
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
// We treat calls from a profile as if made by its parent as profiles
|
||||
// share the accessibility state of the parent. The call below
|
||||
@@ -654,6 +692,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void sendAccessibilityEvent(AccessibilityEvent event, int userId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".sendAccessibilityEvent", "event=" + event + ";userId=" + userId);
|
||||
}
|
||||
boolean dispatchEvent = false;
|
||||
|
||||
synchronized (mLock) {
|
||||
@@ -746,6 +787,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
*/
|
||||
@Override
|
||||
public void registerSystemAction(RemoteAction action, int actionId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".registerSystemAction", "action=" + action + ";actionId="
|
||||
+ actionId);
|
||||
}
|
||||
mSecurityPolicy.enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ACCESSIBILITY);
|
||||
getSystemActionPerformer().registerSystemAction(actionId, action);
|
||||
}
|
||||
@@ -757,6 +802,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
*/
|
||||
@Override
|
||||
public void unregisterSystemAction(int actionId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".unregisterSystemAction", "actionId=" + actionId);
|
||||
}
|
||||
mSecurityPolicy.enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ACCESSIBILITY);
|
||||
getSystemActionPerformer().unregisterSystemAction(actionId);
|
||||
}
|
||||
@@ -771,6 +819,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(int userId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getInstalledAccessibilityServiceList", "userId=" + userId);
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
// We treat calls from a profile as if made by its parent as profiles
|
||||
// share the accessibility state of the parent. The call below
|
||||
@@ -784,6 +836,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
@Override
|
||||
public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int feedbackType,
|
||||
int userId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getEnabledAccessibilityServiceList",
|
||||
"feedbackType=" + feedbackType + ";userId=" + userId);
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
// We treat calls from a profile as if made by its parent as profiles
|
||||
// share the accessibility state of the parent. The call below
|
||||
@@ -812,6 +869,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void interrupt(int userId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".interrupt", "userId=" + userId);
|
||||
}
|
||||
|
||||
List<IAccessibilityServiceClient> interfacesToInterrupt;
|
||||
synchronized (mLock) {
|
||||
// We treat calls from a profile as if made by its parent as profiles
|
||||
@@ -838,6 +899,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
}
|
||||
for (int i = 0, count = interfacesToInterrupt.size(); i < count; i++) {
|
||||
try {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".IAccessibilityServiceClient.onInterrupt");
|
||||
}
|
||||
interfacesToInterrupt.get(i).onInterrupt();
|
||||
} catch (RemoteException re) {
|
||||
Slog.e(LOG_TAG, "Error sending interrupt request to "
|
||||
@@ -850,18 +914,31 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
public int addAccessibilityInteractionConnection(IWindow windowToken, IBinder leashToken,
|
||||
IAccessibilityInteractionConnection connection, String packageName,
|
||||
int userId) throws RemoteException {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".addAccessibilityInteractionConnection",
|
||||
"windowToken=" + windowToken + "leashToken=" + leashToken + ";connection="
|
||||
+ connection + "; packageName=" + packageName + ";userId=" + userId);
|
||||
}
|
||||
|
||||
return mA11yWindowManager.addAccessibilityInteractionConnection(
|
||||
windowToken, leashToken, connection, packageName, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAccessibilityInteractionConnection(IWindow window) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".removeAccessibilityInteractionConnection", "window=" + window);
|
||||
}
|
||||
mA11yWindowManager.removeAccessibilityInteractionConnection(window);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPictureInPictureActionReplacingConnection(
|
||||
IAccessibilityInteractionConnection connection) throws RemoteException {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".setPictureInPictureActionReplacingConnection",
|
||||
"connection=" + connection);
|
||||
}
|
||||
mSecurityPolicy.enforceCallingPermission(Manifest.permission.MODIFY_ACCESSIBILITY_DATA,
|
||||
SET_PIP_ACTION_REPLACEMENT);
|
||||
mA11yWindowManager.setPictureInPictureActionReplacingConnection(connection);
|
||||
@@ -872,13 +949,19 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
IAccessibilityServiceClient serviceClient,
|
||||
AccessibilityServiceInfo accessibilityServiceInfo,
|
||||
int flags) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".registerUiTestAutomationService", "owner=" + owner
|
||||
+ ";serviceClient=" + serviceClient + ";accessibilityServiceInfo="
|
||||
+ accessibilityServiceInfo + ";flags=" + flags);
|
||||
}
|
||||
|
||||
mSecurityPolicy.enforceCallingPermission(Manifest.permission.RETRIEVE_WINDOW_CONTENT,
|
||||
FUNCTION_REGISTER_UI_TEST_AUTOMATION_SERVICE);
|
||||
|
||||
synchronized (mLock) {
|
||||
mUiAutomationManager.registerUiTestAutomationServiceLocked(owner, serviceClient,
|
||||
mContext, accessibilityServiceInfo, sIdCounter++, mMainHandler,
|
||||
mSecurityPolicy, this, mWindowManagerService, getSystemActionPerformer(),
|
||||
mSecurityPolicy, this, this, mWindowManagerService, getSystemActionPerformer(),
|
||||
mA11yWindowManager, flags);
|
||||
onUserStateChangedLocked(getCurrentUserStateLocked());
|
||||
}
|
||||
@@ -886,6 +969,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void unregisterUiTestAutomationService(IAccessibilityServiceClient serviceClient) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".unregisterUiTestAutomationService",
|
||||
"serviceClient=" + serviceClient);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
mUiAutomationManager.unregisterUiTestAutomationServiceLocked(serviceClient);
|
||||
}
|
||||
@@ -894,6 +981,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
@Override
|
||||
public void temporaryEnableAccessibilityStateUntilKeyguardRemoved(
|
||||
ComponentName service, boolean touchExplorationEnabled) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".temporaryEnableAccessibilityStateUntilKeyguardRemoved",
|
||||
"service=" + service + ";touchExplorationEnabled=" + touchExplorationEnabled);
|
||||
}
|
||||
|
||||
mSecurityPolicy.enforceCallingPermission(
|
||||
Manifest.permission.TEMPORARY_ENABLE_ACCESSIBILITY,
|
||||
TEMPORARY_ENABLE_ACCESSIBILITY_UNTIL_KEYGUARD_REMOVED);
|
||||
@@ -922,6 +1014,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public IBinder getWindowToken(int windowId, int userId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getWindowToken", "windowId=" + windowId + ";userId=" + userId);
|
||||
}
|
||||
|
||||
mSecurityPolicy.enforceCallingPermission(
|
||||
Manifest.permission.RETRIEVE_WINDOW_TOKEN,
|
||||
GET_WINDOW_TOKEN);
|
||||
@@ -961,6 +1057,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
*/
|
||||
@Override
|
||||
public void notifyAccessibilityButtonClicked(int displayId, String targetName) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".notifyAccessibilityButtonClicked",
|
||||
"displayId=" + displayId + ";targetName=" + targetName);
|
||||
}
|
||||
|
||||
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR_SERVICE)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
throw new SecurityException("Caller does not hold permission "
|
||||
@@ -986,6 +1087,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
*/
|
||||
@Override
|
||||
public void notifyAccessibilityButtonVisibilityChanged(boolean shown) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".notifyAccessibilityButtonVisibilityChanged", "shown=" + shown);
|
||||
}
|
||||
|
||||
mSecurityPolicy.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.STATUS_BAR_SERVICE);
|
||||
synchronized (mLock) {
|
||||
@@ -1014,6 +1119,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
*/
|
||||
@Override
|
||||
public void onSystemActionsChanged() {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".onSystemActionsChanged");
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
AccessibilityUserState state = getCurrentUserStateLocked();
|
||||
notifySystemActionsChangedLocked(state);
|
||||
@@ -1076,6 +1185,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public @Nullable MotionEventInjector getMotionEventInjectorForDisplayLocked(int displayId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getMotionEventInjectorForDisplayLocked", "displayId=" + displayId);
|
||||
}
|
||||
|
||||
final long endMillis = SystemClock.uptimeMillis() + WAIT_MOTION_INJECTOR_TIMEOUT_MILLIS;
|
||||
MotionEventInjector motionEventInjector = null;
|
||||
while ((mMotionEventInjectors == null) && (SystemClock.uptimeMillis() < endMillis)) {
|
||||
@@ -1642,6 +1755,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
@Override
|
||||
public void persistComponentNamesToSettingLocked(String settingName,
|
||||
Set<ComponentName> componentNames, int userId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".persistComponentNamesToSettingLocked", "settingName=" + settingName
|
||||
+ ";componentNames=" + componentNames + ";userId=" + userId);
|
||||
}
|
||||
|
||||
persistColonDelimitedSetToSettingLocked(settingName, userId, componentNames,
|
||||
componentName -> componentName.flattenToShortString());
|
||||
}
|
||||
@@ -1726,7 +1844,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
if (service == null) {
|
||||
service = new AccessibilityServiceConnection(userState, mContext, componentName,
|
||||
installedService, sIdCounter++, mMainHandler, mLock, mSecurityPolicy,
|
||||
this, mWindowManagerService, getSystemActionPerformer(),
|
||||
this, this, mWindowManagerService, getSystemActionPerformer(),
|
||||
mA11yWindowManager, mActivityTaskManagerService);
|
||||
} else if (userState.mBoundServices.contains(service)) {
|
||||
continue;
|
||||
@@ -2603,6 +2721,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
@GuardedBy("mLock")
|
||||
@Override
|
||||
public MagnificationSpec getCompatibleMagnificationSpecLocked(int windowId) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getCompatibleMagnificationSpecLocked", "windowId=" + windowId);
|
||||
}
|
||||
|
||||
IBinder windowToken = mA11yWindowManager.getWindowTokenForUserAndWindowIdLocked(
|
||||
mCurrentUserId, windowId);
|
||||
if (windowToken != null) {
|
||||
@@ -2614,6 +2736,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public KeyEventDispatcher getKeyEventDispatcher() {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getKeyEventDispatcher");
|
||||
}
|
||||
|
||||
if (mKeyEventDispatcher == null) {
|
||||
mKeyEventDispatcher = new KeyEventDispatcher(
|
||||
mMainHandler, MainHandler.MSG_SEND_KEY_EVENT_TO_INPUT_FILTER, mLock,
|
||||
@@ -2626,6 +2752,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
@SuppressWarnings("AndroidFrameworkPendingIntentMutability")
|
||||
public PendingIntent getPendingIntentActivity(Context context, int requestCode, Intent intent,
|
||||
int flags) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getPendingIntentActivity", "context=" + context + ";requestCode="
|
||||
+ requestCode + ";intent=" + intent + ";flags=" + flags);
|
||||
}
|
||||
|
||||
|
||||
return PendingIntent.getActivity(context, requestCode, intent, flags);
|
||||
}
|
||||
|
||||
@@ -2640,6 +2772,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
*/
|
||||
@Override
|
||||
public void performAccessibilityShortcut(String targetName) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".performAccessibilityShortcut", "targetName=" + targetName);
|
||||
}
|
||||
|
||||
if ((UserHandle.getAppId(Binder.getCallingUid()) != Process.SYSTEM_UID)
|
||||
&& (mContext.checkCallingPermission(Manifest.permission.MANAGE_ACCESSIBILITY)
|
||||
!= PackageManager.PERMISSION_GRANTED)) {
|
||||
@@ -2824,6 +2960,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public List<String> getAccessibilityShortcutTargets(@ShortcutType int shortcutType) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getAccessibilityShortcutTargets", "shortcutType=" + shortcutType);
|
||||
}
|
||||
|
||||
if (mContext.checkCallingOrSelfPermission(Manifest.permission.MANAGE_ACCESSIBILITY)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
throw new SecurityException(
|
||||
@@ -2893,6 +3033,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void sendAccessibilityEventForCurrentUserLocked(AccessibilityEvent event) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".sendAccessibilityEventForCurrentUserLocked", "event=" + event);
|
||||
}
|
||||
|
||||
sendAccessibilityEventLocked(event, mCurrentUserId);
|
||||
}
|
||||
|
||||
@@ -2914,6 +3058,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
*/
|
||||
@Override
|
||||
public boolean sendFingerprintGesture(int gestureKeyCode) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".sendFingerprintGesture", "gestureKeyCode=" + gestureKeyCode);
|
||||
}
|
||||
|
||||
synchronized(mLock) {
|
||||
if (UserHandle.getAppId(Binder.getCallingUid()) != Process.SYSTEM_UID) {
|
||||
throw new SecurityException("Only SYSTEM can call sendFingerprintGesture");
|
||||
@@ -2935,6 +3083,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
*/
|
||||
@Override
|
||||
public int getAccessibilityWindowId(@Nullable IBinder windowToken) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getAccessibilityWindowId", "windowToken=" + windowToken);
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
if (UserHandle.getAppId(Binder.getCallingUid()) != Process.SYSTEM_UID) {
|
||||
throw new SecurityException("Only SYSTEM can call getAccessibilityWindowId");
|
||||
@@ -2952,6 +3104,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
*/
|
||||
@Override
|
||||
public long getRecommendedTimeoutMillis() {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getRecommendedTimeoutMillis");
|
||||
}
|
||||
|
||||
synchronized(mLock) {
|
||||
final AccessibilityUserState userState = getCurrentUserStateLocked();
|
||||
return getRecommendedTimeoutMillisLocked(userState);
|
||||
@@ -2966,6 +3122,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
@Override
|
||||
public void setWindowMagnificationConnection(
|
||||
IWindowMagnificationConnection connection) throws RemoteException {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".setWindowMagnificationConnection", "connection=" + connection);
|
||||
}
|
||||
|
||||
mSecurityPolicy.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.STATUS_BAR_SERVICE);
|
||||
|
||||
@@ -2996,6 +3156,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void associateEmbeddedHierarchy(@NonNull IBinder host, @NonNull IBinder embedded) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".associateEmbeddedHierarchy",
|
||||
"host=" + host + ";embedded=" + embedded);
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
mA11yWindowManager.associateEmbeddedHierarchyLocked(host, embedded);
|
||||
}
|
||||
@@ -3003,6 +3168,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void disassociateEmbeddedHierarchy(@NonNull IBinder token) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".disassociateEmbeddedHierarchy", "token=" + token);
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
mA11yWindowManager.disassociateEmbeddedHierarchyLocked(token);
|
||||
}
|
||||
@@ -3080,6 +3249,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public FullScreenMagnificationController getFullScreenMagnificationController() {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".getFullScreenMagnificationController");
|
||||
}
|
||||
synchronized (mLock) {
|
||||
return mMagnificationController.getFullScreenMagnificationController();
|
||||
}
|
||||
@@ -3087,6 +3259,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void onClientChangeLocked(boolean serviceInfoChanged) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".onClientChangeLocked", "serviceInfoChanged=" + serviceInfoChanged);
|
||||
}
|
||||
|
||||
AccessibilityUserState userState = getUserStateLocked(mCurrentUserId);
|
||||
onUserStateChangedLocked(userState);
|
||||
if (serviceInfoChanged) {
|
||||
@@ -3122,8 +3298,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
AccessibilityServiceConnection service = new AccessibilityServiceConnection(
|
||||
userState, mContext,
|
||||
COMPONENT_NAME, info, sIdCounter++, mMainHandler, mLock, mSecurityPolicy,
|
||||
AccessibilityManagerService.this, mWindowManagerService,
|
||||
getSystemActionPerformer(), mA11yWindowManager, mActivityTaskManagerService) {
|
||||
AccessibilityManagerService.this, AccessibilityManagerService.this,
|
||||
mWindowManagerService, getSystemActionPerformer(), mA11yWindowManager,
|
||||
mActivityTaskManagerService) {
|
||||
@Override
|
||||
public boolean supportsFlagForNotImportantViews(AccessibilityServiceInfo info) {
|
||||
return true;
|
||||
@@ -3610,6 +3787,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void setGestureDetectionPassthroughRegion(int displayId, Region region) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".setGestureDetectionPassthroughRegion",
|
||||
"displayId=" + displayId + ";region=" + region);
|
||||
}
|
||||
|
||||
mMainHandler.sendMessage(
|
||||
obtainMessage(
|
||||
AccessibilityManagerService::setGestureDetectionPassthroughRegionInternal,
|
||||
@@ -3620,6 +3802,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
|
||||
@Override
|
||||
public void setTouchExplorationPassthroughRegion(int displayId, Region region) {
|
||||
if (isA11yTracingEnabled()) {
|
||||
logTrace(LOG_TAG + ".setTouchExplorationPassthroughRegion",
|
||||
"displayId=" + displayId + ";region=" + region);
|
||||
}
|
||||
|
||||
mMainHandler.sendMessage(
|
||||
obtainMessage(
|
||||
AccessibilityManagerService::setTouchExplorationPassthroughRegionInternal,
|
||||
@@ -3657,4 +3844,20 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isA11yTracingEnabled() {
|
||||
return mA11yController.isAccessibilityTracingEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logTrace(String where) {
|
||||
logTrace(where, "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logTrace(String where, String callingParams) {
|
||||
mA11yController.logTrace(where, callingParams, "".getBytes(),
|
||||
Binder.getCallingUid(), Thread.currentThread().getStackTrace());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,10 @@ import java.util.Set;
|
||||
*/
|
||||
class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnection {
|
||||
private static final String LOG_TAG = "AccessibilityServiceConnection";
|
||||
private static final String TRACE_A11Y_SERVICE_CONNECTION =
|
||||
LOG_TAG + ".IAccessibilityServiceConnection";
|
||||
private static final String TRACE_A11Y_SERVICE_CLIENT =
|
||||
LOG_TAG + ".IAccessibilityServiceClient";
|
||||
/*
|
||||
Holding a weak reference so there isn't a loop of references. AccessibilityUserState keeps
|
||||
lists of bound and binding services. These are freed on user changes, but just in case it
|
||||
@@ -70,11 +74,12 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
|
||||
ComponentName componentName,
|
||||
AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler,
|
||||
Object lock, AccessibilitySecurityPolicy securityPolicy, SystemSupport systemSupport,
|
||||
WindowManagerInternal windowManagerInternal,
|
||||
AccessibilityTrace trace, WindowManagerInternal windowManagerInternal,
|
||||
SystemActionPerformer systemActionPerfomer, AccessibilityWindowManager awm,
|
||||
ActivityTaskManagerInternal activityTaskManagerService) {
|
||||
super(context, componentName, accessibilityServiceInfo, id, mainHandler, lock,
|
||||
securityPolicy, systemSupport, windowManagerInternal, systemActionPerfomer, awm);
|
||||
securityPolicy, systemSupport, trace, windowManagerInternal, systemActionPerfomer,
|
||||
awm);
|
||||
mUserStateWeakReference = new WeakReference<AccessibilityUserState>(userState);
|
||||
mIntent = new Intent().setComponent(mComponentName);
|
||||
mMainHandler = mainHandler;
|
||||
@@ -132,6 +137,9 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
|
||||
|
||||
@Override
|
||||
public void disableSelf() {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".disableSelf");
|
||||
}
|
||||
synchronized (mLock) {
|
||||
AccessibilityUserState userState = mUserStateWeakReference.get();
|
||||
if (userState == null) return;
|
||||
@@ -210,6 +218,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".init", this + ", " + mId + ", "
|
||||
+ mOverlayWindowTokens.get(Display.DEFAULT_DISPLAY));
|
||||
}
|
||||
serviceInterface.init(this, mId, mOverlayWindowTokens.get(Display.DEFAULT_DISPLAY));
|
||||
} catch (RemoteException re) {
|
||||
Slog.w(LOG_TAG, "Error while setting connection for service: "
|
||||
@@ -252,6 +264,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
|
||||
|
||||
@Override
|
||||
public boolean setSoftKeyboardShowMode(int showMode) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setSoftKeyboardShowMode",
|
||||
"showMode=" + showMode);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return false;
|
||||
@@ -264,12 +280,19 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
|
||||
|
||||
@Override
|
||||
public int getSoftKeyboardShowMode() {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getSoftKeyboardShowMode");
|
||||
}
|
||||
final AccessibilityUserState userState = mUserStateWeakReference.get();
|
||||
return (userState != null) ? userState.getSoftKeyboardShowModeLocked() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean switchToInputMethod(String imeId) {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".switchToInputMethod",
|
||||
"imeId=" + imeId);
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return false;
|
||||
@@ -288,6 +311,9 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
|
||||
|
||||
@Override
|
||||
public boolean isAccessibilityButtonAvailable() {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".isAccessibilityButtonAvailable");
|
||||
}
|
||||
synchronized (mLock) {
|
||||
if (!hasRightsToCurrentUserLocked()) {
|
||||
return false;
|
||||
@@ -347,6 +373,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
|
||||
}
|
||||
if (serviceInterface != null) {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT
|
||||
+ ".onFingerprintCapturingGesturesChanged", String.valueOf(active));
|
||||
}
|
||||
mServiceInterface.onFingerprintCapturingGesturesChanged(active);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
@@ -364,6 +394,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
|
||||
}
|
||||
if (serviceInterface != null) {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onFingerprintGesture",
|
||||
String.valueOf(gesture));
|
||||
}
|
||||
mServiceInterface.onFingerprintGesture(gesture);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
@@ -382,6 +416,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
|
||||
gestureSteps.getList(), mServiceInterface, sequence, displayId);
|
||||
} else {
|
||||
try {
|
||||
if (mTrace.isA11yTracingEnabled()) {
|
||||
mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onPerformGestureResult",
|
||||
sequence + ", false");
|
||||
}
|
||||
mServiceInterface.onPerformGestureResult(sequence, false);
|
||||
} catch (RemoteException re) {
|
||||
Slog.e(LOG_TAG, "Error sending motion event injection failure to "
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.android.server.accessibility;
|
||||
|
||||
/**
|
||||
* Interface to log accessibility trace.
|
||||
*/
|
||||
public interface AccessibilityTrace {
|
||||
/**
|
||||
* Whether the trace is enabled.
|
||||
*/
|
||||
boolean isA11yTracingEnabled();
|
||||
|
||||
/**
|
||||
* Log one trace entry.
|
||||
* @param where A string to identify this log entry, which can be used to filter/search
|
||||
* through the tracing file.
|
||||
*/
|
||||
void logTrace(String where);
|
||||
|
||||
/**
|
||||
* Log one trace entry.
|
||||
* @param where A string to identify this log entry, which can be used to filter/search
|
||||
* through the tracing file.
|
||||
* @param callingParams The parameters for the method to be logged.
|
||||
*/
|
||||
void logTrace(String where, String callingParams);
|
||||
}
|
||||
@@ -53,6 +53,8 @@ class UiAutomationManager {
|
||||
|
||||
private AbstractAccessibilityServiceConnection.SystemSupport mSystemSupport;
|
||||
|
||||
private AccessibilityTrace mTrace;
|
||||
|
||||
private int mUiAutomationFlags;
|
||||
|
||||
UiAutomationManager(Object lock) {
|
||||
@@ -89,6 +91,7 @@ class UiAutomationManager {
|
||||
int id, Handler mainHandler,
|
||||
AccessibilitySecurityPolicy securityPolicy,
|
||||
AbstractAccessibilityServiceConnection.SystemSupport systemSupport,
|
||||
AccessibilityTrace trace,
|
||||
WindowManagerInternal windowManagerInternal,
|
||||
SystemActionPerformer systemActionPerformer,
|
||||
AccessibilityWindowManager awm, int flags) {
|
||||
@@ -111,13 +114,14 @@ class UiAutomationManager {
|
||||
|
||||
mUiAutomationFlags = flags;
|
||||
mSystemSupport = systemSupport;
|
||||
mTrace = trace;
|
||||
// Ignore registering UiAutomation if it is not allowed to use the accessibility
|
||||
// subsystem.
|
||||
if (!useAccessibility()) {
|
||||
return;
|
||||
}
|
||||
mUiAutomationService = new UiAutomationService(context, accessibilityServiceInfo, id,
|
||||
mainHandler, mLock, securityPolicy, systemSupport, windowManagerInternal,
|
||||
mainHandler, mLock, securityPolicy, systemSupport, trace, windowManagerInternal,
|
||||
systemActionPerformer, awm);
|
||||
mUiAutomationServiceOwner = owner;
|
||||
mUiAutomationServiceInfo = accessibilityServiceInfo;
|
||||
@@ -239,11 +243,12 @@ class UiAutomationManager {
|
||||
UiAutomationService(Context context, AccessibilityServiceInfo accessibilityServiceInfo,
|
||||
int id, Handler mainHandler, Object lock,
|
||||
AccessibilitySecurityPolicy securityPolicy,
|
||||
SystemSupport systemSupport, WindowManagerInternal windowManagerInternal,
|
||||
SystemSupport systemSupport, AccessibilityTrace trace,
|
||||
WindowManagerInternal windowManagerInternal,
|
||||
SystemActionPerformer systemActionPerformer, AccessibilityWindowManager awm) {
|
||||
super(context, COMPONENT_NAME, accessibilityServiceInfo, id, mainHandler, lock,
|
||||
securityPolicy, systemSupport, windowManagerInternal, systemActionPerformer,
|
||||
awm);
|
||||
securityPolicy, systemSupport, trace, windowManagerInternal,
|
||||
systemActionPerformer, awm);
|
||||
mMainHandler = mainHandler;
|
||||
}
|
||||
|
||||
|
||||
@@ -1861,7 +1861,7 @@ final class AccessibilityController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
public boolean isAccessibilityTracingEnabled() {
|
||||
return mTracing.isEnabled();
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ public abstract class WindowManagerInternal {
|
||||
/**
|
||||
* Is trace enabled or not.
|
||||
*/
|
||||
boolean isEnabled();
|
||||
boolean isAccessibilityTracingEnabled();
|
||||
|
||||
/**
|
||||
* Add an accessibility trace entry.
|
||||
|
||||
@@ -160,6 +160,7 @@ public class AbstractAccessibilityServiceConnectionTest {
|
||||
@Mock private AccessibilitySecurityPolicy mMockSecurityPolicy;
|
||||
@Mock private AccessibilityWindowManager mMockA11yWindowManager;
|
||||
@Mock private AbstractAccessibilityServiceConnection.SystemSupport mMockSystemSupport;
|
||||
@Mock private AccessibilityTrace mMockA11yTrace;
|
||||
@Mock private WindowManagerInternal mMockWindowManagerInternal;
|
||||
@Mock private SystemActionPerformer mMockSystemActionPerformer;
|
||||
@Mock private IBinder mMockService;
|
||||
@@ -188,6 +189,7 @@ public class AbstractAccessibilityServiceConnectionTest {
|
||||
when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
|
||||
when(mMockPackageManager.hasSystemFeature(FEATURE_FINGERPRINT)).thenReturn(true);
|
||||
|
||||
when(mMockA11yTrace.isA11yTracingEnabled()).thenReturn(false);
|
||||
// Fake a11yWindowInfo and remote a11y connection for tests.
|
||||
addA11yWindowInfo(mA11yWindowInfos, WINDOWID, false, Display.DEFAULT_DISPLAY);
|
||||
addA11yWindowInfo(mA11yWindowInfos, PIP_WINDOWID, true, Display.DEFAULT_DISPLAY);
|
||||
@@ -227,8 +229,8 @@ public class AbstractAccessibilityServiceConnectionTest {
|
||||
|
||||
mServiceConnection = new TestAccessibilityServiceConnection(mMockContext, COMPONENT_NAME,
|
||||
mSpyServiceInfo, SERVICE_ID, mHandler, new Object(), mMockSecurityPolicy,
|
||||
mMockSystemSupport, mMockWindowManagerInternal, mMockSystemActionPerformer,
|
||||
mMockA11yWindowManager);
|
||||
mMockSystemSupport, mMockA11yTrace, mMockWindowManagerInternal,
|
||||
mMockSystemActionPerformer, mMockA11yWindowManager);
|
||||
// Assume that the service is connected
|
||||
mServiceConnection.mService = mMockService;
|
||||
mServiceConnection.mServiceInterface = mMockServiceInterface;
|
||||
@@ -849,12 +851,13 @@ public class AbstractAccessibilityServiceConnectionTest {
|
||||
TestAccessibilityServiceConnection(Context context, ComponentName componentName,
|
||||
AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler,
|
||||
Object lock, AccessibilitySecurityPolicy securityPolicy,
|
||||
SystemSupport systemSupport, WindowManagerInternal windowManagerInternal,
|
||||
SystemSupport systemSupport, AccessibilityTrace trace,
|
||||
WindowManagerInternal windowManagerInternal,
|
||||
SystemActionPerformer systemActionPerfomer,
|
||||
AccessibilityWindowManager a11yWindowManager) {
|
||||
super(context, componentName, accessibilityServiceInfo, id, mainHandler, lock,
|
||||
securityPolicy, systemSupport, windowManagerInternal, systemActionPerfomer,
|
||||
a11yWindowManager);
|
||||
securityPolicy, systemSupport, trace, windowManagerInternal,
|
||||
systemActionPerfomer, a11yWindowManager);
|
||||
mResolvedUserId = USER_ID;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ import static com.android.server.accessibility.AccessibilityInputFilter.FLAG_FEA
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@@ -51,16 +50,19 @@ import android.view.MotionEvent;
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.accessibility.gestures.TouchExplorer;
|
||||
import com.android.server.accessibility.magnification.FullScreenMagnificationController;
|
||||
import com.android.server.accessibility.magnification.FullScreenMagnificationGestureHandler;
|
||||
import com.android.server.accessibility.magnification.MagnificationGestureHandler;
|
||||
import com.android.server.accessibility.magnification.WindowMagnificationGestureHandler;
|
||||
import com.android.server.wm.WindowManagerInternal;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -91,7 +93,9 @@ public class AccessibilityInputFilterTest {
|
||||
FullScreenMagnificationGestureHandler.class, TouchExplorer.class,
|
||||
AutoclickController.class, AccessibilityInputFilter.class};
|
||||
|
||||
private FullScreenMagnificationController mMockFullScreenMagnificationController;
|
||||
@Mock private WindowManagerInternal.AccessibilityControllerInternal mMockA11yController;
|
||||
@Mock private WindowManagerInternal mMockWindowManagerService;
|
||||
@Mock private FullScreenMagnificationController mMockFullScreenMagnificationController;
|
||||
private AccessibilityManagerService mAms;
|
||||
private AccessibilityInputFilter mA11yInputFilter;
|
||||
private EventCaptor mCaptor1;
|
||||
@@ -134,16 +138,21 @@ public class AccessibilityInputFilterTest {
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
Context context = InstrumentationRegistry.getContext();
|
||||
LocalServices.removeServiceForTest(WindowManagerInternal.class);
|
||||
LocalServices.addService(
|
||||
WindowManagerInternal.class, mMockWindowManagerService);
|
||||
when(mMockWindowManagerService.getAccessibilityController()).thenReturn(
|
||||
mMockA11yController);
|
||||
when(mMockA11yController.isAccessibilityTracingEnabled()).thenReturn(false);
|
||||
|
||||
setDisplayCount(1);
|
||||
mAms = spy(new AccessibilityManagerService(context));
|
||||
mMockFullScreenMagnificationController = mock(FullScreenMagnificationController.class);
|
||||
mA11yInputFilter = new AccessibilityInputFilter(context, mAms, mEventHandler);
|
||||
mA11yInputFilter.onInstalled();
|
||||
|
||||
when(mAms.getValidDisplayList()).thenReturn(mDisplayList);
|
||||
when(mAms.getFullScreenMagnificationController()).thenReturn(
|
||||
mMockFullScreenMagnificationController);
|
||||
doReturn(mDisplayList).when(mAms).getValidDisplayList();
|
||||
doReturn(mMockFullScreenMagnificationController).when(mAms)
|
||||
.getFullScreenMagnificationController();
|
||||
}
|
||||
|
||||
@After
|
||||
|
||||
@@ -84,6 +84,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
|
||||
@Mock private AccessibilityServiceInfo mMockServiceInfo;
|
||||
@Mock private ResolveInfo mMockResolveInfo;
|
||||
@Mock private AbstractAccessibilityServiceConnection.SystemSupport mMockSystemSupport;
|
||||
@Mock private WindowManagerInternal.AccessibilityControllerInternal mMockA11yController;
|
||||
@Mock private PackageManager mMockPackageManager;
|
||||
@Mock private WindowManagerInternal mMockWindowManagerService;
|
||||
@Mock private AccessibilitySecurityPolicy mMockSecurityPolicy;
|
||||
@@ -115,6 +116,9 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
|
||||
|
||||
when(mMockMagnificationController.getWindowMagnificationMgr()).thenReturn(
|
||||
mMockWindowMagnificationMgr);
|
||||
when(mMockWindowManagerService.getAccessibilityController()).thenReturn(
|
||||
mMockA11yController);
|
||||
when(mMockA11yController.isAccessibilityTracingEnabled()).thenReturn(false);
|
||||
mA11yms = new AccessibilityManagerService(
|
||||
InstrumentationRegistry.getContext(),
|
||||
mMockPackageManager,
|
||||
@@ -153,6 +157,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
|
||||
new Object(),
|
||||
mMockSecurityPolicy,
|
||||
mMockSystemSupport,
|
||||
mA11yms,
|
||||
mMockWindowManagerService,
|
||||
mMockSystemActionPerformer,
|
||||
mMockA11yWindowManager,
|
||||
|
||||
@@ -85,6 +85,7 @@ public class AccessibilityServiceConnectionTest {
|
||||
@Mock AccessibilityWindowManager mMockA11yWindowManager;
|
||||
@Mock ActivityTaskManagerInternal mMockActivityTaskManagerInternal;
|
||||
@Mock AbstractAccessibilityServiceConnection.SystemSupport mMockSystemSupport;
|
||||
@Mock AccessibilityTrace mMockA11yTrace;
|
||||
@Mock WindowManagerInternal mMockWindowManagerInternal;
|
||||
@Mock SystemActionPerformer mMockSystemActionPerformer;
|
||||
@Mock KeyEventDispatcher mMockKeyEventDispatcher;
|
||||
@@ -110,12 +111,13 @@ public class AccessibilityServiceConnectionTest {
|
||||
mMockResolveInfo.serviceInfo.applicationInfo = mock(ApplicationInfo.class);
|
||||
|
||||
when(mMockIBinder.queryLocalInterface(any())).thenReturn(mMockServiceClient);
|
||||
when(mMockA11yTrace.isA11yTracingEnabled()).thenReturn(false);
|
||||
|
||||
mConnection = new AccessibilityServiceConnection(mMockUserState, mMockContext,
|
||||
COMPONENT_NAME, mMockServiceInfo, SERVICE_ID, mHandler, new Object(),
|
||||
mMockSecurityPolicy, mMockSystemSupport, mMockWindowManagerInternal,
|
||||
mMockSystemActionPerformer, mMockA11yWindowManager,
|
||||
mMockActivityTaskManagerInternal);
|
||||
mMockSecurityPolicy, mMockSystemSupport, mMockA11yTrace,
|
||||
mMockWindowManagerInternal, mMockSystemActionPerformer,
|
||||
mMockA11yWindowManager, mMockActivityTaskManagerInternal);
|
||||
when(mMockSecurityPolicy.canPerformGestures(mConnection)).thenReturn(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ public class UiAutomationManagerTest {
|
||||
@Mock AccessibilitySecurityPolicy mMockSecurityPolicy;
|
||||
@Mock AccessibilityWindowManager mMockA11yWindowManager;
|
||||
@Mock AbstractAccessibilityServiceConnection.SystemSupport mMockSystemSupport;
|
||||
@Mock AccessibilityTrace mMockA11yTrace;
|
||||
@Mock WindowManagerInternal mMockWindowManagerInternal;
|
||||
@Mock SystemActionPerformer mMockSystemActionPerformer;
|
||||
@Mock IBinder mMockOwner;
|
||||
@@ -80,6 +81,7 @@ public class UiAutomationManagerTest {
|
||||
mMockResolveInfo.serviceInfo.applicationInfo = mock(ApplicationInfo.class);
|
||||
|
||||
when(mMockAccessibilityServiceClient.asBinder()).thenReturn(mMockServiceAsBinder);
|
||||
when(mMockA11yTrace.isA11yTracingEnabled()).thenReturn(false);
|
||||
|
||||
final Context context = getInstrumentation().getTargetContext();
|
||||
when(mMockContext.getSystemService(Context.DISPLAY_SERVICE)).thenReturn(
|
||||
@@ -197,7 +199,7 @@ public class UiAutomationManagerTest {
|
||||
private void register(int flags) {
|
||||
mUiAutomationManager.registerUiTestAutomationServiceLocked(mMockOwner,
|
||||
mMockAccessibilityServiceClient, mMockContext, mMockServiceInfo, SERVICE_ID,
|
||||
mMessageCapturingHandler, mMockSecurityPolicy, mMockSystemSupport,
|
||||
mMessageCapturingHandler, mMockSecurityPolicy, mMockSystemSupport, mMockA11yTrace,
|
||||
mMockWindowManagerInternal, mMockSystemActionPerformer,
|
||||
mMockA11yWindowManager, flags);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user