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

Commit c59214ff authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "Addressing comments during security review of the interrogation feature."

parents 7b3fd1a5 e8f95352
Loading
Loading
Loading
Loading
+47 −37
Original line number Diff line number Diff line
@@ -436,7 +436,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
    public IAccessibilityServiceConnection registerEventListener(IEventListener listener) {
        mSecurityPolicy.enforceCallingPermission(Manifest.permission.RETRIEVE_WINDOW_CONTENT,
                FUNCTION_REGISTER_EVENT_LISTENER);
        ComponentName componentName = new ComponentName("foo.bar", "FakeAccessibilityService");
        ComponentName componentName = new ComponentName("foo.bar",
                "AutomationAccessibilityService");
        synchronized (mLock) {
            Service oldService = mComponentNameToServiceMap.get(componentName);
            if (oldService != null) {
@@ -829,7 +830,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub

        boolean mCanRetrieveScreenContent;

        boolean mIsFake;
        boolean mIsAutomation;

        final Callback mCallback = new Callback();

@@ -842,12 +843,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            new SparseArray<AccessibilityEvent>();

        public Service(ComponentName componentName,
                AccessibilityServiceInfo accessibilityServiceInfo, boolean isFake) {
                AccessibilityServiceInfo accessibilityServiceInfo, boolean isAutomation) {
            mId = sIdCounter++;
            mComponentName = componentName;
            mAccessibilityServiceInfo = accessibilityServiceInfo;
            mIsFake = isFake;
            if (!isFake) {
            mIsAutomation = isAutomation;
            if (!isAutomation) {
                mCanRetrieveScreenContent = accessibilityServiceInfo.getCanRetrieveWindowContent();
                mIntent = new Intent().setComponent(mComponentName);
                mIntent.putExtra(Intent.EXTRA_CLIENT_LABEL,
@@ -881,7 +882,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
         * @return True if binding is successful.
         */
        public boolean bind() {
            if (!mIsFake && mService == null) {
            if (!mIsAutomation && mService == null) {
                return mContext.bindService(mIntent, this, Context.BIND_AUTO_CREATE);
            }
            return false;
@@ -898,7 +899,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                synchronized (mLock) {
                    tryRemoveServiceLocked(this);
                }
                if (!mIsFake) {
                if (!mIsAutomation) {
                    mContext.unbindService(this);
                }
                mService = null;
@@ -938,16 +939,19 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            IAccessibilityInteractionConnection connection = null;
            synchronized (mLock) {
                final boolean permissionGranted = mSecurityPolicy.canRetrieveWindowContent(this);
                if (permissionGranted) {
                if (!permissionGranted) {
                    return null;
                } else {
                    connection = getConnectionToRetrievalAllowingWindowLocked();
                }
            }
                    if (connection == null) {
                        if (DEBUG) {
                    Slog.e(LOG_TAG, "No interaction connection to a retrieve allowing window.");
                            Slog.e(LOG_TAG, "No interaction connection to a retrieve "
                                    + "allowing window.");
                        }
                        return null;
                    }
                }
            }
            final long identityToken = Binder.clearCallingIdentity();
            try {
                final int interactionId = mInteractionIdCounter.getAndIncrement();
@@ -982,16 +986,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            synchronized (mLock) {
                final boolean permissionGranted =
                    mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, accessibilityWindowId);
                if (permissionGranted) {
                if (!permissionGranted) {
                    return null;
                } else {
                    connection = getConnectionToRetrievalAllowingWindowLocked();
                }
            }
                    if (connection == null) {
                        if (DEBUG) {
                            Slog.e(LOG_TAG, "No interaction connection to focused window.");
                        }
                        return null;
                    }
                }
            }
            final long identityToken = Binder.clearCallingIdentity();
            try {
                final int interactionId = mInteractionIdCounter.getAndIncrement();
@@ -1025,10 +1031,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            synchronized (mLock) {
                final boolean permissionGranted =
                    mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, accessibilityWindowId);
                if (permissionGranted) {
                if (!permissionGranted) {
                    return null;
                } else {
                    connection = mWindowIdToInteractionConnectionMap.get(accessibilityWindowId);
                }
            }
                    if (connection == null) {
                        if (DEBUG) {
                            Slog.e(LOG_TAG, "No interaction connection to window: "
@@ -1036,6 +1042,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                        }
                        return null;
                    }
                }
            }
            final long identityToken = Binder.clearCallingIdentity();
            try {
                final int interactionId = mInteractionIdCounter.getAndIncrement();
@@ -1066,10 +1074,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            synchronized (mLock) {
                final boolean permissionGranted = mSecurityPolicy.canPerformActionLocked(this,
                        accessibilityWindowId, action);
                if (permissionGranted) {
                if (!permissionGranted) {
                    return false;
                } else {
                    connection = mWindowIdToInteractionConnectionMap.get(accessibilityWindowId);
                }
            }
                    if (connection == null) {
                        if (DEBUG) {
                            Slog.e(LOG_TAG, "No interaction connection to window: "
@@ -1077,6 +1085,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                        }
                        return false;
                    }
                }
            }
            final long identityToken = Binder.clearCallingIdentity();
            try {
                final int interactionId = mInteractionIdCounter.getAndIncrement();