Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e593e902 authored by Hongming Jin's avatar Hongming Jin
Browse files

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
parent 9924535b
Loading
Loading
Loading
Loading
+181 −2
Original line number Original line Diff line number Diff line
@@ -102,6 +102,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        FingerprintGestureDispatcher.FingerprintGestureClient {
        FingerprintGestureDispatcher.FingerprintGestureClient {
    private static final boolean DEBUG = false;
    private static final boolean DEBUG = false;
    private static final String LOG_TAG = "AbstractAccessibilityServiceConnection";
    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;
    private static final int WAIT_WINDOWS_TIMEOUT_MILLIS = 5000;


    protected static final String TAKE_SCREENSHOT = "takeScreenshot";
    protected static final String TAKE_SCREENSHOT = "takeScreenshot";
@@ -127,6 +131,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
    protected final Object mLock;
    protected final Object mLock;


    protected final AccessibilitySecurityPolicy mSecurityPolicy;
    protected final AccessibilitySecurityPolicy mSecurityPolicy;
    protected final AccessibilityTrace mTrace;


    // The service that's bound to this instance. Whenever this value is non-null, this
    // The service that's bound to this instance. Whenever this value is non-null, this
    // object is registered as a death recipient
    // object is registered as a death recipient
@@ -247,7 +252,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
    public AbstractAccessibilityServiceConnection(Context context, ComponentName componentName,
    public AbstractAccessibilityServiceConnection(Context context, ComponentName componentName,
            AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler,
            AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler,
            Object lock, AccessibilitySecurityPolicy securityPolicy, SystemSupport systemSupport,
            Object lock, AccessibilitySecurityPolicy securityPolicy, SystemSupport systemSupport,
            WindowManagerInternal windowManagerInternal,
            AccessibilityTrace trace, WindowManagerInternal windowManagerInternal,
            SystemActionPerformer systemActionPerfomer,
            SystemActionPerformer systemActionPerfomer,
            AccessibilityWindowManager a11yWindowManager) {
            AccessibilityWindowManager a11yWindowManager) {
        mContext = context;
        mContext = context;
@@ -259,6 +264,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        mSecurityPolicy = securityPolicy;
        mSecurityPolicy = securityPolicy;
        mSystemActionPerformer = systemActionPerfomer;
        mSystemActionPerformer = systemActionPerfomer;
        mSystemSupport = systemSupport;
        mSystemSupport = systemSupport;
        mTrace = trace;
        mMainHandler = mainHandler;
        mMainHandler = mainHandler;
        mInvocationHandler = new InvocationHandler(mainHandler.getLooper());
        mInvocationHandler = new InvocationHandler(mainHandler.getLooper());
        mA11yWindowManager = a11yWindowManager;
        mA11yWindowManager = a11yWindowManager;
@@ -291,6 +297,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            return false;
            return false;
        }
        }
        try {
        try {
            if (mTrace.isA11yTracingEnabled()) {
                mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onKeyEvent",
                        keyEvent + ", " + sequenceNumber);
            }
            mServiceInterface.onKeyEvent(keyEvent, sequenceNumber);
            mServiceInterface.onKeyEvent(keyEvent, sequenceNumber);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            return false;
            return false;
@@ -354,11 +364,18 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public void setOnKeyEventResult(boolean handled, int sequence) {
    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);
        mSystemSupport.getKeyEventDispatcher().setOnKeyEventResult(this, handled, sequence);
    }
    }


    @Override
    @Override
    public AccessibilityServiceInfo getServiceInfo() {
    public AccessibilityServiceInfo getServiceInfo() {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getServiceInfo");
        }
        synchronized (mLock) {
        synchronized (mLock) {
            return mAccessibilityServiceInfo;
            return mAccessibilityServiceInfo;
        }
        }
@@ -375,6 +392,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public void setServiceInfo(AccessibilityServiceInfo info) {
    public void setServiceInfo(AccessibilityServiceInfo info) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setServiceInfo", "info=" + info);
        }
        final long identity = Binder.clearCallingIdentity();
        final long identity = Binder.clearCallingIdentity();
        try {
        try {
            synchronized (mLock) {
            synchronized (mLock) {
@@ -400,6 +420,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
    @Nullable
    @Nullable
    @Override
    @Override
    public AccessibilityWindowInfo.WindowListSparseArray getWindows() {
    public AccessibilityWindowInfo.WindowListSparseArray getWindows() {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getWindows");
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return null;
                return null;
@@ -434,6 +457,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public AccessibilityWindowInfo getWindow(int windowId) {
    public AccessibilityWindowInfo getWindow(int windowId) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getWindow", "windowId=" + windowId);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            int displayId = Display.INVALID_DISPLAY;
            int displayId = Display.INVALID_DISPLAY;
            if (windowId != AccessibilityWindowInfo.UNDEFINED_WINDOW_ID) {
            if (windowId != AccessibilityWindowInfo.UNDEFINED_WINDOW_ID) {
@@ -469,6 +495,13 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            long accessibilityNodeId, String viewIdResName, int interactionId,
            long accessibilityNodeId, String viewIdResName, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            throws RemoteException {
            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;
        final int resolvedWindowId;
        RemoteAccessibilityConnection connection;
        RemoteAccessibilityConnection connection;
        Region partialInteractiveRegion = Region.obtain();
        Region partialInteractiveRegion = Region.obtain();
@@ -530,6 +563,12 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            long accessibilityNodeId, String text, int interactionId,
            long accessibilityNodeId, String text, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            throws RemoteException {
            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;
        final int resolvedWindowId;
        RemoteAccessibilityConnection connection;
        RemoteAccessibilityConnection connection;
        Region partialInteractiveRegion = Region.obtain();
        Region partialInteractiveRegion = Region.obtain();
@@ -591,6 +630,14 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            int accessibilityWindowId, long accessibilityNodeId, int interactionId,
            int accessibilityWindowId, long accessibilityNodeId, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, int flags,
            IAccessibilityInteractionConnectionCallback callback, int flags,
            long interrogatingTid, Bundle arguments) throws RemoteException {
            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;
        final int resolvedWindowId;
        RemoteAccessibilityConnection connection;
        RemoteAccessibilityConnection connection;
        Region partialInteractiveRegion = Region.obtain();
        Region partialInteractiveRegion = Region.obtain();
@@ -652,6 +699,13 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            int focusType, int interactionId,
            int focusType, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            throws RemoteException {
            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;
        final int resolvedWindowId;
        RemoteAccessibilityConnection connection;
        RemoteAccessibilityConnection connection;
        Region partialInteractiveRegion = Region.obtain();
        Region partialInteractiveRegion = Region.obtain();
@@ -713,6 +767,13 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            int direction, int interactionId,
            int direction, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            throws RemoteException {
            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;
        final int resolvedWindowId;
        RemoteAccessibilityConnection connection;
        RemoteAccessibilityConnection connection;
        Region partialInteractiveRegion = Region.obtain();
        Region partialInteractiveRegion = Region.obtain();
@@ -770,10 +831,18 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public void sendGesture(int sequence, ParceledListSlice gestureSteps) {
    public void sendGesture(int sequence, ParceledListSlice gestureSteps) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".sendGesture",
                    "sequence=" + sequence + ";gestureSteps=" + gestureSteps);
        }
    }
    }


    @Override
    @Override
    public void dispatchGesture(int sequence, ParceledListSlice gestureSteps, int displayId) {
    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
    @Override
@@ -781,6 +850,13 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            long accessibilityNodeId, int action, Bundle arguments, int interactionId,
            long accessibilityNodeId, int action, Bundle arguments, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
            throws RemoteException {
            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;
        final int resolvedWindowId;
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
@@ -802,6 +878,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public boolean performGlobalAction(int action) {
    public boolean performGlobalAction(int action) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".performGlobalAction",
                    "action=" + action);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return false;
                return false;
@@ -812,6 +892,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public @NonNull List<AccessibilityNodeInfo.AccessibilityAction> getSystemActions() {
    public @NonNull List<AccessibilityNodeInfo.AccessibilityAction> getSystemActions() {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getSystemActions");
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return Collections.emptyList();
                return Collections.emptyList();
@@ -822,6 +905,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public boolean isFingerprintGestureDetectionAvailable() {
    public boolean isFingerprintGestureDetectionAvailable() {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(
                    TRACE_A11Y_SERVICE_CONNECTION + ".isFingerprintGestureDetectionAvailable");
        }
        if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
        if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
            return false;
            return false;
        }
        }
@@ -835,6 +922,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public float getMagnificationScale(int displayId) {
    public float getMagnificationScale(int displayId) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getMagnificationScale",
                    "displayId=" + displayId);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return 1.0f;
                return 1.0f;
@@ -850,6 +941,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public Region getMagnificationRegion(int displayId) {
    public Region getMagnificationRegion(int displayId) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getMagnificationRegion",
                    "displayId=" + displayId);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            final Region region = Region.obtain();
            final Region region = Region.obtain();
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
@@ -874,6 +969,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public float getMagnificationCenterX(int displayId) {
    public float getMagnificationCenterX(int displayId) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getMagnificationCenterX",
                    "displayId=" + displayId);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return 0.0f;
                return 0.0f;
@@ -896,6 +995,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public float getMagnificationCenterY(int displayId) {
    public float getMagnificationCenterY(int displayId) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getMagnificationCenterY",
                    "displayId=" + displayId);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return 0.0f;
                return 0.0f;
@@ -928,6 +1031,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public boolean resetMagnification(int displayId, boolean animate) {
    public boolean resetMagnification(int displayId, boolean animate) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".resetMagnification",
                    "displayId=" + displayId + ";animate=" + animate);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return false;
                return false;
@@ -950,6 +1057,11 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
    @Override
    @Override
    public boolean setMagnificationScaleAndCenter(int displayId, float scale, float centerX,
    public boolean setMagnificationScaleAndCenter(int displayId, float scale, float centerX,
            float centerY, boolean animate) {
            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) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return false;
                return false;
@@ -974,6 +1086,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public void setMagnificationCallbackEnabled(int displayId, boolean enabled) {
    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);
        mInvocationHandler.setMagnificationCallbackEnabled(displayId, enabled);
    }
    }


@@ -983,11 +1099,19 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public void setSoftKeyboardCallbackEnabled(boolean enabled) {
    public void setSoftKeyboardCallbackEnabled(boolean enabled) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setSoftKeyboardCallbackEnabled",
                    "enabled=" + enabled);
        }
        mInvocationHandler.setSoftKeyboardCallbackEnabled(enabled);
        mInvocationHandler.setSoftKeyboardCallbackEnabled(enabled);
    }
    }


    @Override
    @Override
    public void takeScreenshot(int displayId, RemoteCallback callback) {
    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();
        final long currentTimestamp = SystemClock.uptimeMillis();
        if (mRequestTakeScreenshotTimestampMs != 0
        if (mRequestTakeScreenshotTimestampMs != 0
                && (currentTimestamp - mRequestTakeScreenshotTimestampMs)
                && (currentTimestamp - mRequestTakeScreenshotTimestampMs)
@@ -1157,6 +1281,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
     */
     */
    @Override
    @Override
    public IBinder getOverlayWindowToken(int displayId) {
    public IBinder getOverlayWindowToken(int displayId) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getOverlayWindowToken",
                    "displayId=" + displayId);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            return mOverlayWindowTokens.get(displayId);
            return mOverlayWindowTokens.get(displayId);
        }
        }
@@ -1170,6 +1298,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
     */
     */
    @Override
    @Override
    public int getWindowIdForLeashToken(@NonNull IBinder token) {
    public int getWindowIdForLeashToken(@NonNull IBinder token) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getWindowIdForLeashToken",
                    "token=" + token);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            return mA11yWindowManager.getWindowIdLocked(token);
            return mA11yWindowManager.getWindowIdLocked(token);
        }
        }
@@ -1181,6 +1313,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            // Clear the proxy in the other process so this
            // Clear the proxy in the other process so this
            // IAccessibilityServiceConnection can be garbage collected.
            // IAccessibilityServiceConnection can be garbage collected.
            if (mServiceInterface != null) {
            if (mServiceInterface != null) {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".init", "null, " + mId + ", null");
                }
                mServiceInterface.init(null, mId, null);
                mServiceInterface.init(null, mId, null);
            }
            }
        } catch (RemoteException re) {
        } catch (RemoteException re) {
@@ -1329,6 +1464,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        }
        }


        try {
        try {
            if (mTrace.isA11yTracingEnabled()) {
                mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onAccessibilityEvent",
                        event + ";" + serviceWantsEvent);
            }
            listener.onAccessibilityEvent(event, serviceWantsEvent);
            listener.onAccessibilityEvent(event, serviceWantsEvent);
            if (DEBUG) {
            if (DEBUG) {
                Slog.i(LOG_TAG, "Event " + event + " sent to " + listener);
                Slog.i(LOG_TAG, "Event " + event + " sent to " + listener);
@@ -1382,6 +1521,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        if (listener != null) {
        if (listener != null) {
            try {
            try {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onMagnificationChanged", displayId
                            + ", " + region + ", " + scale + ", " + centerX + ", " + centerY);
                }
                listener.onMagnificationChanged(displayId, region, scale, centerX, centerY);
                listener.onMagnificationChanged(displayId, region, scale, centerX, centerY);
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                Slog.e(LOG_TAG, "Error sending magnification changes to " + mService, 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();
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        if (listener != null) {
        if (listener != null) {
            try {
            try {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onSoftKeyboardShowModeChanged",
                            String.valueOf(showState));
                }
                listener.onSoftKeyboardShowModeChanged(showState);
                listener.onSoftKeyboardShowModeChanged(showState);
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                Slog.e(LOG_TAG, "Error sending soft keyboard show mode changes to " + mService,
                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();
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        if (listener != null) {
        if (listener != null) {
            try {
            try {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onAccessibilityButtonClicked",
                            String.valueOf(displayId));
                }
                listener.onAccessibilityButtonClicked(displayId);
                listener.onAccessibilityButtonClicked(displayId);
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                Slog.e(LOG_TAG, "Error sending accessibility button click to " + mService, 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();
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        if (listener != null) {
        if (listener != null) {
            try {
            try {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(
                            TRACE_A11Y_SERVICE_CLIENT + ".onAccessibilityButtonAvailabilityChanged",
                            String.valueOf(available));
                }
                listener.onAccessibilityButtonAvailabilityChanged(available);
                listener.onAccessibilityButtonAvailabilityChanged(available);
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                Slog.e(LOG_TAG,
                Slog.e(LOG_TAG,
@@ -1440,6 +1596,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        if (listener != null) {
        if (listener != null) {
            try {
            try {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onGesture",
                            gestureInfo.toString());
                }
                listener.onGesture(gestureInfo);
                listener.onGesture(gestureInfo);
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                Slog.e(LOG_TAG, "Error during sending gesture " + gestureInfo
                Slog.e(LOG_TAG, "Error during sending gesture " + gestureInfo
@@ -1452,6 +1612,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        if (listener != null) {
        if (listener != null) {
            try {
            try {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onSystemActionsChanged");
                }
                listener.onSystemActionsChanged();
                listener.onSystemActionsChanged();
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                Slog.e(LOG_TAG, "Error sending system actions change to " + mService,
                Slog.e(LOG_TAG, "Error sending system actions change to " + mService,
@@ -1464,6 +1627,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        final IAccessibilityServiceClient listener = getServiceInterfaceSafely();
        if (listener != null) {
        if (listener != null) {
            try {
            try {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".clearAccessibilityCache");
                }
                listener.clearAccessibilityCache();
                listener.clearAccessibilityCache();
            } catch (RemoteException re) {
            } catch (RemoteException re) {
                Slog.e(LOG_TAG, "Error during requesting accessibility info cache"
                Slog.e(LOG_TAG, "Error during requesting accessibility info cache"
@@ -1790,14 +1956,27 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ


    @Override
    @Override
    public void setGestureDetectionPassthroughRegion(int displayId, Region region) {
    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);
        mSystemSupport.setGestureDetectionPassthroughRegion(displayId, region);
    }
    }


    @Override
    @Override
    public void setTouchExplorationPassthroughRegion(int displayId, Region region) {
    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);
        mSystemSupport.setTouchExplorationPassthroughRegion(displayId, region);
    }
    }


    @Override
    @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);
        }
    }
}
}
+207 −4

File changed.

Preview size limit exceeded, changes collapsed.

+40 −2
Original line number Original line Diff line number Diff line
@@ -53,6 +53,10 @@ import java.util.Set;
 */
 */
class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnection {
class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnection {
    private static final String LOG_TAG = "AccessibilityServiceConnection";
    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
     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
     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,
            ComponentName componentName,
            AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler,
            AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler,
            Object lock, AccessibilitySecurityPolicy securityPolicy, SystemSupport systemSupport,
            Object lock, AccessibilitySecurityPolicy securityPolicy, SystemSupport systemSupport,
            WindowManagerInternal windowManagerInternal,
            AccessibilityTrace trace, WindowManagerInternal windowManagerInternal,
            SystemActionPerformer systemActionPerfomer, AccessibilityWindowManager awm,
            SystemActionPerformer systemActionPerfomer, AccessibilityWindowManager awm,
            ActivityTaskManagerInternal activityTaskManagerService) {
            ActivityTaskManagerInternal activityTaskManagerService) {
        super(context, componentName, accessibilityServiceInfo, id, mainHandler, lock,
        super(context, componentName, accessibilityServiceInfo, id, mainHandler, lock,
                securityPolicy, systemSupport, windowManagerInternal, systemActionPerfomer, awm);
                securityPolicy, systemSupport, trace, windowManagerInternal, systemActionPerfomer,
                awm);
        mUserStateWeakReference = new WeakReference<AccessibilityUserState>(userState);
        mUserStateWeakReference = new WeakReference<AccessibilityUserState>(userState);
        mIntent = new Intent().setComponent(mComponentName);
        mIntent = new Intent().setComponent(mComponentName);
        mMainHandler = mainHandler;
        mMainHandler = mainHandler;
@@ -132,6 +137,9 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect


    @Override
    @Override
    public void disableSelf() {
    public void disableSelf() {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".disableSelf");
        }
        synchronized (mLock) {
        synchronized (mLock) {
            AccessibilityUserState userState = mUserStateWeakReference.get();
            AccessibilityUserState userState = mUserStateWeakReference.get();
            if (userState == null) return;
            if (userState == null) return;
@@ -210,6 +218,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
            return;
            return;
        }
        }
        try {
        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));
            serviceInterface.init(this, mId, mOverlayWindowTokens.get(Display.DEFAULT_DISPLAY));
        } catch (RemoteException re) {
        } catch (RemoteException re) {
            Slog.w(LOG_TAG, "Error while setting connection for service: "
            Slog.w(LOG_TAG, "Error while setting connection for service: "
@@ -252,6 +264,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect


    @Override
    @Override
    public boolean setSoftKeyboardShowMode(int showMode) {
    public boolean setSoftKeyboardShowMode(int showMode) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".setSoftKeyboardShowMode",
                    "showMode=" + showMode);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return false;
                return false;
@@ -264,12 +280,19 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect


    @Override
    @Override
    public int getSoftKeyboardShowMode() {
    public int getSoftKeyboardShowMode() {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".getSoftKeyboardShowMode");
        }
        final AccessibilityUserState userState = mUserStateWeakReference.get();
        final AccessibilityUserState userState = mUserStateWeakReference.get();
        return (userState != null) ? userState.getSoftKeyboardShowModeLocked() : 0;
        return (userState != null) ? userState.getSoftKeyboardShowModeLocked() : 0;
    }
    }


    @Override
    @Override
    public boolean switchToInputMethod(String imeId) {
    public boolean switchToInputMethod(String imeId) {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".switchToInputMethod",
                    "imeId=" + imeId);
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return false;
                return false;
@@ -288,6 +311,9 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect


    @Override
    @Override
    public boolean isAccessibilityButtonAvailable() {
    public boolean isAccessibilityButtonAvailable() {
        if (mTrace.isA11yTracingEnabled()) {
            mTrace.logTrace(TRACE_A11Y_SERVICE_CONNECTION + ".isAccessibilityButtonAvailable");
        }
        synchronized (mLock) {
        synchronized (mLock) {
            if (!hasRightsToCurrentUserLocked()) {
            if (!hasRightsToCurrentUserLocked()) {
                return false;
                return false;
@@ -347,6 +373,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
        }
        }
        if (serviceInterface != null) {
        if (serviceInterface != null) {
            try {
            try {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT
                            + ".onFingerprintCapturingGesturesChanged", String.valueOf(active));
                }
                mServiceInterface.onFingerprintCapturingGesturesChanged(active);
                mServiceInterface.onFingerprintCapturingGesturesChanged(active);
            } catch (RemoteException e) {
            } catch (RemoteException e) {
            }
            }
@@ -364,6 +394,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
        }
        }
        if (serviceInterface != null) {
        if (serviceInterface != null) {
            try {
            try {
                if (mTrace.isA11yTracingEnabled()) {
                    mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onFingerprintGesture",
                            String.valueOf(gesture));
                }
                mServiceInterface.onFingerprintGesture(gesture);
                mServiceInterface.onFingerprintGesture(gesture);
            } catch (RemoteException e) {
            } catch (RemoteException e) {
            }
            }
@@ -382,6 +416,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
                            gestureSteps.getList(), mServiceInterface, sequence, displayId);
                            gestureSteps.getList(), mServiceInterface, sequence, displayId);
                } else {
                } else {
                    try {
                    try {
                        if (mTrace.isA11yTracingEnabled()) {
                            mTrace.logTrace(TRACE_A11Y_SERVICE_CLIENT + ".onPerformGestureResult",
                                    sequence + ", false");
                        }
                        mServiceInterface.onPerformGestureResult(sequence, false);
                        mServiceInterface.onPerformGestureResult(sequence, false);
                    } catch (RemoteException re) {
                    } catch (RemoteException re) {
                        Slog.e(LOG_TAG, "Error sending motion event injection failure to "
                        Slog.e(LOG_TAG, "Error sending motion event injection failure to "
+41 −0
Original line number Original line Diff line number Diff line
/**
 * 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);
}
+9 −4

File changed.

Preview size limit exceeded, changes collapsed.

Loading