diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/content/pm/PackageInstaller.java | 19 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 9 |
2 files changed, 28 insertions, 0 deletions
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index 338eb2d77815..a8815ec6cfaa 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -1318,6 +1318,8 @@ public class PackageInstaller { public boolean isMultiPackage; /** {@hide} */ public boolean isStaged; + /** {@hide} */ + public long requiredInstalledVersionCode = PackageManager.VERSION_CODE_HIGHEST; /** * Construct parameters for a new package install session. @@ -1350,6 +1352,7 @@ public class PackageInstaller { installerPackageName = source.readString(); isMultiPackage = source.readBoolean(); isStaged = source.readBoolean(); + requiredInstalledVersionCode = source.readLong(); } /** {@hide} */ @@ -1372,6 +1375,7 @@ public class PackageInstaller { ret.installerPackageName = installerPackageName; ret.isMultiPackage = isMultiPackage; ret.isStaged = isStaged; + ret.requiredInstalledVersionCode = requiredInstalledVersionCode; return ret; } @@ -1562,6 +1566,19 @@ public class PackageInstaller { } } + /** + * Require the given version of the package be installed. + * The install will only be allowed if the existing version code of + * the package installed on the device matches the given version code. + * Use {@link * PackageManager#VERSION_CODE_HIGHEST} to allow + * installation regardless of the currently installed package version. + * + * @hide + */ + public void setRequiredInstalledVersionCode(long versionCode) { + requiredInstalledVersionCode = versionCode; + } + /** {@hide} */ public void setInstallFlagsForcePermissionPrompt() { installFlags |= PackageManager.INSTALL_FORCE_PERMISSION_PROMPT; @@ -1703,6 +1720,7 @@ public class PackageInstaller { pw.printPair("installerPackageName", installerPackageName); pw.printPair("isMultiPackage", isMultiPackage); pw.printPair("isStaged", isStaged); + pw.printPair("requiredInstalledVersionCode", requiredInstalledVersionCode); pw.println(); } @@ -1731,6 +1749,7 @@ public class PackageInstaller { dest.writeString(installerPackageName); dest.writeBoolean(isMultiPackage); dest.writeBoolean(isStaged); + dest.writeLong(requiredInstalledVersionCode); } public static final Parcelable.Creator<SessionParams> diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 33c0bb9dc9d0..dd5ca6706316 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -1423,6 +1423,14 @@ public abstract class PackageManager { */ public static final int INSTALL_FAILED_MULTIPACKAGE_INCONSISTENCY = -120; + /** + * Installation failed return code: the required installed version code + * does not match the currently installed package version code. + * + * @hide + */ + public static final int INSTALL_FAILED_WRONG_INSTALLED_VERSION = -121; + /** @hide */ @IntDef(flag = true, prefix = { "DELETE_" }, value = { DELETE_KEEP_DATA, @@ -6918,6 +6926,7 @@ public abstract class PackageManager { case INSTALL_FAILED_BAD_DEX_METADATA: return "INSTALL_FAILED_BAD_DEX_METADATA"; case INSTALL_FAILED_MISSING_SPLIT: return "INSTALL_FAILED_MISSING_SPLIT"; case INSTALL_FAILED_BAD_SIGNATURE: return "INSTALL_FAILED_BAD_SIGNATURE"; + case INSTALL_FAILED_WRONG_INSTALLED_VERSION: return "INSTALL_FAILED_WRONG_INSTALLED_VERSION"; default: return Integer.toString(status); } } |
