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

Commit 72c55251 authored by Ivan Chiang's avatar Ivan Chiang
Browse files

[PM] Add doRestore check and write pendingRestore

- Add doRestore check before restoring permission
If it is false, don't restore permission
- Write the value of PackageSetting#isPendingRestore into file

Test: atest PackageManagerSettingsTests
Bug: 334993998
Change-Id: I24e85facf6c608e0399d94c584a5ccd2f695af5c
parent 9fc6b306
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -830,7 +830,7 @@ final class InstallPackageHelper {
            doRestore = performRollbackManagerRestore(userId, token, request);
            doRestore = performRollbackManagerRestore(userId, token, request);
        }
        }


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


@@ -4244,6 +4249,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                    .setSecondaryCpuAbi(secondaryCpuAbiString)
                    .setSecondaryCpuAbi(secondaryCpuAbiString)
                    .setUpdateAvailable(updateAvailable)
                    .setUpdateAvailable(updateAvailable)
                    .setForceQueryableOverride(installedForceQueryable)
                    .setForceQueryableOverride(installedForceQueryable)
                    .setPendingRestore(isPendingRestore)
                    .setLoadingProgress(loadingProgress)
                    .setLoadingProgress(loadingProgress)
                    .setLoadingCompletedTime(loadingCompletedTime)
                    .setLoadingCompletedTime(loadingCompletedTime)
                    .setAppMetadataFilePath(appMetadataFilePath)
                    .setAppMetadataFilePath(appMetadataFilePath)
+19 −0
Original line number Original line Diff line number Diff line
@@ -1007,6 +1007,25 @@ public class PackageManagerSettingsTests {
                .containsExactlyElementsIn(ps2RequireAsList).inOrder();
                .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
    @Test
    public void testWriteReadArchiveState() {
    public void testWriteReadArchiveState() {
        Settings settings = makeSettings();
        Settings settings = makeSettings();