Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +18 −2 Original line number Diff line number Diff line Loading @@ -518,6 +518,14 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mService.onBootPhase(phase); } @Override public void onUserStarting(@androidx.annotation.NonNull TargetUser user) { super.onUserStarting(user); if (Flags.managerLifecycleUserChange()) { mService.switchUser(user.getUserIdentifier()); } } @Override public void onUserSwitching(@androidx.annotation.Nullable TargetUser from, @androidx.annotation.NonNull TargetUser to) { Loading Loading @@ -2124,14 +2132,22 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mMagnificationController.updateUserIdIfNeeded(userId); List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos = null; List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos = null; parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); synchronized (mLock) { if (Flags.managerLifecycleUserChange()) { userId = mSecurityPolicy.resolveProfileParentLocked(userId); } if (mCurrentUserId == userId && mInitialized) { Slog.w(LOG_TAG, String.format("userId: %d is already initialized", userId)); return; } } // parse outside of a lock, but after verifying userId parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); synchronized (mLock) { // Disconnect from services for the old user. AccessibilityUserState oldUserState = getCurrentUserStateLocked(); oldUserState.onSwitchToAnotherUserLocked(); Loading services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +20 −1 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -2083,8 +2084,9 @@ public class AccessibilityManagerServiceTest { @Test public void switchUser_callsUserInitializationCompleteCallback() throws RemoteException { mA11yms.mUserInitializationCompleteCallbacks.add(mUserInitializationCompleteCallback); int newUserId = mA11yms.getCurrentUserIdLocked() + 1; when(mMockSecurityPolicy.resolveProfileParentLocked(anyInt())).thenReturn(newUserId); mA11yms.switchUser(newUserId); mTestableLooper.processAllMessages(); Loading @@ -2098,6 +2100,7 @@ public class AccessibilityManagerServiceTest { AccessibilityManagerService.Lifecycle lifecycle = new AccessibilityManagerService.Lifecycle(mTestableContext, mA11yms); int newUserId = mA11yms.getCurrentUserIdLocked() + 1; when(mMockSecurityPolicy.resolveProfileParentLocked(anyInt())).thenReturn(newUserId); lifecycle.onUserSwitching( new SystemService.TargetUser(new UserInfo(0, "USER", 0)), Loading @@ -2107,6 +2110,21 @@ public class AccessibilityManagerServiceTest { verify(mUserInitializationCompleteCallback).onUserInitializationComplete(newUserId); } @Test @EnableFlags(Flags.FLAG_MANAGER_LIFECYCLE_USER_CHANGE) public void switchUser_sameParent_noChange() throws RemoteException { mA11yms.mUserInitializationCompleteCallbacks.add(mUserInitializationCompleteCallback); int newUserId = mA11yms.getCurrentUserIdLocked() + 1; when(mMockSecurityPolicy.resolveProfileParentLocked(anyInt())).thenReturn( mA11yms.getCurrentUserIdLocked()); mA11yms.switchUser(newUserId); mTestableLooper.processAllMessages(); verify(mUserInitializationCompleteCallback, never()) .onUserInitializationComplete(newUserId); } @Test @DisableFlags(Flags.FLAG_MANAGER_LIFECYCLE_USER_CHANGE) public void intent_user_switched_switchesUser() throws RemoteException { Loading @@ -2114,6 +2132,7 @@ public class AccessibilityManagerServiceTest { int newUserId = mA11yms.getCurrentUserIdLocked() + 1; final Intent intent = new Intent(Intent.ACTION_USER_SWITCHED); intent.putExtra(Intent.EXTRA_USER_HANDLE, newUserId); when(mMockSecurityPolicy.resolveProfileParentLocked(anyInt())).thenReturn(newUserId); sendBroadcastToAccessibilityManagerService(intent, mA11yms.getCurrentUserIdLocked()); mTestableLooper.processAllMessages(); Loading Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +18 −2 Original line number Diff line number Diff line Loading @@ -518,6 +518,14 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mService.onBootPhase(phase); } @Override public void onUserStarting(@androidx.annotation.NonNull TargetUser user) { super.onUserStarting(user); if (Flags.managerLifecycleUserChange()) { mService.switchUser(user.getUserIdentifier()); } } @Override public void onUserSwitching(@androidx.annotation.Nullable TargetUser from, @androidx.annotation.NonNull TargetUser to) { Loading Loading @@ -2124,14 +2132,22 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mMagnificationController.updateUserIdIfNeeded(userId); List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos = null; List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos = null; parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); synchronized (mLock) { if (Flags.managerLifecycleUserChange()) { userId = mSecurityPolicy.resolveProfileParentLocked(userId); } if (mCurrentUserId == userId && mInitialized) { Slog.w(LOG_TAG, String.format("userId: %d is already initialized", userId)); return; } } // parse outside of a lock, but after verifying userId parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); synchronized (mLock) { // Disconnect from services for the old user. AccessibilityUserState oldUserState = getCurrentUserStateLocked(); oldUserState.onSwitchToAnotherUserLocked(); Loading
services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +20 −1 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -2083,8 +2084,9 @@ public class AccessibilityManagerServiceTest { @Test public void switchUser_callsUserInitializationCompleteCallback() throws RemoteException { mA11yms.mUserInitializationCompleteCallbacks.add(mUserInitializationCompleteCallback); int newUserId = mA11yms.getCurrentUserIdLocked() + 1; when(mMockSecurityPolicy.resolveProfileParentLocked(anyInt())).thenReturn(newUserId); mA11yms.switchUser(newUserId); mTestableLooper.processAllMessages(); Loading @@ -2098,6 +2100,7 @@ public class AccessibilityManagerServiceTest { AccessibilityManagerService.Lifecycle lifecycle = new AccessibilityManagerService.Lifecycle(mTestableContext, mA11yms); int newUserId = mA11yms.getCurrentUserIdLocked() + 1; when(mMockSecurityPolicy.resolveProfileParentLocked(anyInt())).thenReturn(newUserId); lifecycle.onUserSwitching( new SystemService.TargetUser(new UserInfo(0, "USER", 0)), Loading @@ -2107,6 +2110,21 @@ public class AccessibilityManagerServiceTest { verify(mUserInitializationCompleteCallback).onUserInitializationComplete(newUserId); } @Test @EnableFlags(Flags.FLAG_MANAGER_LIFECYCLE_USER_CHANGE) public void switchUser_sameParent_noChange() throws RemoteException { mA11yms.mUserInitializationCompleteCallbacks.add(mUserInitializationCompleteCallback); int newUserId = mA11yms.getCurrentUserIdLocked() + 1; when(mMockSecurityPolicy.resolveProfileParentLocked(anyInt())).thenReturn( mA11yms.getCurrentUserIdLocked()); mA11yms.switchUser(newUserId); mTestableLooper.processAllMessages(); verify(mUserInitializationCompleteCallback, never()) .onUserInitializationComplete(newUserId); } @Test @DisableFlags(Flags.FLAG_MANAGER_LIFECYCLE_USER_CHANGE) public void intent_user_switched_switchesUser() throws RemoteException { Loading @@ -2114,6 +2132,7 @@ public class AccessibilityManagerServiceTest { int newUserId = mA11yms.getCurrentUserIdLocked() + 1; final Intent intent = new Intent(Intent.ACTION_USER_SWITCHED); intent.putExtra(Intent.EXTRA_USER_HANDLE, newUserId); when(mMockSecurityPolicy.resolveProfileParentLocked(anyInt())).thenReturn(newUserId); sendBroadcastToAccessibilityManagerService(intent, mA11yms.getCurrentUserIdLocked()); mTestableLooper.processAllMessages(); Loading