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

Commit 06a5b97f authored by Hongming Jin's avatar Hongming Jin Committed by Android (Google) Code Review
Browse files

Merge "Add trace for AccessibilityInteractionClient callback interfaces." into sc-dev

parents cedb4722 c49cac73
Loading
Loading
Loading
Loading
+42 −39
Original line number Diff line number Diff line
@@ -886,7 +886,7 @@ public abstract class AccessibilityService extends Service {
     *         them, otherwise an empty list.
     */
    public List<AccessibilityWindowInfo> getWindows() {
        return AccessibilityInteractionClient.getInstance().getWindows(mConnectionId);
        return AccessibilityInteractionClient.getInstance(this).getWindows(mConnectionId);
    }

    /**
@@ -914,7 +914,8 @@ public abstract class AccessibilityService extends Service {
     */
    @NonNull
    public final SparseArray<List<AccessibilityWindowInfo>> getWindowsOnAllDisplays() {
        return AccessibilityInteractionClient.getInstance().getWindowsOnAllDisplays(mConnectionId);
        return AccessibilityInteractionClient.getInstance(this).getWindowsOnAllDisplays(
                mConnectionId);
    }

    /**
@@ -940,7 +941,8 @@ public abstract class AccessibilityService extends Service {
     * @return The root node if this service can retrieve window content.
     */
    public AccessibilityNodeInfo getRootInActiveWindow() {
        return AccessibilityInteractionClient.getInstance().getRootInActiveWindow(mConnectionId);
        return AccessibilityInteractionClient.getInstance(this).getRootInActiveWindow(
                mConnectionId);
    }

    /**
@@ -949,7 +951,7 @@ public abstract class AccessibilityService extends Service {
     */
    public final void disableSelf() {
        final IAccessibilityServiceConnection connection =
                AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (connection != null) {
            try {
                connection.disableSelf();
@@ -970,7 +972,7 @@ public abstract class AccessibilityService extends Service {
    private void setDefaultTokenInternal(Context context, int displayId) {
        final WindowManagerImpl wm = (WindowManagerImpl) context.getSystemService(WINDOW_SERVICE);
        final IAccessibilityServiceConnection connection =
                AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        IBinder token = null;
        if (connection != null) {
            synchronized (mLock) {
@@ -1042,7 +1044,7 @@ public abstract class AccessibilityService extends Service {
    public final @NonNull FingerprintGestureController getFingerprintGestureController() {
        if (mFingerprintGestureController == null) {
            mFingerprintGestureController = new FingerprintGestureController(
                    AccessibilityInteractionClient.getInstance().getConnection(mConnectionId));
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId));
        }
        return mFingerprintGestureController;
    }
@@ -1074,8 +1076,7 @@ public abstract class AccessibilityService extends Service {
            @Nullable GestureResultCallback callback,
            @Nullable Handler handler) {
        final IAccessibilityServiceConnection connection =
                AccessibilityInteractionClient.getInstance().getConnection(
                        mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (connection == null) {
            return false;
        }
@@ -1287,7 +1288,7 @@ public abstract class AccessibilityService extends Service {

        private void setMagnificationCallbackEnabled(boolean enabled) {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1348,7 +1349,7 @@ public abstract class AccessibilityService extends Service {
         */
        public float getScale() {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1377,7 +1378,7 @@ public abstract class AccessibilityService extends Service {
         */
        public float getCenterX() {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1406,7 +1407,7 @@ public abstract class AccessibilityService extends Service {
         */
        public float getCenterY() {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1440,7 +1441,7 @@ public abstract class AccessibilityService extends Service {
        @NonNull
        public Region getMagnificationRegion() {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1469,7 +1470,7 @@ public abstract class AccessibilityService extends Service {
         */
        public boolean reset(boolean animate) {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1497,7 +1498,7 @@ public abstract class AccessibilityService extends Service {
         */
        public boolean setScale(float scale, boolean animate) {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1529,7 +1530,7 @@ public abstract class AccessibilityService extends Service {
         */
        public boolean setCenter(float centerX, float centerY, boolean animate) {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1701,7 +1702,7 @@ public abstract class AccessibilityService extends Service {

        private void setSoftKeyboardCallbackEnabled(boolean enabled) {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1760,7 +1761,7 @@ public abstract class AccessibilityService extends Service {
        @SoftKeyboardShowMode
        public int getShowMode() {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1789,7 +1790,7 @@ public abstract class AccessibilityService extends Service {
         */
        public boolean setShowMode(@SoftKeyboardShowMode int showMode) {
           final IAccessibilityServiceConnection connection =
                   AccessibilityInteractionClient.getInstance().getConnection(
                   AccessibilityInteractionClient.getInstance(mService).getConnection(
                           mService.mConnectionId);
           if (connection != null) {
               try {
@@ -1835,7 +1836,7 @@ public abstract class AccessibilityService extends Service {
         */
        public boolean switchToInputMethod(@NonNull String imeId) {
            final IAccessibilityServiceConnection connection =
                    AccessibilityInteractionClient.getInstance().getConnection(
                    AccessibilityInteractionClient.getInstance(mService).getConnection(
                            mService.mConnectionId);
            if (connection != null) {
                try {
@@ -1888,7 +1889,7 @@ public abstract class AccessibilityService extends Service {
                    displayId);
            if (controller == null) {
                controller = new AccessibilityButtonController(
                        AccessibilityInteractionClient.getInstance().getConnection(mConnectionId));
                    AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId));
                mAccessibilityButtonControllers.put(displayId, controller);
            }
            return controller;
@@ -1922,7 +1923,7 @@ public abstract class AccessibilityService extends Service {
     */
    public final @NonNull List<AccessibilityAction> getSystemActions() {
        IAccessibilityServiceConnection connection =
                AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (connection != null) {
            try {
                return connection.getSystemActions();
@@ -1955,7 +1956,7 @@ public abstract class AccessibilityService extends Service {
     */
    public final boolean performGlobalAction(int action) {
        IAccessibilityServiceConnection connection =
            AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (connection != null) {
            try {
                return connection.performGlobalAction(action);
@@ -1996,7 +1997,7 @@ public abstract class AccessibilityService extends Service {
     * @see AccessibilityNodeInfo#FOCUS_ACCESSIBILITY
     */
    public AccessibilityNodeInfo findFocus(int focus) {
        return AccessibilityInteractionClient.getInstance().findFocus(mConnectionId,
        return AccessibilityInteractionClient.getInstance(this).findFocus(mConnectionId,
                AccessibilityWindowInfo.ANY_WINDOW_ID, AccessibilityNodeInfo.ROOT_NODE_ID, focus);
    }

@@ -2012,7 +2013,7 @@ public abstract class AccessibilityService extends Service {
     */
    public final AccessibilityServiceInfo getServiceInfo() {
        IAccessibilityServiceConnection connection =
            AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (connection != null) {
            try {
                return connection.getServiceInfo();
@@ -2044,12 +2045,12 @@ public abstract class AccessibilityService extends Service {
     */
    private void sendServiceInfo() {
        IAccessibilityServiceConnection connection =
            AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (mInfo != null && connection != null) {
            try {
                connection.setServiceInfo(mInfo);
                mInfo = null;
                AccessibilityInteractionClient.getInstance().clearCache();
                AccessibilityInteractionClient.getInstance(this).clearCache();
            } catch (RemoteException re) {
                Log.w(LOG_TAG, "Error while setting AccessibilityServiceInfo", re);
                re.rethrowFromSystemServer();
@@ -2096,8 +2097,7 @@ public abstract class AccessibilityService extends Service {
        Preconditions.checkNotNull(executor, "executor cannot be null");
        Preconditions.checkNotNull(callback, "callback cannot be null");
        final IAccessibilityServiceConnection connection =
                AccessibilityInteractionClient.getInstance().getConnection(
                        mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (connection == null) {
            sendScreenshotFailure(ERROR_TAKE_SCREENSHOT_INTERNAL_ERROR, executor, callback);
            return;
@@ -2136,7 +2136,7 @@ public abstract class AccessibilityService extends Service {
     */
    public void setAccessibilityFocusAppearance(int strokeWidth, @ColorInt int color) {
        IAccessibilityServiceConnection connection =
                AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (connection != null) {
            try {
                connection.setFocusAppearance(strokeWidth, color);
@@ -2261,12 +2261,14 @@ public abstract class AccessibilityService extends Service {
        private final HandlerCaller mCaller;

        private final Callbacks mCallback;
        private final Context mContext;

        private int mConnectionId = AccessibilityInteractionClient.NO_ID;

        public IAccessibilityServiceClientWrapper(Context context, Looper looper,
                Callbacks callback) {
            mCallback = callback;
            mContext = context;
            mCaller = new HandlerCaller(context, looper, this, true /*asyncHandler*/);
        }

@@ -2366,7 +2368,8 @@ public abstract class AccessibilityService extends Service {
                    boolean serviceWantsEvent = message.arg1 != 0;
                    if (event != null) {
                        // Send the event to AccessibilityCache via AccessibilityInteractionClient
                        AccessibilityInteractionClient.getInstance().onAccessibilityEvent(event);
                        AccessibilityInteractionClient.getInstance(mContext).onAccessibilityEvent(
                                event);
                        if (serviceWantsEvent
                                && (mConnectionId != AccessibilityInteractionClient.NO_ID)) {
                            // Send the event to AccessibilityService
@@ -2395,15 +2398,15 @@ public abstract class AccessibilityService extends Service {
                    IBinder windowToken = (IBinder) args.arg2;
                    args.recycle();
                    if (connection != null) {
                        AccessibilityInteractionClient.getInstance().addConnection(mConnectionId,
                                connection);
                        AccessibilityInteractionClient.getInstance(mContext).addConnection(
                                mConnectionId, connection);
                        mCallback.init(mConnectionId, windowToken);
                        mCallback.onServiceConnected();
                    } else {
                        AccessibilityInteractionClient.getInstance().removeConnection(
                        AccessibilityInteractionClient.getInstance(mContext).removeConnection(
                                mConnectionId);
                        mConnectionId = AccessibilityInteractionClient.NO_ID;
                        AccessibilityInteractionClient.getInstance().clearCache();
                        AccessibilityInteractionClient.getInstance(mContext).clearCache();
                        mCallback.init(AccessibilityInteractionClient.NO_ID, null);
                    }
                    return;
@@ -2415,14 +2418,14 @@ public abstract class AccessibilityService extends Service {
                    return;
                }
                case DO_CLEAR_ACCESSIBILITY_CACHE: {
                    AccessibilityInteractionClient.getInstance().clearCache();
                    AccessibilityInteractionClient.getInstance(mContext).clearCache();
                    return;
                }
                case DO_ON_KEY_EVENT: {
                    KeyEvent event = (KeyEvent) message.obj;
                    try {
                        IAccessibilityServiceConnection connection = AccessibilityInteractionClient
                                .getInstance().getConnection(mConnectionId);
                                .getInstance(mContext).getConnection(mConnectionId);
                        if (connection != null) {
                            final boolean result = mCallback.onKeyEvent(event);
                            final int sequence = message.arg1;
@@ -2637,7 +2640,7 @@ public abstract class AccessibilityService extends Service {
    public void setGestureDetectionPassthroughRegion(int displayId, @NonNull Region region) {
        Preconditions.checkNotNull(region, "region cannot be null");
        final IAccessibilityServiceConnection connection =
                AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (connection != null) {
            try {
                connection.setGestureDetectionPassthroughRegion(displayId, region);
@@ -2663,7 +2666,7 @@ public abstract class AccessibilityService extends Service {
    public void setTouchExplorationPassthroughRegion(int displayId, @NonNull Region region) {
        Preconditions.checkNotNull(region, "region cannot be null");
        final IAccessibilityServiceConnection connection =
                AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
                AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
        if (connection != null) {
            try {
                connection.setTouchExplorationPassthroughRegion(displayId, region);
+3 −0
Original line number Diff line number Diff line
@@ -117,4 +117,7 @@ interface IAccessibilityServiceConnection {
    void setTouchExplorationPassthroughRegion(int displayId, in Region region);

    void setFocusAppearance(int strokeWidth, int color);

    oneway void logTrace(long timestamp, String where, String callingParams, int processId,
        long threadId, int callingUid, in Bundle serializedCallingStackInBundle);
}
+112 −1

File changed.

Preview size limit exceeded, changes collapsed.

+30 −0
Original line number Diff line number Diff line
@@ -110,6 +110,9 @@ public final class AccessibilityManager {
    /** @hide */
    public static final int STATE_FLAG_REQUEST_MULTI_FINGER_GESTURES = 0x00000010;

    /** @hide */
    public static final int STATE_FLAG_ACCESSIBILITY_TRACING_ENABLED = 0x00000020;

    /** @hide */
    public static final int DALTONIZER_DISABLED = -1;

@@ -232,6 +235,9 @@ public final class AccessibilityManager {
    @UnsupportedAppUsage(trackingBug = 123768939L)
    boolean mIsHighTextContrastEnabled;

    // Whether accessibility tracing is enabled or not
    boolean mIsAccessibilityTracingEnabled = false;

    AccessibilityPolicy mAccessibilityPolicy;

    private int mPerformingAction = 0;
@@ -1003,6 +1009,17 @@ public final class AccessibilityManager {
        }
    }

    /**
     * Gets accessibility tracing enabled state.
     *
     * @hide
     */
    public boolean isAccessibilityTracingEnabled() {
        synchronized (mLock) {
            return mIsAccessibilityTracingEnabled;
        }
    }

    /**
     * Get the preparers that are registered for an accessibility ID
     *
@@ -1197,6 +1214,8 @@ public final class AccessibilityManager {
                (stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0;
        final boolean highTextContrastEnabled =
                (stateFlags & STATE_FLAG_HIGH_TEXT_CONTRAST_ENABLED) != 0;
        final boolean accessibilityTracingEnabled =
                (stateFlags & STATE_FLAG_ACCESSIBILITY_TRACING_ENABLED) != 0;

        final boolean wasEnabled = isEnabled();
        final boolean wasTouchExplorationEnabled = mIsTouchExplorationEnabled;
@@ -1218,6 +1237,8 @@ public final class AccessibilityManager {
        if (wasHighTextContrastEnabled != highTextContrastEnabled) {
            notifyHighTextContrastStateChanged();
        }

        updateAccessibilityTracingState(accessibilityTracingEnabled);
    }

    /**
@@ -1674,6 +1695,15 @@ public final class AccessibilityManager {
        }
    }

    /**
     * Update mIsAccessibilityTracingEnabled.
     */
    private void updateAccessibilityTracingState(boolean enabled) {
        synchronized (mLock) {
            mIsAccessibilityTracingEnabled = enabled;
        }
    }

    /**
     * Update interactive and non-interactive UI timeout.
     *
+3 −0
Original line number Diff line number Diff line
@@ -163,4 +163,7 @@ public class AccessibilityServiceConnectionImpl extends IAccessibilityServiceCon
    public void setGestureDetectionPassthroughRegion(int displayId, Region region) {}

    public void setFocusAppearance(int strokeWidth, int color) {}

    public void logTrace(long timestamp, String where, String callingParams, int processId,
            long threadId, int callingUid, Bundle callingStack) {}
}
Loading