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

Commit 749cf65a authored by Riley Jones's avatar Riley Jones Committed by Android (Google) Code Review
Browse files

Merge "Changing A11yManagerService to respond to user switching from Lifecycle...

Merge "Changing A11yManagerService to respond to user switching from Lifecycle instead of Intents." into main
parents c9ed17d4 2dfa5c67
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -222,6 +222,16 @@ flag {
    }
}

flag {
    name: "manager_lifecycle_user_change"
    namespace: "accessibility"
    description: "Use A11yManagerService's Lifecycle to change users, instead of listening for user changed events."
    bug: "393626471"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "motion_event_injector_cancel_fix"
    namespace: "accessibility"
+18 −1
Original line number Diff line number Diff line
@@ -500,6 +500,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            mService = new AccessibilityManagerService(context);
        }

        @VisibleForTesting
        public Lifecycle(Context context, AccessibilityManagerService service) {
            super(context);
            mService = service;
        }

        @Override
        public void onStart() {
            LocalServices.addService(AccessibilityManagerInternal.class,
@@ -511,6 +517,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        public void onBootPhase(int phase) {
            mService.onBootPhase(phase);
        }

        @Override
        public void onUserSwitching(@androidx.annotation.Nullable TargetUser from,
                @androidx.annotation.NonNull TargetUser to) {
            super.onUserSwitching(from, to);
            if (Flags.managerLifecycleUserChange()) {
                mService.switchUser(to.getUserIdentifier());
            }
        }
    }

    private InputManager.KeyGestureEventHandler mKeyGestureEventHandler =
@@ -1055,7 +1070,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub

                String action = intent.getAction();
                if (Intent.ACTION_USER_SWITCHED.equals(action)) {
                    if (!Flags.managerLifecycleUserChange()) {
                        switchUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
                    }
                } else if (Intent.ACTION_USER_UNLOCKED.equals(action)) {
                    unlockUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
                } else if (Intent.ACTION_USER_REMOVED.equals(action)) {
+32 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Icon;
import android.hardware.display.DisplayManager;
@@ -131,6 +132,7 @@ import com.android.internal.accessibility.util.ShortcutUtils;
import com.android.internal.compat.IPlatformCompat;
import com.android.internal.content.PackageMonitor;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.accessibility.AccessibilityManagerService.AccessibilityDisplayListener;
import com.android.server.accessibility.magnification.FullScreenMagnificationController;
import com.android.server.accessibility.magnification.MagnificationConnectionManager;
@@ -2121,6 +2123,36 @@ public class AccessibilityManagerServiceTest {
        verify(mUserInitializationCompleteCallback).onUserInitializationComplete(newUserId);
    }

    @Test
    @EnableFlags(Flags.FLAG_MANAGER_LIFECYCLE_USER_CHANGE)
    public void lifecycle_onUserSwitching_switchesUser() throws RemoteException {
        mA11yms.mUserInitializationCompleteCallbacks.add(mUserInitializationCompleteCallback);
        AccessibilityManagerService.Lifecycle lifecycle =
                new AccessibilityManagerService.Lifecycle(mTestableContext, mA11yms);
        int newUserId = mA11yms.getCurrentUserIdLocked() + 1;

        lifecycle.onUserSwitching(
                new SystemService.TargetUser(new UserInfo(0, "USER", 0)),
                new SystemService.TargetUser(new UserInfo(newUserId, "USER", 0)));
        mTestableLooper.processAllMessages();

        verify(mUserInitializationCompleteCallback).onUserInitializationComplete(newUserId);
    }

    @Test
    @DisableFlags(Flags.FLAG_MANAGER_LIFECYCLE_USER_CHANGE)
    public void intent_user_switched_switchesUser() throws RemoteException {
        mA11yms.mUserInitializationCompleteCallbacks.add(mUserInitializationCompleteCallback);
        int newUserId = mA11yms.getCurrentUserIdLocked() + 1;
        final Intent intent = new Intent(Intent.ACTION_USER_SWITCHED);
        intent.putExtra(Intent.EXTRA_USER_HANDLE, newUserId);

        sendBroadcastToAccessibilityManagerService(intent, mA11yms.getCurrentUserIdLocked());
        mTestableLooper.processAllMessages();

        verify(mUserInitializationCompleteCallback).onUserInitializationComplete(newUserId);
    }

    @Test
    @DisableFlags(android.provider.Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
    public void getShortcutTypeForGenericShortcutCalls_softwareType() {