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

Commit c6924e68 authored by Songchun Fan's avatar Songchun Fan
Browse files

[pm/incremental/api] exposing package state names and reasons

We would like to expose package states and unstartable reasons to public
APIs. Two main users will be:
1) sys UI, which will display alert windows on top of a foreground app
when the package becomes unstartable, with different contents in the alert
window based on the reason code.

2) Play Store, which will collect package state change information which
will be used to determine future package delivery strategies.

Test: will add CTS tests.
BUG: 162600626
CTS-Coverage-Bug: 168925819
Change-Id: I71bafb36b230ea93b34e8556b57563e4ba3b837d
parent 3ab24543
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -10667,12 +10667,15 @@ package android.content {
    field public static final String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED";
    field public static final String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED";
    field public static final String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH";
    field public static final String ACTION_PACKAGE_FULLY_LOADED = "android.intent.action.PACKAGE_FULLY_LOADED";
    field public static final String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED";
    field @Deprecated public static final String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL";
    field public static final String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION";
    field public static final String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
    field public static final String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";
    field public static final String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
    field public static final String ACTION_PACKAGE_STARTABLE = "android.intent.action.PACKAGE_STARTABLE";
    field public static final String ACTION_PACKAGE_UNSTARTABLE = "android.intent.action.PACKAGE_UNSTARTABLE";
    field public static final String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED";
    field public static final String ACTION_PASTE = "android.intent.action.PASTE";
    field public static final String ACTION_PICK = "android.intent.action.PICK";
@@ -10837,6 +10840,7 @@ package android.content {
    field public static final String EXTRA_TIMEZONE = "time-zone";
    field public static final String EXTRA_TITLE = "android.intent.extra.TITLE";
    field public static final String EXTRA_UID = "android.intent.extra.UID";
    field public static final String EXTRA_UNSTARTABLE_REASON = "android.intent.extra.UNSTARTABLE_REASON";
    field public static final String EXTRA_USER = "android.intent.extra.USER";
    field public static final int FILL_IN_ACTION = 1; // 0x1
    field public static final int FILL_IN_CATEGORIES = 4; // 0x4
@@ -12296,6 +12300,9 @@ package android.content.pm {
    field public static final int SYNCHRONOUS = 2; // 0x2
    field @Nullable public static final java.util.List<java.security.cert.Certificate> TRUST_ALL;
    field @NonNull public static final java.util.List<java.security.cert.Certificate> TRUST_NONE;
    field public static final int UNSTARTABLE_REASON_CONNECTION_ERROR = 1; // 0x1
    field public static final int UNSTARTABLE_REASON_INSUFFICIENT_STORAGE = 2; // 0x2
    field public static final int UNSTARTABLE_REASON_UNKNOWN = 0; // 0x0
    field public static final int VERIFICATION_ALLOW = 1; // 0x1
    field public static final int VERIFICATION_REJECT = -1; // 0xffffffff
    field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff
+9 −4
Original line number Diff line number Diff line
@@ -2744,7 +2744,6 @@ public class Intent implements Parcelable, Cloneable {
     * </ul>
     *
     * <p class="note">This is a protected intent that can only be sent by the system.
     * @hide
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_PACKAGE_STARTABLE = "android.intent.action.PACKAGE_STARTABLE";
@@ -2755,13 +2754,13 @@ public class Intent implements Parcelable, Cloneable {
     * <ul>
     * <li> {@link #EXTRA_UID} containing the integer uid assigned to the package. </li>
     * <li> {@link #EXTRA_PACKAGE_NAME} containing the package name. </li>
     * <li> {@link #EXTRA_REASON} containing the integer indicating the reason for the state change,
     * <li> {@link #EXTRA_UNSTARTABLE_REASON} containing the integer indicating the reason for
     * the state change,
     * @see PackageManager.UnstartableReason
     * </li>
     * </ul>
     *
     * <p class="note">This is a protected intent that can only be sent by the system.
     * @hide
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_PACKAGE_UNSTARTABLE =
@@ -2776,7 +2775,6 @@ public class Intent implements Parcelable, Cloneable {
     * </ul>
     *
     * <p class="note">This is a protected intent that can only be sent by the system.
     * @hide
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_PACKAGE_FULLY_LOADED =
@@ -6015,6 +6013,13 @@ public class Intent implements Parcelable, Cloneable {
     */
    public static final String EXTRA_LOCUS_ID = "android.intent.extra.LOCUS_ID";

    /**
     * Intent extra: the reason that the package associated with this intent has become unstartable.
     *
     * <p>Type: String
     */
    public static final String EXTRA_UNSTARTABLE_REASON = "android.intent.extra.UNSTARTABLE_REASON";

    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // Intent flags (see mFlags variable).
+6 −9
Original line number Diff line number Diff line
@@ -3790,8 +3790,8 @@ public abstract class PackageManager {
     * @hide
     */
    @IntDef({UNSTARTABLE_REASON_UNKNOWN,
            UNSTARTABLE_REASON_DATALOADER_TRANSPORT,
            UNSTARTABLE_REASON_DATALOADER_STORAGE
            UNSTARTABLE_REASON_CONNECTION_ERROR,
            UNSTARTABLE_REASON_INSUFFICIENT_STORAGE
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface UnstartableReason {}
@@ -3800,23 +3800,20 @@ public abstract class PackageManager {
     * Unstartable state with no root cause specified. E.g., data loader seeing missing pages but
     * unclear about the cause. This corresponds to a generic alert window shown to the user when
     * the user attempts to launch the app.
     * @hide
     */
    public static final int UNSTARTABLE_REASON_UNKNOWN = 0;

    /**
     * Unstartable state after hint from dataloader of issues with the transport layer.
     * This corresponds to an alert window shown to the user indicating network errors.
     * @hide
     * Unstartable state due to connection issues that interrupt package loading.
     * This corresponds to an alert window shown to the user indicating connection errors.
     */
    public static final int UNSTARTABLE_REASON_DATALOADER_TRANSPORT = 1;
    public static final int UNSTARTABLE_REASON_CONNECTION_ERROR = 1;

    /**
     * Unstartable state after encountering storage limitations.
     * This corresponds to an alert window indicating limited storage.
     * @hide
     */
    public static final int UNSTARTABLE_REASON_DATALOADER_STORAGE = 2;
    public static final int UNSTARTABLE_REASON_INSUFFICIENT_STORAGE = 2;

    /** {@hide} */
    public int getUserId() {
+7 −0
Original line number Diff line number Diff line
@@ -10667,12 +10667,15 @@ package android.content {
    field public static final String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED";
    field public static final String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED";
    field public static final String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH";
    field public static final String ACTION_PACKAGE_FULLY_LOADED = "android.intent.action.PACKAGE_FULLY_LOADED";
    field public static final String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED";
    field @Deprecated public static final String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL";
    field public static final String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION";
    field public static final String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
    field public static final String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";
    field public static final String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
    field public static final String ACTION_PACKAGE_STARTABLE = "android.intent.action.PACKAGE_STARTABLE";
    field public static final String ACTION_PACKAGE_UNSTARTABLE = "android.intent.action.PACKAGE_UNSTARTABLE";
    field public static final String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED";
    field public static final String ACTION_PASTE = "android.intent.action.PASTE";
    field public static final String ACTION_PICK = "android.intent.action.PICK";
@@ -10837,6 +10840,7 @@ package android.content {
    field public static final String EXTRA_TIMEZONE = "time-zone";
    field public static final String EXTRA_TITLE = "android.intent.extra.TITLE";
    field public static final String EXTRA_UID = "android.intent.extra.UID";
    field public static final String EXTRA_UNSTARTABLE_REASON = "android.intent.extra.UNSTARTABLE_REASON";
    field public static final String EXTRA_USER = "android.intent.extra.USER";
    field public static final int FILL_IN_ACTION = 1; // 0x1
    field public static final int FILL_IN_CATEGORIES = 4; // 0x4
@@ -12296,6 +12300,9 @@ package android.content.pm {
    field public static final int SYNCHRONOUS = 2; // 0x2
    field @Nullable public static final java.util.List<java.security.cert.Certificate> TRUST_ALL;
    field @NonNull public static final java.util.List<java.security.cert.Certificate> TRUST_NONE;
    field public static final int UNSTARTABLE_REASON_CONNECTION_ERROR = 1; // 0x1
    field public static final int UNSTARTABLE_REASON_INSUFFICIENT_STORAGE = 2; // 0x2
    field public static final int UNSTARTABLE_REASON_UNKNOWN = 0; // 0x0
    field public static final int VERIFICATION_ALLOW = 1; // 0x1
    field public static final int VERIFICATION_REJECT = -1; // 0xffffffff
    field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff
+2 −2
Original line number Diff line number Diff line
@@ -376,10 +376,10 @@ public final class IncrementalStates {
                case IDataLoaderStatusListener.STREAM_INTEGRITY_ERROR:
                    // fall through
                case IDataLoaderStatusListener.STREAM_SOURCE_ERROR: {
                    return PackageManager.UNSTARTABLE_REASON_DATALOADER_TRANSPORT;
                    return PackageManager.UNSTARTABLE_REASON_CONNECTION_ERROR;
                }
                case IDataLoaderStatusListener.STREAM_STORAGE_ERROR: {
                    return PackageManager.UNSTARTABLE_REASON_DATALOADER_STORAGE;
                    return PackageManager.UNSTARTABLE_REASON_INSUFFICIENT_STORAGE;
                }
                default:
                    return PackageManager.UNSTARTABLE_REASON_UNKNOWN;
Loading