Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +12 −77 Original line number Diff line number Diff line Loading @@ -715,16 +715,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } private void onSomePackagesChangedLocked() { final AccessibilityUserState userState = getCurrentUserStateLocked(); // Reload the installed services since some services may have different attributes // or resolve info (does not support equals), etc. Remove them then to force reload. userState.mInstalledServices.clear(); if (readConfigurationForUserStateLocked(userState)) { onUserStateChangedLocked(userState); } } private void onSomePackagesChangedLocked( @Nullable List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos, @Nullable List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos) { Loading Loading @@ -842,22 +832,16 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final int userId = getChangingUserId(); List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos = null; List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos = null; if (Flags.scanPackagesWithoutLock()) { parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); } synchronized (mLock) { // Only the profile parent can install accessibility services. // Therefore we ignore packages from linked profiles. if (userId != mCurrentUserId) { return; } if (Flags.scanPackagesWithoutLock()) { onSomePackagesChangedLocked(parsedAccessibilityServiceInfos, parsedAccessibilityShortcutInfos); } else { onSomePackagesChangedLocked(); } } } Loading @@ -875,10 +859,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final int userId = getChangingUserId(); List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos = null; List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos = null; if (Flags.scanPackagesWithoutLock()) { parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); } synchronized (mLock) { if (userId != mCurrentUserId) { return; Loading @@ -893,12 +875,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // get a new one. userState.mInstalledServices.clear(); final boolean configurationChanged; if (Flags.scanPackagesWithoutLock()) { configurationChanged = readConfigurationForUserStateLocked(userState, parsedAccessibilityServiceInfos, parsedAccessibilityShortcutInfos); } else { configurationChanged = readConfigurationForUserStateLocked(userState); } if (reboundAService || configurationChanged) { onUserStateChangedLocked(userState); } Loading Loading @@ -993,34 +971,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // package changes mPackageMonitor.register(mContext, null, UserHandle.ALL, true); if (!Flags.deprecatePackageListObserver()) { final PackageManagerInternal pm = LocalServices.getService( PackageManagerInternal.class); if (pm != null) { pm.getPackageList(new PackageManagerInternal.PackageListObserver() { @Override public void onPackageAdded(String packageName, int uid) { final int userId = UserHandle.getUserId(uid); synchronized (mLock) { if (userId == mCurrentUserId) { onSomePackagesChangedLocked(); } } } @Override public void onPackageRemoved(String packageName, int uid) { final int userId = UserHandle.getUserId(uid); synchronized (mLock) { if (userId == mCurrentUserId) { onPackageRemovedLocked(packageName); } } } }); } } // user change and unlock IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_USER_SWITCHED); Loading Loading @@ -1994,10 +1944,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mMagnificationController.updateUserIdIfNeeded(userId); List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos = null; List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos = null; if (Flags.scanPackagesWithoutLock()) { parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); } synchronized (mLock) { if (mCurrentUserId == userId && mInitialized) { return; Loading @@ -2022,12 +1970,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mCurrentUserId = userId; AccessibilityUserState userState = getCurrentUserStateLocked(); if (Flags.scanPackagesWithoutLock()) { readConfigurationForUserStateLocked(userState, parsedAccessibilityServiceInfos, parsedAccessibilityShortcutInfos); } else { readConfigurationForUserStateLocked(userState); } mSecurityPolicy.onSwitchUserLocked(mCurrentUserId, userState.mEnabledServices); // Even if reading did not yield change, we have to update // the state since the context in which the current user Loading Loading @@ -3135,15 +3079,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub userState.setFilterKeyEventsEnabledLocked(false); } // ErrorProne doesn't understand that this method is only called while locked, // returning an error for accessing mCurrentUserId. @SuppressWarnings("GuardedBy") private boolean readConfigurationForUserStateLocked(AccessibilityUserState userState) { return readConfigurationForUserStateLocked(userState, parseAccessibilityServiceInfos(mCurrentUserId), parseAccessibilityShortcutInfos(mCurrentUserId)); } private boolean readConfigurationForUserStateLocked( AccessibilityUserState userState, List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos, Loading services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +0 −22 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ import android.os.Handler; import android.os.IBinder; import android.os.LocaleList; import android.os.UserHandle; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; Loading Loading @@ -851,26 +850,6 @@ public class AccessibilityManagerServiceTest { } @Test @RequiresFlagsDisabled(Flags.FLAG_SCAN_PACKAGES_WITHOUT_LOCK) // Test old behavior to validate lock detection for the old (locked access) case. public void testPackageMonitorScanPackages_scansWhileHoldingLock() { setupAccessibilityServiceConnection(0); final AtomicReference<Set<Boolean>> lockState = collectLockStateWhilePackageScanning(); when(mMockPackageManager.queryIntentServicesAsUser(any(), anyInt(), anyInt())) .thenReturn(List.of(mMockResolveInfo)); when(mMockSecurityPolicy.canRegisterService(any())).thenReturn(true); final Intent packageIntent = new Intent(Intent.ACTION_PACKAGE_ADDED); packageIntent.setData(Uri.parse("test://package")); packageIntent.putExtra(Intent.EXTRA_USER_HANDLE, mA11yms.getCurrentUserIdLocked()); packageIntent.putExtra(Intent.EXTRA_REPLACING, true); mA11yms.getPackageMonitor().doHandlePackageEvent(packageIntent); assertThat(lockState.get()).containsExactly(true); } @Test @RequiresFlagsEnabled(Flags.FLAG_SCAN_PACKAGES_WITHOUT_LOCK) public void testPackageMonitorScanPackages_scansWithoutHoldingLock() { setupAccessibilityServiceConnection(0); final AtomicReference<Set<Boolean>> lockState = collectLockStateWhilePackageScanning(); Loading @@ -888,7 +867,6 @@ public class AccessibilityManagerServiceTest { } @Test @RequiresFlagsEnabled(Flags.FLAG_SCAN_PACKAGES_WITHOUT_LOCK) public void testSwitchUserScanPackages_scansWithoutHoldingLock() { setupAccessibilityServiceConnection(0); final AtomicReference<Set<Boolean>> lockState = collectLockStateWhilePackageScanning(); Loading Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +12 −77 Original line number Diff line number Diff line Loading @@ -715,16 +715,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } private void onSomePackagesChangedLocked() { final AccessibilityUserState userState = getCurrentUserStateLocked(); // Reload the installed services since some services may have different attributes // or resolve info (does not support equals), etc. Remove them then to force reload. userState.mInstalledServices.clear(); if (readConfigurationForUserStateLocked(userState)) { onUserStateChangedLocked(userState); } } private void onSomePackagesChangedLocked( @Nullable List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos, @Nullable List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos) { Loading Loading @@ -842,22 +832,16 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final int userId = getChangingUserId(); List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos = null; List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos = null; if (Flags.scanPackagesWithoutLock()) { parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); } synchronized (mLock) { // Only the profile parent can install accessibility services. // Therefore we ignore packages from linked profiles. if (userId != mCurrentUserId) { return; } if (Flags.scanPackagesWithoutLock()) { onSomePackagesChangedLocked(parsedAccessibilityServiceInfos, parsedAccessibilityShortcutInfos); } else { onSomePackagesChangedLocked(); } } } Loading @@ -875,10 +859,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final int userId = getChangingUserId(); List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos = null; List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos = null; if (Flags.scanPackagesWithoutLock()) { parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); } synchronized (mLock) { if (userId != mCurrentUserId) { return; Loading @@ -893,12 +875,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // get a new one. userState.mInstalledServices.clear(); final boolean configurationChanged; if (Flags.scanPackagesWithoutLock()) { configurationChanged = readConfigurationForUserStateLocked(userState, parsedAccessibilityServiceInfos, parsedAccessibilityShortcutInfos); } else { configurationChanged = readConfigurationForUserStateLocked(userState); } if (reboundAService || configurationChanged) { onUserStateChangedLocked(userState); } Loading Loading @@ -993,34 +971,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // package changes mPackageMonitor.register(mContext, null, UserHandle.ALL, true); if (!Flags.deprecatePackageListObserver()) { final PackageManagerInternal pm = LocalServices.getService( PackageManagerInternal.class); if (pm != null) { pm.getPackageList(new PackageManagerInternal.PackageListObserver() { @Override public void onPackageAdded(String packageName, int uid) { final int userId = UserHandle.getUserId(uid); synchronized (mLock) { if (userId == mCurrentUserId) { onSomePackagesChangedLocked(); } } } @Override public void onPackageRemoved(String packageName, int uid) { final int userId = UserHandle.getUserId(uid); synchronized (mLock) { if (userId == mCurrentUserId) { onPackageRemovedLocked(packageName); } } } }); } } // user change and unlock IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_USER_SWITCHED); Loading Loading @@ -1994,10 +1944,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mMagnificationController.updateUserIdIfNeeded(userId); List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos = null; List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos = null; if (Flags.scanPackagesWithoutLock()) { parsedAccessibilityServiceInfos = parseAccessibilityServiceInfos(userId); parsedAccessibilityShortcutInfos = parseAccessibilityShortcutInfos(userId); } synchronized (mLock) { if (mCurrentUserId == userId && mInitialized) { return; Loading @@ -2022,12 +1970,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mCurrentUserId = userId; AccessibilityUserState userState = getCurrentUserStateLocked(); if (Flags.scanPackagesWithoutLock()) { readConfigurationForUserStateLocked(userState, parsedAccessibilityServiceInfos, parsedAccessibilityShortcutInfos); } else { readConfigurationForUserStateLocked(userState); } mSecurityPolicy.onSwitchUserLocked(mCurrentUserId, userState.mEnabledServices); // Even if reading did not yield change, we have to update // the state since the context in which the current user Loading Loading @@ -3135,15 +3079,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub userState.setFilterKeyEventsEnabledLocked(false); } // ErrorProne doesn't understand that this method is only called while locked, // returning an error for accessing mCurrentUserId. @SuppressWarnings("GuardedBy") private boolean readConfigurationForUserStateLocked(AccessibilityUserState userState) { return readConfigurationForUserStateLocked(userState, parseAccessibilityServiceInfos(mCurrentUserId), parseAccessibilityShortcutInfos(mCurrentUserId)); } private boolean readConfigurationForUserStateLocked( AccessibilityUserState userState, List<AccessibilityServiceInfo> parsedAccessibilityServiceInfos, Loading
services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +0 −22 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ import android.os.Handler; import android.os.IBinder; import android.os.LocaleList; import android.os.UserHandle; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; Loading Loading @@ -851,26 +850,6 @@ public class AccessibilityManagerServiceTest { } @Test @RequiresFlagsDisabled(Flags.FLAG_SCAN_PACKAGES_WITHOUT_LOCK) // Test old behavior to validate lock detection for the old (locked access) case. public void testPackageMonitorScanPackages_scansWhileHoldingLock() { setupAccessibilityServiceConnection(0); final AtomicReference<Set<Boolean>> lockState = collectLockStateWhilePackageScanning(); when(mMockPackageManager.queryIntentServicesAsUser(any(), anyInt(), anyInt())) .thenReturn(List.of(mMockResolveInfo)); when(mMockSecurityPolicy.canRegisterService(any())).thenReturn(true); final Intent packageIntent = new Intent(Intent.ACTION_PACKAGE_ADDED); packageIntent.setData(Uri.parse("test://package")); packageIntent.putExtra(Intent.EXTRA_USER_HANDLE, mA11yms.getCurrentUserIdLocked()); packageIntent.putExtra(Intent.EXTRA_REPLACING, true); mA11yms.getPackageMonitor().doHandlePackageEvent(packageIntent); assertThat(lockState.get()).containsExactly(true); } @Test @RequiresFlagsEnabled(Flags.FLAG_SCAN_PACKAGES_WITHOUT_LOCK) public void testPackageMonitorScanPackages_scansWithoutHoldingLock() { setupAccessibilityServiceConnection(0); final AtomicReference<Set<Boolean>> lockState = collectLockStateWhilePackageScanning(); Loading @@ -888,7 +867,6 @@ public class AccessibilityManagerServiceTest { } @Test @RequiresFlagsEnabled(Flags.FLAG_SCAN_PACKAGES_WITHOUT_LOCK) public void testSwitchUserScanPackages_scansWithoutHoldingLock() { setupAccessibilityServiceConnection(0); final AtomicReference<Set<Boolean>> lockState = collectLockStateWhilePackageScanning(); Loading