diff --git a/api/current.txt b/api/current.txt
index da26c95ff45bb..2181f8af3658c 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -1165,6 +1165,7 @@ package android {
field public static final int right = 16843183; // 0x10101af
field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093
field public static final int ringtoneType = 16843257; // 0x10101f9
+ field public static final int rollbackDataPolicy = 16844314; // 0x101061a
field public static final int rotation = 16843558; // 0x1010326
field public static final int rotationAnimation = 16844090; // 0x101053a
field public static final int rotationX = 16843559; // 0x1010327
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 8a57f826ad2ea..09367902d8177 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -473,6 +473,7 @@ public class PackageParser {
public final String targetPackageName;
public final boolean overlayIsStatic;
public final int overlayPriority;
+ public final int rollbackDataPolicy;
public ApkLite(String codePath, String packageName, String splitName,
boolean isFeatureSplit,
@@ -483,7 +484,7 @@ public class PackageParser {
boolean debuggable, boolean multiArch, boolean use32bitAbi,
boolean useEmbeddedDex, boolean extractNativeLibs, boolean isolatedSplits,
String targetPackageName, boolean overlayIsStatic, int overlayPriority,
- int minSdkVersion, int targetSdkVersion) {
+ int minSdkVersion, int targetSdkVersion, int rollbackDataPolicy) {
this.codePath = codePath;
this.packageName = packageName;
this.splitName = splitName;
@@ -509,6 +510,7 @@ public class PackageParser {
this.overlayPriority = overlayPriority;
this.minSdkVersion = minSdkVersion;
this.targetSdkVersion = targetSdkVersion;
+ this.rollbackDataPolicy = rollbackDataPolicy;
}
public long getLongVersionCode() {
@@ -1586,6 +1588,7 @@ public class PackageParser {
String targetPackage = null;
boolean overlayIsStatic = false;
int overlayPriority = 0;
+ int rollbackDataPolicy = 0;
String requiredSystemPropertyName = null;
String requiredSystemPropertyValue = null;
@@ -1652,6 +1655,9 @@ public class PackageParser {
if ("useEmbeddedDex".equals(attr)) {
useEmbeddedDex = attrs.getAttributeBooleanValue(i, false);
}
+ if (attr.equals("rollbackDataPolicy")) {
+ rollbackDataPolicy = attrs.getAttributeIntValue(i, 0);
+ }
}
} else if (PackageParser.TAG_OVERLAY.equals(parser.getName())) {
for (int i = 0; i < attrs.getAttributeCount(); ++i) {
@@ -1709,7 +1715,8 @@ public class PackageParser {
configForSplit, usesSplitName, isSplitRequired, versionCode, versionCodeMajor,
revisionCode, installLocation, verifiers, signingDetails, coreApp, debuggable,
multiArch, use32bitAbi, useEmbeddedDex, extractNativeLibs, isolatedSplits,
- targetPackage, overlayIsStatic, overlayPriority, minSdkVersion, targetSdkVersion);
+ targetPackage, overlayIsStatic, overlayPriority, minSdkVersion, targetSdkVersion,
+ rollbackDataPolicy);
}
/**
diff --git a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
index 2f416a2538bae..80d14c6c98d72 100644
--- a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
+++ b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
@@ -292,6 +292,7 @@ public class ApkLiteParseUtils {
String targetPackage = null;
boolean overlayIsStatic = false;
int overlayPriority = 0;
+ int rollbackDataPolicy = 0;
String requiredSystemPropertyName = null;
String requiredSystemPropertyValue = null;
@@ -369,6 +370,9 @@ public class ApkLiteParseUtils {
case "useEmbeddedDex":
useEmbeddedDex = attrs.getAttributeBooleanValue(i, false);
break;
+ case "rollbackDataPolicy":
+ rollbackDataPolicy = attrs.getAttributeIntValue(i, 0);
+ break;
}
}
} else if (PackageParser.TAG_OVERLAY.equals(parser.getName())) {
@@ -428,7 +432,7 @@ public class ApkLiteParseUtils {
versionCodeMajor, revisionCode, installLocation, verifiers, signingDetails,
coreApp, debuggable, multiArch, use32bitAbi, useEmbeddedDex, extractNativeLibs,
isolatedSplits, targetPackage, overlayIsStatic, overlayPriority, minSdkVersion,
- targetSdkVersion);
+ targetSdkVersion, rollbackDataPolicy);
}
public static VerifierInfo parseVerifier(AttributeSet attrs) {
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 2a2da6a458577..5914265f7e13f 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -1835,6 +1835,16 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
index ac96838022364..6d0db477b3bd2 100644
--- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
+++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
@@ -37,6 +37,7 @@ import android.content.pm.PackageParser;
import android.content.pm.ParceledListSlice;
import android.content.pm.UserInfo;
import android.content.pm.VersionedPackage;
+import android.content.pm.parsing.ApkLiteParseUtils;
import android.content.rollback.IRollbackManager;
import android.content.rollback.RollbackInfo;
import android.content.rollback.RollbackManager;
@@ -835,9 +836,9 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
}
// Get information about the package to be installed.
- PackageParser.PackageLite newPackage;
+ PackageParser.ApkLite newPackage;
try {
- newPackage = PackageParser.parsePackageLite(new File(session.resolvedBaseCodePath), 0);
+ newPackage = ApkLiteParseUtils.parseApkLite(new File(session.resolvedBaseCodePath), 0);
} catch (PackageParser.PackageParserException e) {
Slog.e(TAG, "Unable to parse new package", e);
return false;
@@ -845,7 +846,8 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
String packageName = newPackage.packageName;
Slog.i(TAG, "Enabling rollback for install of " + packageName
- + ", session:" + session.sessionId);
+ + ", session:" + session.sessionId
+ + ", rollbackDataPolicy=" + newPackage.rollbackDataPolicy);
String installerPackageName = session.getInstallerPackageName();
if (!enableRollbackAllowed(installerPackageName, packageName)) {