diff --git a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java index e77839c4e5b55..524ae54972e57 100644 --- a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java +++ b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java @@ -223,6 +223,13 @@ public class AppDataRollbackHelper { } } + /** + * Deletes all device-encrypted apex data snapshots for the given rollback id. + */ + public void destroyApexDeSnapshots(int rollbackId) { + mApexManager.destroyDeSnapshots(rollbackId); + } + /** * Commits the pending backups and restores for a given {@code userId} and {@code rollback}. If * the rollback has a pending backup, it is updated with a mapping from {@code userId} to inode diff --git a/services/core/java/com/android/server/rollback/Rollback.java b/services/core/java/com/android/server/rollback/Rollback.java index 4d7af9cc0d44c..7b96777b5987c 100644 --- a/services/core/java/com/android/server/rollback/Rollback.java +++ b/services/core/java/com/android/server/rollback/Rollback.java @@ -44,7 +44,6 @@ import android.util.SparseLongArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; -import com.android.server.pm.ApexManager; import java.io.File; import java.io.IOException; @@ -662,7 +661,7 @@ class Rollback { } } if (containsApex) { - ApexManager.getInstance().destroyDeSnapshots(info.getRollbackId()); + dataHelper.destroyApexDeSnapshots(info.getRollbackId()); } RollbackStore.deleteRollback(this); diff --git a/services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java b/services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java index 804c1b9e09fde..1a6c6b4011cd8 100644 --- a/services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java +++ b/services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java @@ -224,21 +224,43 @@ public class RollbackUnitTest { } @Test - public void snapshotThenDelete() { + public void snapshotThenDeleteNoApex() { Rollback rollback = new Rollback(123, new File("/test/testing"), -1, USER, INSTALLER); PackageRollbackInfo pkgInfo1 = newPkgInfoFor(PKG_1, 12, 10, false); - PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, true); + PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, false); rollback.info.getPackages().addAll(Arrays.asList(pkgInfo1, pkgInfo2)); - int[] userIds = {12, 18}; + int[] userIds = {111, 222}; rollback.snapshotUserData(PKG_2, userIds, mMockDataHelper); verify(mMockDataHelper).snapshotAppData(eq(123), pkgRollbackInfoFor(PKG_2), eq(userIds)); rollback.delete(mMockDataHelper); - verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(12)); - verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(18)); + verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(111)); + verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(222)); + verify(mMockDataHelper, never()).destroyApexDeSnapshots(anyInt()); + + assertThat(rollback.isDeleted()).isTrue(); + } + + @Test + public void snapshotThenDeleteWithApex() { + Rollback rollback = new Rollback(123, new File("/test/testing"), -1, USER, INSTALLER); + PackageRollbackInfo pkgInfo1 = newPkgInfoFor(PKG_1, 12, 10, false); + PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, true); + rollback.info.getPackages().addAll(Arrays.asList(pkgInfo1, pkgInfo2)); + + int[] userIds = {111, 222}; + rollback.snapshotUserData(PKG_2, userIds, mMockDataHelper); + + verify(mMockDataHelper).snapshotAppData(eq(123), pkgRollbackInfoFor(PKG_2), eq(userIds)); + + rollback.delete(mMockDataHelper); + + verify(mMockDataHelper, never()) + .destroyAppDataSnapshot(anyInt(), pkgRollbackInfoFor(PKG_2), anyInt()); + verify(mMockDataHelper).destroyApexDeSnapshots(123); assertThat(rollback.isDeleted()).isTrue(); }