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

Commit b94323d2 authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Use strings to better represent resource values.

APK manifest might or might not contain values for all flags. In this case we don't want API callers to guess the correct defaults.
With this implementation, they can simply assign attribute values to strings, and let the system do the parsing and defaulting.

Bug: 297916136
Test: atest PackageManagerTest
Change-Id: I32a9077f255db1797b066a01d9f1559f55b8919b
parent 75e2eb72
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -29,9 +29,9 @@ parcelable ArchivedPackageParcel {
    int versionCode;
    int versionCodeMajor;
    int targetSdkVersion;
    boolean backupAllowed;
    boolean defaultToDeviceProtectedStorage;
    boolean requestLegacyExternalStorage;
    boolean userDataFragile;
    boolean clearUserDataOnFailedRestoreAllowed;
    String backupAllowed;
    String defaultToDeviceProtectedStorage;
    String requestLegacyExternalStorage;
    String userDataFragile;
    String clearUserDataOnFailedRestoreAllowed;
}
+12 −5
Original line number Diff line number Diff line
@@ -23,9 +23,11 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.SigningDetails;
import android.content.pm.VerifierInfo;
import android.os.Build;

import com.android.internal.util.CollectionUtils;
import com.android.internal.util.DataClass;
import com.android.internal.util.XmlUtils;

import java.util.List;
import java.util.Set;
@@ -255,11 +257,16 @@ public class ApkLite {
        mRollbackDataPolicy = 0;
        mHasDeviceAdminReceiver = false;
        mIsSdkLibrary = false;
        mBackupAllowed = archivedPackage.backupAllowed;
        mDefaultToDeviceProtectedStorage = archivedPackage.defaultToDeviceProtectedStorage;
        mRequestLegacyExternalStorage = archivedPackage.requestLegacyExternalStorage;
        mUserDataFragile = archivedPackage.userDataFragile;
        mClearUserDataOnFailedRestoreAllowed = archivedPackage.clearUserDataOnFailedRestoreAllowed;
        // @see ParsingPackageUtils#parseBaseAppBasicFlags
        mBackupAllowed = XmlUtils.convertValueToBoolean(archivedPackage.backupAllowed, true);
        mDefaultToDeviceProtectedStorage = XmlUtils.convertValueToBoolean(
                archivedPackage.defaultToDeviceProtectedStorage, false);
        mRequestLegacyExternalStorage = XmlUtils.convertValueToBoolean(
                archivedPackage.requestLegacyExternalStorage,
                mTargetSdkVersion < Build.VERSION_CODES.Q);
        mUserDataFragile = XmlUtils.convertValueToBoolean(archivedPackage.userDataFragile, false);
        mClearUserDataOnFailedRestoreAllowed = XmlUtils.convertValueToBoolean(
                archivedPackage.clearUserDataOnFailedRestoreAllowed, true);
    }

    /**
+8 −7
Original line number Diff line number Diff line
@@ -6322,13 +6322,14 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            archPkg.targetSdkVersion = apk.getTargetSdkVersion();

            // These get translated in flags important for user data management.
            archPkg.backupAllowed = apk.isBackupAllowed();
            archPkg.defaultToDeviceProtectedStorage =
                    apk.isDefaultToDeviceProtectedStorage();
            archPkg.requestLegacyExternalStorage = apk.isRequestLegacyExternalStorage();
            archPkg.userDataFragile = apk.isUserDataFragile();
            archPkg.clearUserDataOnFailedRestoreAllowed =
                    apk.isClearUserDataOnFailedRestoreAllowed();
            archPkg.backupAllowed = String.valueOf(apk.isBackupAllowed());
            archPkg.defaultToDeviceProtectedStorage = String.valueOf(
                    apk.isDefaultToDeviceProtectedStorage());
            archPkg.requestLegacyExternalStorage = String.valueOf(
                    apk.isRequestLegacyExternalStorage());
            archPkg.userDataFragile = String.valueOf(apk.isUserDataFragile());
            archPkg.clearUserDataOnFailedRestoreAllowed = String.valueOf(
                    apk.isClearUserDataOnFailedRestoreAllowed());

            return archPkg;
        }