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)) {