Loading services/accessibility/accessibility.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -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" Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +18 −1 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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 = Loading Loading @@ -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)) { Loading services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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() { Loading Loading
services/accessibility/accessibility.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -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" Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +18 −1 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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 = Loading Loading @@ -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)) { Loading
services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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() { Loading