summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jakob Schneider <jakobschneider@google.com> 2023-09-21 14:46:58 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-09-21 14:46:58 +0000
commitcc4b586e39f78f9826b6b1671f8a0bce28c4c1fb (patch)
tree28114ae99dc089c0e55eddd66fba81c2ec6aae76
parent3c0ab176c41740e1f13c33dffa4df07532ef5275 (diff)
parent28bdd94cf0909eb9500fd521cd84d7f400228e72 (diff)
Merge "Add broadcasts for archiving and unarchiving." into main
-rw-r--r--core/java/android/content/pm/PackageManager.java9
-rw-r--r--services/core/java/com/android/server/pm/DeletePackageHelper.java4
-rw-r--r--services/core/java/com/android/server/pm/PackageArchiver.java6
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/pm/PackageArchiverTest.java3
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(