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

Commit 46cad067 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Remove usages of package-scanning bugfix flags." into main

parents 372393e5 972d727f
Loading
Loading
Loading
Loading
+12 −77
Original line number Diff line number Diff line
@@ -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) {
@@ -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();
                    }
                }
            }

@@ -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;
@@ -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);
                    }
@@ -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);
@@ -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;
@@ -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
@@ -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,
+0 −22
Original line number Diff line number Diff line
@@ -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;
@@ -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();
@@ -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();