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

Commit ef540d4f authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Rollback info API change. Added impact level to RollbackInfo." into main am: 88bcbfce

parents ff696bb5 88bcbfce
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -3935,6 +3935,7 @@ package android.content.pm {
    method public void setInstallAsInstantApp(boolean);
    method public void setInstallAsInstantApp(boolean);
    method public void setInstallAsVirtualPreload();
    method public void setInstallAsVirtualPreload();
    method public void setRequestDowngrade(boolean);
    method public void setRequestDowngrade(boolean);
    method @FlaggedApi("android.content.pm.recoverability_detection") @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void setRollbackImpactLevel(int);
    method @FlaggedApi("android.content.pm.rollback_lifetime") @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void setRollbackLifetimeMillis(long);
    method @FlaggedApi("android.content.pm.rollback_lifetime") @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void setRollbackLifetimeMillis(long);
    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged();
    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged();
  }
  }
@@ -4103,6 +4104,9 @@ package android.content.pm {
    field public static final int ROLLBACK_DATA_POLICY_RESTORE = 0; // 0x0
    field public static final int ROLLBACK_DATA_POLICY_RESTORE = 0; // 0x0
    field public static final int ROLLBACK_DATA_POLICY_RETAIN = 2; // 0x2
    field public static final int ROLLBACK_DATA_POLICY_RETAIN = 2; // 0x2
    field public static final int ROLLBACK_DATA_POLICY_WIPE = 1; // 0x1
    field public static final int ROLLBACK_DATA_POLICY_WIPE = 1; // 0x1
    field @FlaggedApi("android.content.pm.recoverability_detection") public static final int ROLLBACK_USER_IMPACT_HIGH = 1; // 0x1
    field @FlaggedApi("android.content.pm.recoverability_detection") public static final int ROLLBACK_USER_IMPACT_LOW = 0; // 0x0
    field @FlaggedApi("android.content.pm.recoverability_detection") public static final int ROLLBACK_USER_IMPACT_ONLY_MANUAL = 2; // 0x2
    field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN = 0; // 0x0
    field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN = 0; // 0x0
    field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_VISIBLE = 1; // 0x1
    field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_VISIBLE = 1; // 0x1
    field public static final int SYSTEM_APP_STATE_INSTALLED = 2; // 0x2
    field public static final int SYSTEM_APP_STATE_INSTALLED = 2; // 0x2
+4 −0
Original line number Original line Diff line number Diff line
@@ -1195,6 +1195,10 @@ package android.content.res {


package android.content.rollback {
package android.content.rollback {


  public final class RollbackInfo implements android.os.Parcelable {
    method @FlaggedApi("android.content.pm.recoverability_detection") public int getRollbackImpactLevel();
  }

  public final class RollbackManager {
  public final class RollbackManager {
    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void blockRollbackManager(long);
    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void blockRollbackManager(long);
    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void expireRollbackForPackage(@NonNull String);
    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void expireRollbackForPackage(@NonNull String);
+33 −0
Original line number Original line Diff line number Diff line
@@ -2687,6 +2687,8 @@ public class PackageInstaller {
        /** @hide */
        /** @hide */
        public long rollbackLifetimeMillis = 0;
        public long rollbackLifetimeMillis = 0;
        /** {@hide} */
        /** {@hide} */
        public int rollbackImpactLevel = PackageManager.ROLLBACK_USER_IMPACT_LOW;
        /** {@hide} */
        public boolean forceQueryableOverride;
        public boolean forceQueryableOverride;
        /** {@hide} */
        /** {@hide} */
        public int requireUserAction = USER_ACTION_UNSPECIFIED;
        public int requireUserAction = USER_ACTION_UNSPECIFIED;
@@ -2745,6 +2747,7 @@ public class PackageInstaller {
            }
            }
            rollbackDataPolicy = source.readInt();
            rollbackDataPolicy = source.readInt();
            rollbackLifetimeMillis = source.readLong();
            rollbackLifetimeMillis = source.readLong();
            rollbackImpactLevel = source.readInt();
            requireUserAction = source.readInt();
            requireUserAction = source.readInt();
            packageSource = source.readInt();
            packageSource = source.readInt();
            applicationEnabledSettingPersistent = source.readBoolean();
            applicationEnabledSettingPersistent = source.readBoolean();
@@ -2780,6 +2783,7 @@ public class PackageInstaller {
            ret.dataLoaderParams = dataLoaderParams;
            ret.dataLoaderParams = dataLoaderParams;
            ret.rollbackDataPolicy = rollbackDataPolicy;
            ret.rollbackDataPolicy = rollbackDataPolicy;
            ret.rollbackLifetimeMillis = rollbackLifetimeMillis;
            ret.rollbackLifetimeMillis = rollbackLifetimeMillis;
            ret.rollbackImpactLevel = rollbackImpactLevel;
            ret.requireUserAction = requireUserAction;
            ret.requireUserAction = requireUserAction;
            ret.packageSource = packageSource;
            ret.packageSource = packageSource;
            ret.applicationEnabledSettingPersistent = applicationEnabledSettingPersistent;
            ret.applicationEnabledSettingPersistent = applicationEnabledSettingPersistent;
@@ -3119,6 +3123,28 @@ public class PackageInstaller {
            rollbackLifetimeMillis = lifetimeMillis;
            rollbackLifetimeMillis = lifetimeMillis;
        }
        }


        /**
         * rollbackImpactLevel is a measure of impact a rollback has on the user. This can take one
         * of 3 values:
         * <ul>
         *     <li>{@link PackageManager#ROLLBACK_USER_IMPACT_LOW} (default)</li>
         *     <li>{@link PackageManager#ROLLBACK_USER_IMPACT_HIGH} (1)</li>
         *     <li>{@link PackageManager#ROLLBACK_USER_IMPACT_ONLY_MANUAL} (2)</li>
         * </ul>
         *
         * @hide
         */
        @SystemApi
        @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS)
        @FlaggedApi(Flags.FLAG_RECOVERABILITY_DETECTION)
        public void setRollbackImpactLevel(@PackageManager.RollbackImpactLevel int impactLevel) {
            if ((installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) == 0) {
                throw new IllegalArgumentException(
                        "Can't set rollbackImpactLevel when rollback is not enabled");
            }
            rollbackImpactLevel = impactLevel;
        }

        /**
        /**
         * @deprecated use {@link #setRequestDowngrade(boolean)}.
         * @deprecated use {@link #setRequestDowngrade(boolean)}.
         * {@hide}
         * {@hide}
@@ -3492,6 +3518,7 @@ public class PackageInstaller {
            pw.printPair("dataLoaderParams", dataLoaderParams);
            pw.printPair("dataLoaderParams", dataLoaderParams);
            pw.printPair("rollbackDataPolicy", rollbackDataPolicy);
            pw.printPair("rollbackDataPolicy", rollbackDataPolicy);
            pw.printPair("rollbackLifetimeMillis", rollbackLifetimeMillis);
            pw.printPair("rollbackLifetimeMillis", rollbackLifetimeMillis);
            pw.printPair("rollbackImpactLevel", rollbackImpactLevel);
            pw.printPair("applicationEnabledSettingPersistent",
            pw.printPair("applicationEnabledSettingPersistent",
                    applicationEnabledSettingPersistent);
                    applicationEnabledSettingPersistent);
            pw.printHexPair("developmentInstallFlags", developmentInstallFlags);
            pw.printHexPair("developmentInstallFlags", developmentInstallFlags);
@@ -3536,6 +3563,7 @@ public class PackageInstaller {
            }
            }
            dest.writeInt(rollbackDataPolicy);
            dest.writeInt(rollbackDataPolicy);
            dest.writeLong(rollbackLifetimeMillis);
            dest.writeLong(rollbackLifetimeMillis);
            dest.writeInt(rollbackImpactLevel);
            dest.writeInt(requireUserAction);
            dest.writeInt(requireUserAction);
            dest.writeInt(packageSource);
            dest.writeInt(packageSource);
            dest.writeBoolean(applicationEnabledSettingPersistent);
            dest.writeBoolean(applicationEnabledSettingPersistent);
@@ -3734,6 +3762,9 @@ public class PackageInstaller {
        /** @hide */
        /** @hide */
        public long rollbackLifetimeMillis;
        public long rollbackLifetimeMillis;


        /** {@hide} */
        public int rollbackImpactLevel;

        /** {@hide} */
        /** {@hide} */
        public int requireUserAction;
        public int requireUserAction;


@@ -3802,6 +3833,7 @@ public class PackageInstaller {
            isPreapprovalRequested = source.readBoolean();
            isPreapprovalRequested = source.readBoolean();
            rollbackDataPolicy = source.readInt();
            rollbackDataPolicy = source.readInt();
            rollbackLifetimeMillis = source.readLong();
            rollbackLifetimeMillis = source.readLong();
            rollbackImpactLevel = source.readInt();
            createdMillis = source.readLong();
            createdMillis = source.readLong();
            requireUserAction = source.readInt();
            requireUserAction = source.readInt();
            installerUid = source.readInt();
            installerUid = source.readInt();
@@ -4439,6 +4471,7 @@ public class PackageInstaller {
            dest.writeBoolean(isPreapprovalRequested);
            dest.writeBoolean(isPreapprovalRequested);
            dest.writeInt(rollbackDataPolicy);
            dest.writeInt(rollbackDataPolicy);
            dest.writeLong(rollbackLifetimeMillis);
            dest.writeLong(rollbackLifetimeMillis);
            dest.writeInt(rollbackImpactLevel);
            dest.writeLong(createdMillis);
            dest.writeLong(createdMillis);
            dest.writeInt(requireUserAction);
            dest.writeInt(requireUserAction);
            dest.writeInt(installerUid);
            dest.writeInt(installerUid);
+38 −0
Original line number Original line Diff line number Diff line
@@ -1493,6 +1493,44 @@ public abstract class PackageManager {
    @SystemApi
    @SystemApi
    public static final int ROLLBACK_DATA_POLICY_RETAIN = 2;
    public static final int ROLLBACK_DATA_POLICY_RETAIN = 2;


    /** @hide */
    @IntDef(prefix = {"ROLLBACK_USER_IMPACT_"}, value = {
            ROLLBACK_USER_IMPACT_LOW,
            ROLLBACK_USER_IMPACT_HIGH,
            ROLLBACK_USER_IMPACT_ONLY_MANUAL,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface RollbackImpactLevel {}

    /**
     * Rollback will be performed automatically in response to native crashes on startup or
     * persistent service crashes. More suitable for apps that do not store any user data.
     *
     * @hide
     */
    @SystemApi
    @FlaggedApi(android.content.pm.Flags.FLAG_RECOVERABILITY_DETECTION)
    public static final int ROLLBACK_USER_IMPACT_LOW = 0;

    /**
     * Rollback will be performed automatically only when the device is found to be unrecoverable.
     * More suitable for apps that store user data and have higher impact on user.
     *
     * @hide
     */
    @SystemApi
    @FlaggedApi(android.content.pm.Flags.FLAG_RECOVERABILITY_DETECTION)
    public static final int ROLLBACK_USER_IMPACT_HIGH = 1;

    /**
     * Rollback will not be performed automatically. It can be triggered externally.
     *
     * @hide
     */
    @SystemApi
    @FlaggedApi(android.content.pm.Flags.FLAG_RECOVERABILITY_DETECTION)
    public static final int ROLLBACK_USER_IMPACT_ONLY_MANUAL = 2;

    /** @hide */
    /** @hide */
    @IntDef(flag = true, prefix = { "INSTALL_" }, value = {
    @IntDef(flag = true, prefix = { "INSTALL_" }, value = {
            INSTALL_REPLACE_EXISTING,
            INSTALL_REPLACE_EXISTING,
+76 −30
Original line number Original line Diff line number Diff line
@@ -16,8 +16,12 @@


package android.content.rollback;
package android.content.rollback;


import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.content.pm.Flags;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.content.pm.VersionedPackage;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
@@ -25,17 +29,14 @@ import android.os.Parcelable;
import java.util.List;
import java.util.List;


/**
/**
 * Information about a set of packages that can be, or already have been
 * Information about a set of packages that can be, or already have been rolled back together.
 * rolled back together.
 *
 *
 * @hide
 * @hide
 */
 */
@SystemApi
@SystemApi
public final class RollbackInfo implements Parcelable {
public final class RollbackInfo implements Parcelable {


    /**
    /** A unique identifier for the rollback. */
     * A unique identifier for the rollback.
     */
    private final int mRollbackId;
    private final int mRollbackId;


    private final List<PackageRollbackInfo> mPackages;
    private final List<PackageRollbackInfo> mPackages;
@@ -44,15 +45,39 @@ public final class RollbackInfo implements Parcelable {


    private final boolean mIsStaged;
    private final boolean mIsStaged;
    private int mCommittedSessionId;
    private int mCommittedSessionId;
    private int mRollbackImpactLevel;


    /** @hide */
    /** @hide */
    public RollbackInfo(int rollbackId, List<PackageRollbackInfo> packages, boolean isStaged,
    public RollbackInfo(
            List<VersionedPackage> causePackages,  int committedSessionId) {
            int rollbackId,
            List<PackageRollbackInfo> packages,
            boolean isStaged,
            List<VersionedPackage> causePackages,
            int committedSessionId,
            @PackageManager.RollbackImpactLevel int rollbackImpactLevel) {
        this.mRollbackId = rollbackId;
        this.mRollbackId = rollbackId;
        this.mPackages = packages;
        this.mPackages = packages;
        this.mIsStaged = isStaged;
        this.mIsStaged = isStaged;
        this.mCausePackages = causePackages;
        this.mCausePackages = causePackages;
        this.mCommittedSessionId = committedSessionId;
        this.mCommittedSessionId = committedSessionId;
        this.mRollbackImpactLevel = rollbackImpactLevel;
    }

    /** @hide */
    public RollbackInfo(
            int rollbackId,
            List<PackageRollbackInfo> packages,
            boolean isStaged,
            List<VersionedPackage> causePackages,
            int committedSessionId) {
        // If impact level is not set default to 0
        this(
                rollbackId,
                packages,
                isStaged,
                causePackages,
                committedSessionId,
                PackageManager.ROLLBACK_USER_IMPACT_LOW);
    }
    }


    private RollbackInfo(Parcel in) {
    private RollbackInfo(Parcel in) {
@@ -61,34 +86,28 @@ public final class RollbackInfo implements Parcelable {
        mIsStaged = in.readBoolean();
        mIsStaged = in.readBoolean();
        mCausePackages = in.createTypedArrayList(VersionedPackage.CREATOR);
        mCausePackages = in.createTypedArrayList(VersionedPackage.CREATOR);
        mCommittedSessionId = in.readInt();
        mCommittedSessionId = in.readInt();
        mRollbackImpactLevel = in.readInt();
    }
    }


    /**
    /** Returns a unique identifier for this rollback. */
     * Returns a unique identifier for this rollback.
     */
    public int getRollbackId() {
    public int getRollbackId() {
        return mRollbackId;
        return mRollbackId;
    }
    }


    /**
    /** Returns the list of package that are rolled back. */
     * Returns the list of package that are rolled back.
     */
    @NonNull
    @NonNull
    public List<PackageRollbackInfo> getPackages() {
    public List<PackageRollbackInfo> getPackages() {
        return mPackages;
        return mPackages;
    }
    }


    /**
    /** Returns true if this rollback requires reboot to take effect after being committed. */
     * Returns true if this rollback requires reboot to take effect after
     * being committed.
     */
    public boolean isStaged() {
    public boolean isStaged() {
        return mIsStaged;
        return mIsStaged;
    }
    }


    /**
    /**
     * Returns the session ID for the committed rollback for staged rollbacks.
     * Returns the session ID for the committed rollback for staged rollbacks. Only applicable for
     * Only applicable for rollbacks that have been committed.
     * rollbacks that have been committed.
     */
     */
    public int getCommittedSessionId() {
    public int getCommittedSessionId() {
        return mCommittedSessionId;
        return mCommittedSessionId;
@@ -96,6 +115,7 @@ public final class RollbackInfo implements Parcelable {


    /**
    /**
     * Sets the session ID for the committed rollback for staged rollbacks.
     * Sets the session ID for the committed rollback for staged rollbacks.
     *
     * @hide
     * @hide
     */
     */
    public void setCommittedSessionId(int sessionId) {
    public void setCommittedSessionId(int sessionId) {
@@ -103,15 +123,40 @@ public final class RollbackInfo implements Parcelable {
    }
    }


    /**
    /**
     * Gets the list of package versions that motivated this rollback.
     * Gets the list of package versions that motivated this rollback. As provided to {@link
     * As provided to {@link #commitRollback} when the rollback was committed.
     * #commitRollback} when the rollback was committed. This is only applicable for rollbacks that
     * This is only applicable for rollbacks that have been committed.
     * have been committed.
     */
     */
    @NonNull
    @NonNull
    public List<VersionedPackage> getCausePackages() {
    public List<VersionedPackage> getCausePackages() {
        return mCausePackages;
        return mCausePackages;
    }
    }


    /**
     * Get rollback impact level. Refer {@link
     * android.content.pm.PackageInstaller.SessionParams#setRollbackImpactLevel(int)} for more info
     * on impact level.
     *
     * @hide
     */
    @TestApi
    @FlaggedApi(Flags.FLAG_RECOVERABILITY_DETECTION)
    public @PackageManager.RollbackImpactLevel int getRollbackImpactLevel() {
        return mRollbackImpactLevel;
    }

    /**
     * Set rollback impact level. Refer {@link
     * android.content.pm.PackageInstaller.SessionParams#setRollbackImpactLevel(int)} for more info
     * on impact level.
     *
     * @hide
     */
    public void setRollbackImpactLevel(
            @PackageManager.RollbackImpactLevel int rollbackImpactLevel) {
        mRollbackImpactLevel = rollbackImpactLevel;
    }

    @Override
    @Override
    public int describeContents() {
    public int describeContents() {
        return 0;
        return 0;
@@ -124,6 +169,7 @@ public final class RollbackInfo implements Parcelable {
        out.writeBoolean(mIsStaged);
        out.writeBoolean(mIsStaged);
        out.writeTypedList(mCausePackages);
        out.writeTypedList(mCausePackages);
        out.writeInt(mCommittedSessionId);
        out.writeInt(mCommittedSessionId);
        out.writeInt(mRollbackImpactLevel);
    }
    }


    public static final @android.annotation.NonNull Parcelable.Creator<RollbackInfo> CREATOR =
    public static final @android.annotation.NonNull Parcelable.Creator<RollbackInfo> CREATOR =
Loading