From dabef7a8de5b95df4821d78651c4d06e493136da Mon Sep 17 00:00:00 2001 From: JW Wang Date: Thu, 29 Jul 2021 16:24:14 +0800 Subject: [PATCH] Expose ROLLBACK_DATA_POLICY_* as system api The constants will be used by phonesky and CTS to replace hardcoded values. Bug: 194981157 Test: m Change-Id: I4567334be554055ef2a5c20ef7160d991674cb9e --- core/api/system-current.txt | 3 ++ .../android/content/pm/PackageInstaller.java | 4 +- .../android/content/pm/PackageManager.java | 49 ++++++++++++------- .../content/rollback/PackageRollbackInfo.java | 4 +- .../rollback/AppDataRollbackHelper.java | 8 +-- .../com/android/server/rollback/Rollback.java | 2 +- .../rollback/RollbackManagerServiceImpl.java | 2 +- .../server/rollback/RollbackStore.java | 2 +- .../tests/rollback/StagedRollbackTest.java | 4 +- 9 files changed, 46 insertions(+), 32 deletions(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 1eec826347a67..9ecde8c96d02a 100755 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -2831,6 +2831,9 @@ package android.content.pm { field public static final int RESTRICTION_HIDE_FROM_SUGGESTIONS = 1; // 0x1 field public static final int RESTRICTION_HIDE_NOTIFICATIONS = 2; // 0x2 field public static final int RESTRICTION_NONE = 0; // 0x0 + field public static final int ROLLBACK_DATA_POLICY_RESTORE = 0; // 0x0 + field public static final int ROLLBACK_DATA_POLICY_RETAIN = 2; // 0x2 + field public static final int ROLLBACK_DATA_POLICY_WIPE = 1; // 0x1 field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN = 0; // 0x0 field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_VISIBLE = 1; // 0x1 field public static final int SYSTEM_APP_STATE_INSTALLED = 2; // 0x2 diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index 3f8aedb31ea9c..c2a65d5bf85d8 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -1616,7 +1616,7 @@ public class PackageInstaller { /** {@hide} */ public DataLoaderParams dataLoaderParams; /** {@hide} */ - public int rollbackDataPolicy = PackageManager.RollbackDataPolicy.RESTORE; + public int rollbackDataPolicy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE; /** {@hide} */ public boolean forceQueryableOverride; /** {@hide} */ @@ -1887,7 +1887,7 @@ public class PackageInstaller { } else { installFlags &= ~PackageManager.INSTALL_ENABLE_ROLLBACK; } - rollbackDataPolicy = PackageManager.RollbackDataPolicy.RESTORE; + rollbackDataPolicy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE; } /** diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 08afb4f0e4a5f..a5cd331de4ff4 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -1053,26 +1053,37 @@ public abstract class PackageManager { /** @hide */ @Retention(RetentionPolicy.SOURCE) - @IntDef(value = { - RollbackDataPolicy.RESTORE, - RollbackDataPolicy.WIPE, - RollbackDataPolicy.RETAIN + @IntDef(prefix = { "ROLLBACK_DATA_POLICY_" }, value = { + ROLLBACK_DATA_POLICY_RESTORE, + ROLLBACK_DATA_POLICY_WIPE, + ROLLBACK_DATA_POLICY_RETAIN }) - public @interface RollbackDataPolicy { - /** - * User data will be backed up during install and restored during rollback. - */ - int RESTORE = 0; - /** - * User data won't be backed up during install but will be wiped out during rollback. - */ - int WIPE = 1; - /** - * User data won't be backed up during install and won't be restored during rollback. - * TODO: Not implemented yet. - */ - int RETAIN = 2; - } + public @interface RollbackDataPolicy {} + + /** + * User data will be backed up during install and restored during rollback. + * + * @hide + */ + @SystemApi + public static final int ROLLBACK_DATA_POLICY_RESTORE = 0; + + /** + * User data won't be backed up during install but will be wiped out during rollback. + * + * @hide + */ + @SystemApi + public static final int ROLLBACK_DATA_POLICY_WIPE = 1; + + /** + * User data won't be backed up during install and won't be restored during rollback. + * TODO: Not implemented yet. + * + * @hide + */ + @SystemApi + public static final int ROLLBACK_DATA_POLICY_RETAIN = 2; /** @hide */ @IntDef(flag = true, prefix = { "INSTALL_" }, value = { diff --git a/core/java/android/content/rollback/PackageRollbackInfo.java b/core/java/android/content/rollback/PackageRollbackInfo.java index 0140280cd3d53..8df7c37f313ba 100644 --- a/core/java/android/content/rollback/PackageRollbackInfo.java +++ b/core/java/android/content/rollback/PackageRollbackInfo.java @@ -180,7 +180,7 @@ public final class PackageRollbackInfo implements Parcelable { @NonNull List pendingBackups, @NonNull ArrayList pendingRestores, boolean isApex, boolean isApkInApex, @NonNull List snapshottedUsers) { this(packageRolledBackFrom, packageRolledBackTo, pendingBackups, pendingRestores, isApex, - isApkInApex, snapshottedUsers, PackageManager.RollbackDataPolicy.RESTORE); + isApkInApex, snapshottedUsers, PackageManager.ROLLBACK_DATA_POLICY_RESTORE); } /** @hide */ @@ -207,7 +207,7 @@ public final class PackageRollbackInfo implements Parcelable { this.mPendingRestores = null; this.mPendingBackups = null; this.mSnapshottedUsers = null; - this.mRollbackDataPolicy = PackageManager.RollbackDataPolicy.RESTORE; + this.mRollbackDataPolicy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE; } @Override diff --git a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java index c8e36481c738f..c7e7784715cd0 100644 --- a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java +++ b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java @@ -143,10 +143,10 @@ public class AppDataRollbackHelper { int rollbackId, int appId, String seInfo, int flags) { if (packageRollbackInfo.isApex()) { switch (packageRollbackInfo.getRollbackDataPolicy()) { - case PackageManager.RollbackDataPolicy.WIPE: + case PackageManager.ROLLBACK_DATA_POLICY_WIPE: // TODO: Implement WIPE for apex CE data break; - case PackageManager.RollbackDataPolicy.RESTORE: + case PackageManager.ROLLBACK_DATA_POLICY_RESTORE: // For APEX, only restore of CE may be done here. if ((flags & Installer.FLAG_STORAGE_CE) != 0) { mApexManager.restoreCeData( @@ -160,11 +160,11 @@ public class AppDataRollbackHelper { // APK try { switch (packageRollbackInfo.getRollbackDataPolicy()) { - case PackageManager.RollbackDataPolicy.WIPE: + case PackageManager.ROLLBACK_DATA_POLICY_WIPE: mInstaller.clearAppData(null, packageRollbackInfo.getPackageName(), userId, flags, 0); break; - case PackageManager.RollbackDataPolicy.RESTORE: + case PackageManager.ROLLBACK_DATA_POLICY_RESTORE: mInstaller.restoreAppDataSnapshot(packageRollbackInfo.getPackageName(), appId, seInfo, userId, rollbackId, flags); diff --git a/services/core/java/com/android/server/rollback/Rollback.java b/services/core/java/com/android/server/rollback/Rollback.java index 7bf3478ac49e3..38e6b2820ad80 100644 --- a/services/core/java/com/android/server/rollback/Rollback.java +++ b/services/core/java/com/android/server/rollback/Rollback.java @@ -438,7 +438,7 @@ class Rollback { for (PackageRollbackInfo pkgRollbackInfo : info.getPackages()) { if (pkgRollbackInfo.getPackageName().equals(packageName)) { if (pkgRollbackInfo.getRollbackDataPolicy() - == PackageManager.RollbackDataPolicy.RESTORE) { + == PackageManager.ROLLBACK_DATA_POLICY_RESTORE) { dataHelper.snapshotAppData(info.getRollbackId(), pkgRollbackInfo, userIds); addAll(pkgRollbackInfo.getSnapshottedUsers(), userIds); RollbackStore.saveRollback(this); diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index f7ed000ac4030..a5646247f7665 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -800,7 +800,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub implements Rollba // precedence only when it is not the default (i.e. RESTORE). We will remove // SessionParams#setEnableRollback(boolean, int) and related code when Play has migrated to // using the manifest to specify the policy. - if (manifestPolicy != PackageManager.RollbackDataPolicy.RESTORE) { + if (manifestPolicy != PackageManager.ROLLBACK_DATA_POLICY_RESTORE) { return manifestPolicy; } return sessionPolicy; diff --git a/services/core/java/com/android/server/rollback/RollbackStore.java b/services/core/java/com/android/server/rollback/RollbackStore.java index 6b783f7098105..2cfc7856c197b 100644 --- a/services/core/java/com/android/server/rollback/RollbackStore.java +++ b/services/core/java/com/android/server/rollback/RollbackStore.java @@ -447,7 +447,7 @@ class RollbackStore { // Backward compatibility: no such field for old versions. final int rollbackDataPolicy = json.optInt("rollbackDataPolicy", - PackageManager.RollbackDataPolicy.RESTORE); + PackageManager.ROLLBACK_DATA_POLICY_RESTORE); return new PackageRollbackInfo(versionRolledBackFrom, versionRolledBackTo, pendingBackups, pendingRestores, isApex, isApkInApex, snapshottedUsers, diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java index 642b19e6d961a..e874782c71839 100644 --- a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java +++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java @@ -301,9 +301,9 @@ public class StagedRollbackTest { InstallUtils.processUserData(TestApp.C); Install a2 = Install.single(TestApp.A2).setStaged() - .setEnableRollback(PackageManager.RollbackDataPolicy.WIPE); + .setEnableRollback(PackageManager.ROLLBACK_DATA_POLICY_WIPE); Install b2 = Install.single(TestApp.B2).setStaged() - .setEnableRollback(PackageManager.RollbackDataPolicy.RESTORE); + .setEnableRollback(PackageManager.ROLLBACK_DATA_POLICY_RESTORE); // The rollback data policy of C2 is specified in the manifest Install c2 = Install.single(TestApp.C2).setStaged().setEnableRollback(); Install.multi(a2, b2, c2).setEnableRollback().setStaged().commit();