diff options
| author | 2023-09-21 14:46:58 +0000 | |
|---|---|---|
| committer | 2023-09-21 14:46:58 +0000 | |
| commit | cc4b586e39f78f9826b6b1671f8a0bce28c4c1fb (patch) | |
| tree | 28114ae99dc089c0e55eddd66fba81c2ec6aae76 | |
| parent | 3c0ab176c41740e1f13c33dffa4df07532ef5275 (diff) | |
| parent | 28bdd94cf0909eb9500fd521cd84d7f400228e72 (diff) | |
Merge "Add broadcasts for archiving and unarchiving." into main
4 files changed, 18 insertions, 4 deletions
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index cdab431558df..3bd6a099ba2f 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -2549,6 +2549,15 @@ public abstract class PackageManager { public static final int DELETE_DONT_KILL_APP = 0x00000008; /** + * Flag parameter for {@link #deletePackage} to indicate that the deletion is an archival. This + * flag is only for internal usage as part of + * {@link PackageInstaller#requestArchive(String, IntentSender)}. + * + * @hide + */ + public static final int DELETE_ARCHIVE = 0x00000010; + + /** * Flag parameter for {@link #deletePackage} to indicate that package deletion * should be chatty. * diff --git a/services/core/java/com/android/server/pm/DeletePackageHelper.java b/services/core/java/com/android/server/pm/DeletePackageHelper.java index 7d59210044d0..caf263dac823 100644 --- a/services/core/java/com/android/server/pm/DeletePackageHelper.java +++ b/services/core/java/com/android/server/pm/DeletePackageHelper.java @@ -24,6 +24,7 @@ import static android.content.pm.PackageManager.DELETE_KEEP_DATA; import static android.content.pm.PackageManager.DELETE_SUCCEEDED; import static android.content.pm.PackageManager.MATCH_KNOWN_PACKAGES; import static android.content.pm.PackageManager.PERMISSION_GRANTED; + import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.PackageManagerService.DEBUG_COMPRESSION; import static com.android.server.pm.PackageManagerService.DEBUG_REMOVE; @@ -119,8 +120,6 @@ final class DeletePackageHelper { */ public int deletePackageX(String packageName, long versionCode, int userId, int deleteFlags, boolean removedBySystem) { - final boolean isArchived = false; // TODO(b/278553670) Pass true during archival. - final PackageRemovedInfo info = new PackageRemovedInfo(mPm); final boolean res; @@ -250,6 +249,7 @@ final class DeletePackageHelper { if (res) { final boolean killApp = (deleteFlags & PackageManager.DELETE_DONT_KILL_APP) == 0; + final boolean isArchived = (deleteFlags & PackageManager.DELETE_ARCHIVE) != 0; info.sendPackageRemovedBroadcasts(killApp, removedBySystem, isArchived); info.sendSystemPackageUpdatedBroadcasts(); PackageMetrics.onUninstallSucceeded(info, deleteFlags, removeUser); diff --git a/services/core/java/com/android/server/pm/PackageArchiver.java b/services/core/java/com/android/server/pm/PackageArchiver.java index e8be748a85d1..803b6e45cdca 100644 --- a/services/core/java/com/android/server/pm/PackageArchiver.java +++ b/services/core/java/com/android/server/pm/PackageArchiver.java @@ -17,6 +17,7 @@ package com.android.server.pm; import static android.app.ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_DENIED; +import static android.content.pm.PackageManager.DELETE_ARCHIVE; import static android.content.pm.PackageManager.DELETE_KEEP_DATA; import static android.os.PowerExemptionManager.REASON_PACKAGE_UNARCHIVE; import static android.os.PowerExemptionManager.TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED; @@ -142,7 +143,10 @@ public class PackageArchiver { mPm.mInstallerService.uninstall( new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST), - callerPackageName, DELETE_KEEP_DATA, intentSender, userId, + callerPackageName, + DELETE_ARCHIVE | DELETE_KEEP_DATA, + intentSender, + userId, binderUid); }) .exceptionally( diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java index 614fd11e0517..b97fd4b3277b 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java @@ -17,6 +17,7 @@ package com.android.server.pm; import static android.content.Intent.FLAG_RECEIVER_FOREGROUND; +import static android.content.pm.PackageManager.DELETE_ARCHIVE; import static android.content.pm.PackageManager.DELETE_KEEP_DATA; import static com.google.common.truth.Truth.assertThat; @@ -275,7 +276,7 @@ public class PackageArchiverTest { verify(mInstallerService).uninstall( eq(new VersionedPackage(PACKAGE, PackageManager.VERSION_CODE_HIGHEST)), - eq(CALLER_PACKAGE), eq(DELETE_KEEP_DATA), eq(mIntentSender), + eq(CALLER_PACKAGE), eq(DELETE_ARCHIVE | DELETE_KEEP_DATA), eq(mIntentSender), eq(UserHandle.CURRENT.getIdentifier()), anyInt()); assertThat(mPackageSetting.readUserState( UserHandle.CURRENT.getIdentifier()).getArchiveState()).isEqualTo( |