diff options
| author | 2023-12-08 12:12:41 -0700 | |
|---|---|---|
| committer | 2023-12-19 08:25:52 -0800 | |
| commit | 6d594dcb17b6ea04b95d6d77e34956727b12b0dd (patch) | |
| tree | b94b76bb615a00b8ff998cbb19edb69f6d5a1e67 | |
| parent | 4f76add47325cd6f67199f1d1caea65fc134b2b9 (diff) | |
Add getPriorSdkVersion to PackageManagerInternal
This enables system components to test whether the device just
upgraded from a previous version (without wiping /data), and if so
which version.
Bug: 290312729
Test: atest PackageManagerTest
Change-Id: I6669f56b80ebef3709e300cd2c8d98d4ffe46434
3 files changed, 16 insertions, 1 deletions
diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java index cac2efba1c89..08093c0c037f 100644 --- a/services/core/java/android/content/pm/PackageManagerInternal.java +++ b/services/core/java/android/content/pm/PackageManagerInternal.java @@ -1463,4 +1463,9 @@ public abstract class PackageManagerInternal { */ @NonNull public abstract PackageArchiver getPackageArchiver(); + + /** + * Returns true if the device is upgrading from an SDK version lower than the one specified. + */ + public abstract boolean isUpgradingFromLowerThan(int sdkVersion); } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index bc441b84c58b..197ac05d1cd8 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -606,6 +606,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService private final boolean mIsUpgrade; private final boolean mIsPreNMR1Upgrade; private final boolean mIsPreQUpgrade; + // If mIsUpgrade == true, contains the prior SDK version, else -1. + private final int mPriorSdkVersion; // Used for privilege escalation. MUST NOT BE CALLED WITH mPackages // LOCK HELD. Can be called with mInstallLock held. @@ -1890,6 +1892,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService mInstantAppResolverSettingsComponent = testParams.instantAppResolverSettingsComponent; mIsPreNMR1Upgrade = testParams.isPreNmr1Upgrade; mIsPreQUpgrade = testParams.isPreQupgrade; + mPriorSdkVersion = testParams.priorSdkVersion; mIsUpgrade = testParams.isUpgrade; mMetrics = testParams.Metrics; mModuleInfoProvider = testParams.moduleInfoProvider; @@ -2229,7 +2232,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService "Upgrading from " + ver.fingerprint + " (" + ver.buildFingerprint + ") to " + PackagePartitions.FINGERPRINT + " (" + Build.FINGERPRINT + ")"); } - + mPriorSdkVersion = mIsUpgrade ? ver.sdkVersion : -1; mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, mInjector.getSystemPartitions()); @@ -7098,6 +7101,12 @@ public class PackageManagerService implements PackageSender, TestUtilityService mPackageMonitorCallbackHelper.notifyPackageMonitorWithIntent(intent, userId, visibilityAllowList, mHandler); } + + @Override + public boolean isUpgradingFromLowerThan(int sdkVersion) { + final boolean isUpgrading = mPriorSdkVersion != -1; + return isUpgrading && mPriorSdkVersion < sdkVersion; + } } private void setEnabledOverlayPackages(@UserIdInt int userId, diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java b/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java index 655b9c93d9dd..ea2e40ea427d 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java @@ -65,6 +65,7 @@ public final class PackageManagerServiceTestParams { public ComponentName instantAppResolverSettingsComponent; public boolean isPreNmr1Upgrade; public boolean isPreQupgrade; + public int priorSdkVersion = -1; public boolean isUpgrade; public LegacyPermissionManagerInternal legacyPermissionManagerInternal; public DisplayMetrics Metrics; |