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

Commit b94f8577 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

DO NOT MERGE Allow app switches for accessibility services am: a5b6b37c

Change-Id: I6a257f43dfa944ab38b7ea683b03b99066c95cea
parents d3796eca a5b6b37c
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -215,6 +215,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub

    private final AppOpsManager mAppOpsManager;

    private final ActivityTaskManagerInternal mActivityTaskManagerService;

    private final MainHandler mMainHandler;

    private final GlobalActionPerformer mGlobalActionPerformer;
@@ -306,6 +308,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        mMainHandler = new MainHandler(mContext.getMainLooper());
        mGlobalActionPerformer = new GlobalActionPerformer(mContext, mWindowManagerService);
        mA11yDisplayListener = new AccessibilityDisplayListener(mContext, mMainHandler);
        mActivityTaskManagerService = LocalServices.getService(ActivityTaskManagerInternal.class);

        registerBroadcastReceivers();
        new AccessibilityContentObserver(mMainHandler).register(
@@ -1633,7 +1636,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                if (service == null) {
                    service = new AccessibilityServiceConnection(userState, mContext, componentName,
                            installedService, sIdCounter++, mMainHandler, mLock, mSecurityPolicy,
                            this, mWindowManagerService, mGlobalActionPerformer);
                            this, mWindowManagerService, mGlobalActionPerformer,
                            mActivityTaskManagerService);
                } else if (userState.mBoundServices.contains(service)) {
                    continue;
                }
@@ -3026,7 +3030,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                    userState, mContext,
                    COMPONENT_NAME, info, sIdCounter++, mMainHandler, mLock, mSecurityPolicy,
                    AccessibilityManagerService.this, mWindowManagerService,
                    mGlobalActionPerformer) {
                    mGlobalActionPerformer, mActivityTaskManagerService) {
                @Override
                public boolean supportsFlagForNotImportantViews(AccessibilityServiceInfo info) {
                    return true;
+17 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.util.Slog;

import com.android.server.accessibility.AccessibilityManagerService.SecurityPolicy;
import com.android.server.accessibility.AccessibilityManagerService.UserState;
import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.WindowManagerInternal;

import java.lang.ref.WeakReference;
@@ -58,6 +59,7 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
    */
    final WeakReference<UserState> mUserStateWeakReference;
    final Intent mIntent;
    final ActivityTaskManagerInternal mActivityTaskManagerService;

    private final Handler mMainHandler;

@@ -69,7 +71,8 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
            AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler,
            Object lock, SecurityPolicy securityPolicy, SystemSupport systemSupport,
            WindowManagerInternal windowManagerInternal,
            GlobalActionPerformer globalActionPerfomer) {
            GlobalActionPerformer globalActionPerfomer,
            ActivityTaskManagerInternal activityTaskManagerService) {
        super(context, componentName, accessibilityServiceInfo, id, mainHandler, lock,
                securityPolicy, systemSupport, windowManagerInternal, globalActionPerfomer);
        mUserStateWeakReference = new WeakReference<UserState>(userState);
@@ -77,6 +80,7 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
        mMainHandler = mainHandler;
        mIntent.putExtra(Intent.EXTRA_CLIENT_LABEL,
                com.android.internal.R.string.accessibility_binding_label);
        mActivityTaskManagerService = activityTaskManagerService;
        final long identity = Binder.clearCallingIdentity();
        try {
            mIntent.putExtra(Intent.EXTRA_CLIENT_INTENT, mSystemSupport.getPendingIntentActivity(
@@ -103,6 +107,9 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
        mActivityTaskManagerService.setAllowAppSwitches(mComponentName.flattenToString(),
                mAccessibilityServiceInfo.getResolveInfo().serviceInfo.applicationInfo.uid,
                userState.mUserId);
    }

    public void unbindLocked() {
@@ -111,6 +118,9 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
        if (userState == null) return;
        userState.removeServiceLocked(this);
        mSystemSupport.getMagnificationController().resetAllIfNeeded(mId);
        // Set uid to -1 to clear allowing app switches.
        mActivityTaskManagerService.setAllowAppSwitches(mComponentName.flattenToString(),
                /* uid= */ -1, userState.mUserId);
        resetLocked();
    }

@@ -208,6 +218,12 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect
    @Override
    public void onServiceDisconnected(ComponentName componentName) {
        binderDied();
        UserState userState = mUserStateWeakReference.get();
        if (userState != null) {
            // Set uid to -1 to clear allowing app switches.
            mActivityTaskManagerService.setAllowAppSwitches(mComponentName.flattenToString(),
                    /* uid= */ -1, userState.mUserId);
        }
    }

    @Override
+4 −1
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.os.UserHandle;

import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.WindowManagerInternal;

import org.junit.After;
@@ -67,6 +68,7 @@ public class AccessibilityServiceConnectionTest {
    @Mock AccessibilityServiceInfo mMockServiceInfo;
    @Mock ResolveInfo mMockResolveInfo;
    @Mock AccessibilityManagerService.SecurityPolicy mMockSecurityPolicy;
    @Mock ActivityTaskManagerInternal mMockActivityTaskManagerInternal;
    @Mock AbstractAccessibilityServiceConnection.SystemSupport mMockSystemSupport;
    @Mock WindowManagerInternal mMockWindowManagerInternal;
    @Mock GlobalActionPerformer mMockGlobalActionPerformer;
@@ -89,7 +91,8 @@ public class AccessibilityServiceConnectionTest {
        mConnection = new AccessibilityServiceConnection(mMockUserState, mMockContext,
                COMPONENT_NAME, mMockServiceInfo, SERVICE_ID, mHandler, new Object(),
                mMockSecurityPolicy, mMockSystemSupport, mMockWindowManagerInternal,
                mMockGlobalActionPerformer);
                mMockGlobalActionPerformer, mMockActivityTaskManagerInternal);
        when(mMockSecurityPolicy.canPerformGestures(mConnection)).thenReturn(true);
    }

    @After