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

Commit 7d1355f1 authored by Martijn Coenen's avatar Martijn Coenen
Browse files

Revert "Reconcile app data twice to pick up packages installed during unlock"

This reverts commit 58319e59.

Revert reason: Alternative solution.
Bug: 187103629
Test: manual

Change-Id: Id7f84655a7850a049e251a06a00fe16b95c40761
parent 12876ad8
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -594,7 +594,6 @@ class UserController implements Handler.Callback {

            final TimingsTraceAndSlog t = new TimingsTraceAndSlog();
            t.traceBegin("UM.onBeforeUnlockUser-" + userId);
            final ArraySet<String> reconciledPackages =
            mInjector.getUserManager().onBeforeUnlockUser(userId);
            t.traceEnd();
            synchronized (mLock) {
@@ -604,9 +603,6 @@ class UserController implements Handler.Callback {
                }
            }
            mInjector.getUserManagerInternal().setUserState(userId, uss.state);
            t.traceBegin("UM.onUserStateRunningUnlocking-" + userId);
            mInjector.getUserManager().onUserStateRunningUnlocking(userId, reconciledPackages);
            t.traceEnd();

            uss.mUnlockProgress.setProgress(20);

+6 −24
Original line number Diff line number Diff line
@@ -6957,7 +6957,7 @@ public class PackageManagerService extends IPackageManager.Stub
            }
            List<String> deferPackages = reconcileAppsDataLI(StorageManager.UUID_PRIVATE_INTERNAL,
                    UserHandle.USER_SYSTEM, storageFlags, true /* migrateAppData */,
                    true /* onlyCoreApps */, null);
                    true /* onlyCoreApps */);
            mPrepareAppDataFuture = SystemServerInitThreadPool.submit(() -> {
                TimingsTraceLog traceLog = new TimingsTraceLog("SystemServerTimingAsync",
                        Trace.TRACE_TAG_PACKAGE_MANAGER);
@@ -18583,32 +18583,22 @@ public class PackageManagerService extends IPackageManager.Stub
     * <p>
     * Verifies that directories exist and that ownership and labeling is
     * correct for all installed apps on all mounted volumes.
     *
     * @param reconciledPackages A set that will be populated with package names that have
     *                           successfully had their data reconciled. Any package names already
     *                           contained will be skipped. Because this must be mutable when
     *                           non-null, it is typed {@link ArraySet} to prevent accidental
     *                           usage of {@link Collections#emptySet()}. Null can be passed if the
     *                           caller doesn't need this functionality.
     */
    @NonNull
    void reconcileAppsData(int userId, int flags, boolean migrateAppsData,
            @Nullable ArraySet<String> reconciledPackages) {
    void reconcileAppsData(int userId, int flags, boolean migrateAppsData) {
        final StorageManager storage = mInjector.getSystemService(StorageManager.class);
        for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
            final String volumeUuid = vol.getFsUuid();
            synchronized (mInstallLock) {
                reconcileAppsDataLI(volumeUuid, userId, flags, migrateAppsData,
                        reconciledPackages);
                reconcileAppsDataLI(volumeUuid, userId, flags, migrateAppsData);
            }
        }
    }
    @GuardedBy("mInstallLock")
    void reconcileAppsDataLI(String volumeUuid, int userId, int flags,
            boolean migrateAppData, @Nullable ArraySet<String> reconciledPackages) {
        reconcileAppsDataLI(volumeUuid, userId, flags, migrateAppData, false /* onlyCoreApps */,
                reconciledPackages);
            boolean migrateAppData) {
        reconcileAppsDataLI(volumeUuid, userId, flags, migrateAppData, false /* onlyCoreApps */);
    }
    /**
@@ -18623,8 +18613,7 @@ public class PackageManagerService extends IPackageManager.Stub
     */
    @GuardedBy("mInstallLock")
    private List<String> reconcileAppsDataLI(String volumeUuid, int userId, int flags,
            boolean migrateAppData, boolean onlyCoreApps,
            @Nullable ArraySet<String> reconciledPackages) {
            boolean migrateAppData, boolean onlyCoreApps) {
        Slog.v(TAG, "reconcileAppsData for " + volumeUuid + " u" + userId + " 0x"
                + Integer.toHexString(flags) + " migrateAppData=" + migrateAppData);
        List<String> result = onlyCoreApps ? new ArrayList<>() : null;
@@ -18687,9 +18676,6 @@ public class PackageManagerService extends IPackageManager.Stub
        int preparedCount = 0;
        for (PackageSetting ps : packages) {
            final String packageName = ps.name;
            if (reconciledPackages != null && reconciledPackages.contains(packageName)) {
                continue;
            }
            if (ps.pkg == null) {
                Slog.w(TAG, "Odd, missing scanned package " + packageName);
                // TODO: might be due to legacy ASEC apps; we should circle back
@@ -18705,10 +18691,6 @@ public class PackageManagerService extends IPackageManager.Stub
            if (ps.getInstalled(userId)) {
                prepareAppDataAndMigrate(batch, ps.pkg, userId, flags, migrateAppData);
                preparedCount++;
                if (reconciledPackages != null) {
                    reconciledPackages.add(packageName);
                }
            }
        }
        executeBatchLI(batch);
+1 −2
Original line number Diff line number Diff line
@@ -170,8 +170,7 @@ public class StorageEventHelper extends StorageEventListener {
            try {
                sm.prepareUserStorage(volumeUuid, user.id, user.serialNumber, flags);
                synchronized (mPm.mInstallLock) {
                    mPm.reconcileAppsDataLI(volumeUuid, user.id, flags, true /* migrateAppData */,
                            null);
                    mPm.reconcileAppsDataLI(volumeUuid, user.id, flags, true /* migrateAppData */);
                }
            } catch (IllegalStateException e) {
                // Device was probably ejected, and we'll process that event momentarily
+5 −33
Original line number Diff line number Diff line
@@ -4805,7 +4805,7 @@ public class UserManagerService extends IUserManager.Stub {
        mUserDataPreparer.prepareUserData(userId, userSerial, StorageManager.FLAG_STORAGE_DE);
        t.traceEnd();
        t.traceBegin("reconcileAppsData");
        mPm.reconcileAppsData(userId, StorageManager.FLAG_STORAGE_DE, migrateAppsData, null);
        mPm.reconcileAppsData(userId, StorageManager.FLAG_STORAGE_DE, migrateAppsData);
        t.traceEnd();

        if (userId != UserHandle.USER_SYSTEM) {
@@ -4821,14 +4821,11 @@ public class UserManagerService extends IUserManager.Stub {
    /**
     * Called right before a user is unlocked. This gives us a chance to prepare
     * app storage.
     *
     * @return set of packages that reconciled app data
     */
    @NonNull public ArraySet<String> onBeforeUnlockUser(@UserIdInt int userId) {
    public void onBeforeUnlockUser(@UserIdInt int userId) {
        UserInfo userInfo = getUserInfo(userId);
        if (userInfo == null) {
            // PMS requires mutable set, so the API uses ArraySet to prevent Collections.emptySet()
            return new ArraySet<>();
            return;
        }
        final int userSerial = userInfo.serialNumber;
        // Migrate only if build fingerprints mismatch
@@ -4839,33 +4836,8 @@ public class UserManagerService extends IUserManager.Stub {
        mUserDataPreparer.prepareUserData(userId, userSerial, StorageManager.FLAG_STORAGE_CE);
        t.traceEnd();

        final ArraySet<String> reconciledPackages = new ArraySet<>();
        t.traceBegin("reconcileAppsDataFirstPass-" + userId);
        mPm.reconcileAppsData(userId, StorageManager.FLAG_STORAGE_CE, migrateAppsData,
                reconciledPackages);
        t.traceEnd();
        return reconciledPackages;
    }

    /**
     * Called right after a user state is moved to {@link UserState#STATE_RUNNING_UNLOCKING}. This
     * gives us a chance to reconcile app data for apps installed since
     * {@link #onBeforeUnlockUser(int)} was called.
     *
     * @param previouslyReconciledPackages the result from {@link #onBeforeUnlockUser(int)}
     */
    public void onUserStateRunningUnlocking(@UserIdInt int userId,
            @NonNull ArraySet<String> previouslyReconciledPackages) {
        final UserInfo userInfo = getUserInfo(userId);
        if (userInfo == null) {
            return;
        }
        // Migrate only if build fingerprints mismatch
        boolean migrateAppsData = !Build.FINGERPRINT.equals(userInfo.lastLoggedInFingerprint);
        final TimingsTraceAndSlog t = new TimingsTraceAndSlog();
        t.traceBegin("reconcileAppsDataSecondPass-" + userId);
        mPm.reconcileAppsData(userId, StorageManager.FLAG_STORAGE_CE, migrateAppsData,
                previouslyReconciledPackages);
        t.traceBegin("reconcileAppsData-" + userId);
        mPm.reconcileAppsData(userId, StorageManager.FLAG_STORAGE_CE, migrateAppsData);
        t.traceEnd();
    }