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

Commit 4f05ba58 authored by Ivan Chiang's avatar Ivan Chiang Committed by Android (Google) Code Review
Browse files

Merge "[PM] Add doRestore check and write pendingRestore" into main

parents 23b865cf 72c55251
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -830,7 +830,7 @@ final class InstallPackageHelper {
            doRestore = performRollbackManagerRestore(userId, token, request);
        }

        if (succeeded && !request.hasPostInstallRunnable()) {
        if (succeeded && doRestore && !request.hasPostInstallRunnable()) {
            boolean hasNeverBeenRestored =
                    packageSetting != null && packageSetting.isPendingRestore();
            request.setPostInstallRunnable(() -> {
+6 −0
Original line number Diff line number Diff line
@@ -3243,6 +3243,9 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
        if (pkg.isForceQueryableOverride()) {
            serializer.attributeBoolean(null, "forceQueryable", true);
        }
        if (pkg.isPendingRestore()) {
            serializer.attributeBoolean(null, "pendingRestore", true);
        }
        if (pkg.isLoading()) {
            serializer.attributeBoolean(null, "isLoading", true);
        }
@@ -4046,6 +4049,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
        PackageSetting packageSetting = null;
        long versionCode = 0;
        boolean installedForceQueryable = false;
        boolean isPendingRestore = false;
        float loadingProgress = 0;
        long loadingCompletedTime = 0;
        UUID domainSetId;
@@ -4071,6 +4075,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
            cpuAbiOverrideString = parser.getAttributeValue(null, "cpuAbiOverride");
            updateAvailable = parser.getAttributeBoolean(null, "updateAvailable", false);
            installedForceQueryable = parser.getAttributeBoolean(null, "forceQueryable", false);
            isPendingRestore = parser.getAttributeBoolean(null, "pendingRestore", false);
            loadingProgress = parser.getAttributeFloat(null, "loadingProgress", 0);
            loadingCompletedTime = parser.getAttributeLongHex(null, "loadingCompletedTime", 0);

@@ -4244,6 +4249,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                    .setSecondaryCpuAbi(secondaryCpuAbiString)
                    .setUpdateAvailable(updateAvailable)
                    .setForceQueryableOverride(installedForceQueryable)
                    .setPendingRestore(isPendingRestore)
                    .setLoadingProgress(loadingProgress)
                    .setLoadingCompletedTime(loadingCompletedTime)
                    .setAppMetadataFilePath(appMetadataFilePath)
+19 −0
Original line number Diff line number Diff line
@@ -1007,6 +1007,25 @@ public class PackageManagerSettingsTests {
                .containsExactlyElementsIn(ps2RequireAsList).inOrder();
    }

    @Test
    public void testWriteReadPendingRestore() {
        Settings settings = makeSettings();
        PackageSetting packageSetting = createPackageSetting(PACKAGE_NAME_1);
        packageSetting.setAppId(Process.FIRST_APPLICATION_UID);
        packageSetting.setPkg(PackageImpl.forTesting(PACKAGE_NAME_1).hideAsParsed()
                .setUid(packageSetting.getAppId())
                .hideAsFinal());

        packageSetting.setPendingRestore(true);
        settings.mPackages.put(PACKAGE_NAME_1, packageSetting);

        settings.writeLPr(computer, /*sync=*/true);
        settings.mPackages.clear();

        assertThat(settings.readLPw(computer, createFakeUsers()), is(true));
        assertThat(settings.getPackageLPr(PACKAGE_NAME_1).isPendingRestore(), is(true));
    }

    @Test
    public void testWriteReadArchiveState() {
        Settings settings = makeSettings();