Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28bdd94c authored by Jakob Schneider's avatar Jakob Schneider
Browse files

Add broadcasts for archiving and unarchiving.

Bug: 290911359
Test: PackageInstallerArchiveTest
Change-Id: If37d3fda7de8419aa320c6cc9be6dce77231f5b8
parent c6444891
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -2548,6 +2548,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.
+2 −2
Original line number Diff line number Diff line
@@ -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);
+5 −1
Original line number Diff line number Diff line
@@ -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(
+2 −1
Original line number Diff line number Diff line
@@ -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(