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

Commit 21a63980 authored by Jakob Schneider's avatar Jakob Schneider Committed by Android (Google) Code Review
Browse files

Merge "Introduce an install flag for unarchivals after all." into main

parents 98a022d8 3baeec55
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -12606,6 +12606,7 @@ package android.content.pm {
    method public boolean isStagedSessionApplied();
    method public boolean isStagedSessionFailed();
    method public boolean isStagedSessionReady();
    method @FlaggedApi("android.content.pm.archiving") public boolean isUnarchival();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.content.pm.PackageInstaller.SessionInfo> CREATOR;
    field public static final int INVALID_ID = -1; // 0xffffffff
+11 −0
Original line number Diff line number Diff line
@@ -4381,6 +4381,17 @@ public class PackageInstaller {
            return pendingUserActionReason;
        }

        /**
         * Returns true if the session is an unarchival.
         *
         * @see PackageInstaller#requestUnarchive
         */
        @FlaggedApi(Flags.FLAG_ARCHIVING)
        public boolean isUnarchival() {
            return (installFlags & PackageManager.INSTALL_UNARCHIVE) != 0;
        }


        @Override
        public int describeContents() {
            return 0;
+11 −1
Original line number Diff line number Diff line
@@ -1517,6 +1517,7 @@ public abstract class PackageManager {
            INSTALL_REQUEST_UPDATE_OWNERSHIP,
            INSTALL_IGNORE_DEXOPT_PROFILE,
            INSTALL_UNARCHIVE_DRAFT,
            INSTALL_UNARCHIVE,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface InstallFlags {}
@@ -1764,12 +1765,21 @@ public abstract class PackageManager {
     * If set, then the session is a draft session created for an upcoming unarchival by its
     * installer.
     *
     * @see PackageInstaller#requestUnarchive(String)
     * @see PackageInstaller#requestUnarchive
     *
     * @hide
     */
    public static final int INSTALL_UNARCHIVE_DRAFT = 1 << 29;

    /**
     * If set, then the {@link PackageInstaller.Session} is an unarchival.
     *
     * @see PackageInstaller#requestUnarchive
     *
     * @hide
     */
    public static final int INSTALL_UNARCHIVE = 1 << 30;

    /**
     * Flag parameter for {@link #installPackage} to force a non-staged update of an APEX. This is
     * a development-only feature and should not be used on end user devices.
+12 −0
Original line number Diff line number Diff line
@@ -821,6 +821,18 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
            params.installFlags &= ~PackageManager.INSTALL_BYPASS_LOW_TARGET_SDK_BLOCK;
        }

        params.installFlags &= ~PackageManager.INSTALL_UNARCHIVE;
        if (Flags.archiving() && params.appPackageName != null) {
            PackageStateInternal ps = mPm.snapshotComputer().getPackageStateInternal(
                    params.appPackageName, SYSTEM_UID);
            if (ps != null
                    && PackageArchiver.isArchived(ps.getUserStateOrDefault(userId))
                    && PackageArchiver.getResponsibleInstallerPackage(ps)
                            .equals(requestedInstallerPackageName)) {
                params.installFlags |= PackageManager.INSTALL_UNARCHIVE;
            }
        }

        if ((params.installFlags & PackageManager.INSTALL_INSTANT_APP) != 0
                && !PackageManagerServiceUtils.isSystemOrRootOrShell(callingUid)
                && (snapshot.getFlagsForUid(callingUid) & ApplicationInfo.FLAG_SYSTEM)