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

Commit eab91a3b authored by Chun-Wei Wang's avatar Chun-Wei Wang Committed by Android (Google) Code Review
Browse files

Merge changes from topic "install_constraints"

* changes:
  Listen to UID importance changes
  Implement #waitForInstallConstraints
parents 4a796357 69896a9c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -10589,6 +10589,7 @@ package android.content {
    field public static final String EXTRA_MIME_TYPES = "android.intent.extra.MIME_TYPES";
    field public static final String EXTRA_NOT_UNKNOWN_SOURCE = "android.intent.extra.NOT_UNKNOWN_SOURCE";
    field public static final String EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI";
    field public static final String EXTRA_PACKAGES = "android.intent.extra.PACKAGES";
    field public static final String EXTRA_PACKAGE_NAME = "android.intent.extra.PACKAGE_NAME";
    field public static final String EXTRA_PERMISSION_GROUP_NAME = "android.intent.extra.PERMISSION_GROUP_NAME";
    field public static final String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
@@ -11718,9 +11719,12 @@ package android.content.pm {
    method public void unregisterSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback);
    method public void updateSessionAppIcon(int, @Nullable android.graphics.Bitmap);
    method public void updateSessionAppLabel(int, @Nullable CharSequence);
    method public void waitForInstallConstraints(@NonNull java.util.List<java.lang.String>, @NonNull android.content.pm.PackageInstaller.InstallConstraints, @NonNull android.content.IntentSender, long);
    field public static final String ACTION_SESSION_COMMITTED = "android.content.pm.action.SESSION_COMMITTED";
    field public static final String ACTION_SESSION_DETAILS = "android.content.pm.action.SESSION_DETAILS";
    field public static final String ACTION_SESSION_UPDATED = "android.content.pm.action.SESSION_UPDATED";
    field public static final String EXTRA_INSTALL_CONSTRAINTS = "android.content.pm.extra.INSTALL_CONSTRAINTS";
    field public static final String EXTRA_INSTALL_CONSTRAINTS_RESULT = "android.content.pm.extra.INSTALL_CONSTRAINTS_RESULT";
    field public static final String EXTRA_OTHER_PACKAGE_NAME = "android.content.pm.extra.OTHER_PACKAGE_NAME";
    field public static final String EXTRA_PACKAGE_NAME = "android.content.pm.extra.PACKAGE_NAME";
    field public static final String EXTRA_PRE_APPROVAL = "android.content.pm.extra.PRE_APPROVAL";
+0 −1
Original line number Diff line number Diff line
@@ -3319,7 +3319,6 @@ package android.content {
    field public static final String EXTRA_INSTANT_APP_TOKEN = "android.intent.extra.INSTANT_APP_TOKEN";
    field public static final String EXTRA_LONG_VERSION_CODE = "android.intent.extra.LONG_VERSION_CODE";
    field public static final String EXTRA_ORIGINATING_UID = "android.intent.extra.ORIGINATING_UID";
    field public static final String EXTRA_PACKAGES = "android.intent.extra.PACKAGES";
    field public static final String EXTRA_PERMISSION_NAME = "android.intent.extra.PERMISSION_NAME";
    field public static final String EXTRA_REASON = "android.intent.extra.REASON";
    field public static final String EXTRA_REMOTE_CALLBACK = "android.intent.extra.REMOTE_CALLBACK";
+1 −2
Original line number Diff line number Diff line
@@ -6117,9 +6117,8 @@ public class Intent implements Parcelable, Cloneable {
    public static final String EXTRA_UID = "android.intent.extra.UID";

    /**
     * @hide String array of package names.
     * String array of package names.
     */
    @SystemApi
    public static final String EXTRA_PACKAGES = "android.intent.extra.PACKAGES";

    /**
+3 −0
Original line number Diff line number Diff line
@@ -69,4 +69,7 @@ interface IPackageInstaller {
    void setSilentUpdatesThrottleTime(long throttleTimeInSeconds);
    void checkInstallConstraints(String installerPackageName, in List<String> packageNames,
            in PackageInstaller.InstallConstraints constraints, in RemoteCallback callback);
    void waitForInstallConstraints(String installerPackageName, in List<String> packageNames,
            in PackageInstaller.InstallConstraints constraints, in IntentSender callback,
            long timeout);
}
+83 −3
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static android.content.pm.Checksum.TYPE_WHOLE_SHA512;
import android.Manifest;
import android.annotation.CallbackExecutor;
import android.annotation.CurrentTimeMillisLong;
import android.annotation.DurationMillisLong;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -248,6 +249,24 @@ public class PackageInstaller {
     */
    public static final String EXTRA_STORAGE_PATH = "android.content.pm.extra.STORAGE_PATH";

    /**
     * The {@link InstallConstraints} object.
     *
     * @see Intent#getParcelableExtra(String, Class)
     * @see #waitForInstallConstraints(List, InstallConstraints, IntentSender, long)
     */
    public static final String EXTRA_INSTALL_CONSTRAINTS =
            "android.content.pm.extra.INSTALL_CONSTRAINTS";

    /**
     * The {@link InstallConstraintsResult} object.
     *
     * @see Intent#getParcelableExtra(String, Class)
     * @see #waitForInstallConstraints(List, InstallConstraints, IntentSender, long)
     */
    public static final String EXTRA_INSTALL_CONSTRAINTS_RESULT =
            "android.content.pm.extra.INSTALL_CONSTRAINTS_RESULT";

    /** {@hide} */
    @Deprecated
    public static final String EXTRA_PACKAGE_NAMES = "android.content.pm.extra.PACKAGE_NAMES";
@@ -884,6 +903,32 @@ public class PackageInstaller {
        }
    }

    /**
     * Similar to {@link #checkInstallConstraints(List, InstallConstraints, Executor, Consumer)},
     * but the callback is invoked only when the constraints are satisfied or after timeout.
     *
     * @param callback Called when the constraints are satisfied or after timeout.
     *                 Intents sent to this callback contain:
     *                 {@link Intent#EXTRA_PACKAGES} for the input package names,
     *                 {@link #EXTRA_INSTALL_CONSTRAINTS} for the input constraints,
     *                 {@link #EXTRA_INSTALL_CONSTRAINTS_RESULT} for the result.
     * @param timeoutMillis The maximum time to wait, in milliseconds until the constraints are
     *                      satisfied. Valid range is from 0 to one week. {@code 0} means the
     *                      callback will be invoked immediately no matter constraints are
     *                      satisfied or not.
     */
    public void waitForInstallConstraints(@NonNull List<String> packageNames,
            @NonNull InstallConstraints constraints,
            @NonNull IntentSender callback,
            @DurationMillisLong long timeoutMillis) {
        try {
            mInstaller.waitForInstallConstraints(
                    mInstallerPackageName, packageNames, constraints, callback, timeoutMillis);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Events for observing session lifecycle.
     * <p>
@@ -3807,7 +3852,7 @@ public class PackageInstaller {
     * Note the constraints are applied transitively. If app Foo is used by app Bar (via shared
     * library or bounded service), the constraints will also be applied to Bar.
     */
    @DataClass(genParcelable = true, genHiddenConstructor = true)
    @DataClass(genParcelable = true, genHiddenConstructor = true, genEqualsHashCode=true)
    public static final class InstallConstraints implements Parcelable {
        /**
         * Preset constraints suitable for gentle update.
@@ -3966,6 +4011,41 @@ public class PackageInstaller {
            return mRequireNotInCall;
        }

        @Override
        @DataClass.Generated.Member
        public boolean equals(@Nullable Object o) {
            // You can override field equality logic by defining either of the methods like:
            // boolean fieldNameEquals(InstallConstraints other) { ... }
            // boolean fieldNameEquals(FieldType otherValue) { ... }

            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            @SuppressWarnings("unchecked")
            InstallConstraints that = (InstallConstraints) o;
            //noinspection PointlessBooleanExpression
            return true
                    && mRequireDeviceIdle == that.mRequireDeviceIdle
                    && mRequireAppNotForeground == that.mRequireAppNotForeground
                    && mRequireAppNotInteracting == that.mRequireAppNotInteracting
                    && mRequireAppNotTopVisible == that.mRequireAppNotTopVisible
                    && mRequireNotInCall == that.mRequireNotInCall;
        }

        @Override
        @DataClass.Generated.Member
        public int hashCode() {
            // You can override field hashCode logic by defining methods like:
            // int fieldNameHashCode() { ... }

            int _hash = 1;
            _hash = 31 * _hash + Boolean.hashCode(mRequireDeviceIdle);
            _hash = 31 * _hash + Boolean.hashCode(mRequireAppNotForeground);
            _hash = 31 * _hash + Boolean.hashCode(mRequireAppNotInteracting);
            _hash = 31 * _hash + Boolean.hashCode(mRequireAppNotTopVisible);
            _hash = 31 * _hash + Boolean.hashCode(mRequireNotInCall);
            return _hash;
        }

        @Override
        @DataClass.Generated.Member
        public void writeToParcel(@NonNull Parcel dest, int flags) {
@@ -4023,10 +4103,10 @@ public class PackageInstaller {
        };

        @DataClass.Generated(
                time = 1668650523752L,
                time = 1670207178734L,
                codegenVersion = "1.0.23",
                sourceFile = "frameworks/base/core/java/android/content/pm/PackageInstaller.java",
                inputSignatures = "public static final @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints GENTLE_UPDATE\nprivate final  boolean mRequireDeviceIdle\nprivate final  boolean mRequireAppNotForeground\nprivate final  boolean mRequireAppNotInteracting\nprivate final  boolean mRequireAppNotTopVisible\nprivate final  boolean mRequireNotInCall\nclass InstallConstraints extends java.lang.Object implements [android.os.Parcelable]\nprivate  boolean mRequireDeviceIdle\nprivate  boolean mRequireAppNotForeground\nprivate  boolean mRequireAppNotInteracting\nprivate  boolean mRequireAppNotTopVisible\nprivate  boolean mRequireNotInCall\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireDeviceIdle()\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireAppNotForeground()\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireAppNotInteracting()\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireAppNotTopVisible()\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireNotInCall()\npublic @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints build()\nclass Builder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genParcelable=true, genHiddenConstructor=true)")
                inputSignatures = "public static final @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints GENTLE_UPDATE\nprivate final  boolean mRequireDeviceIdle\nprivate final  boolean mRequireAppNotForeground\nprivate final  boolean mRequireAppNotInteracting\nprivate final  boolean mRequireAppNotTopVisible\nprivate final  boolean mRequireNotInCall\nclass InstallConstraints extends java.lang.Object implements [android.os.Parcelable]\nprivate  boolean mRequireDeviceIdle\nprivate  boolean mRequireAppNotForeground\nprivate  boolean mRequireAppNotInteracting\nprivate  boolean mRequireAppNotTopVisible\nprivate  boolean mRequireNotInCall\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireDeviceIdle()\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireAppNotForeground()\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireAppNotInteracting()\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireAppNotTopVisible()\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints.Builder requireNotInCall()\npublic @android.annotation.NonNull android.content.pm.PackageInstaller.InstallConstraints build()\nclass Builder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genParcelable=true, genHiddenConstructor=true, genEqualsHashCode=true)")
        @Deprecated
        private void __metadata() {}

Loading