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

Commit 1c73370d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Sending MY_PACKAGE_SUSPENDED to suspended apps" into pi-dev

parents 2ae75ba1 2fd43ba6
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -9905,6 +9905,8 @@ package android.content {
    field public static final java.lang.String ACTION_MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE";
    field public static final java.lang.String ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED";
    field public static final java.lang.String ACTION_MY_PACKAGE_REPLACED = "android.intent.action.MY_PACKAGE_REPLACED";
    field public static final java.lang.String ACTION_MY_PACKAGE_SUSPENDED = "android.intent.action.MY_PACKAGE_SUSPENDED";
    field public static final java.lang.String ACTION_MY_PACKAGE_UNSUSPENDED = "android.intent.action.MY_PACKAGE_UNSUSPENDED";
    field public static final java.lang.String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL";
    field public static final java.lang.String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT";
    field public static final java.lang.String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE";
@@ -10065,6 +10067,7 @@ package android.content {
    field public static final java.lang.String EXTRA_SPLIT_NAME = "android.intent.extra.SPLIT_NAME";
    field public static final java.lang.String EXTRA_STREAM = "android.intent.extra.STREAM";
    field public static final java.lang.String EXTRA_SUBJECT = "android.intent.extra.SUBJECT";
    field public static final java.lang.String EXTRA_SUSPENDED_PACKAGE_EXTRAS = "android.intent.extra.SUSPENDED_PACKAGE_EXTRAS";
    field public static final java.lang.String EXTRA_TEMPLATE = "android.intent.extra.TEMPLATE";
    field public static final java.lang.String EXTRA_TEXT = "android.intent.extra.TEXT";
    field public static final java.lang.String EXTRA_TITLE = "android.intent.extra.TITLE";
@@ -11178,7 +11181,7 @@ package android.content.pm {
    method public abstract android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
    method public android.os.PersistableBundle getSuspendedPackageAppExtras();
    method public android.os.Bundle getSuspendedPackageAppExtras();
    method public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
    method public abstract java.lang.String[] getSystemSharedLibraryNames();
    method public abstract java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo);
+4 −3
Original line number Diff line number Diff line
@@ -2167,15 +2167,16 @@ public class ApplicationPackageManager extends PackageManager {
    @Override
    public PersistableBundle getSuspendedPackageAppExtras(String packageName) {
        try {
            return mPM.getPackageSuspendedAppExtras(packageName, mContext.getUserId());
            return mPM.getSuspendedPackageAppExtras(packageName, mContext.getUserId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    @Override
    public PersistableBundle getSuspendedPackageAppExtras() {
        return getSuspendedPackageAppExtras(mContext.getOpPackageName());
    public Bundle getSuspendedPackageAppExtras() {
        final PersistableBundle extras = getSuspendedPackageAppExtras(mContext.getOpPackageName());
        return extras != null ? new Bundle(extras.deepCopy()) : null;
    }

    @Override
+48 −0
Original line number Diff line number Diff line
@@ -1813,6 +1813,17 @@ public class Intent implements Parcelable, Cloneable {
     */
    public static final String EXTRA_PACKAGE_NAME = "android.intent.extra.PACKAGE_NAME";

    /**
     * Intent extra: A {@link Bundle} of extras for a package being suspended. Will be sent with
     * {@link #ACTION_MY_PACKAGE_SUSPENDED}.
     *
     * @see #ACTION_MY_PACKAGE_SUSPENDED
     * @see #ACTION_MY_PACKAGE_UNSUSPENDED
     * @see PackageManager#isPackageSuspended()
     * @see PackageManager#getSuspendedPackageAppExtras()
     */
    public static final String EXTRA_SUSPENDED_PACKAGE_EXTRAS = "android.intent.extra.SUSPENDED_PACKAGE_EXTRAS";

    /**
     * Intent extra: An app split name.
     * <p>
@@ -2237,6 +2248,43 @@ public class Intent implements Parcelable, Cloneable {
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_PACKAGES_UNSUSPENDED = "android.intent.action.PACKAGES_UNSUSPENDED";

    /**
     * Broadcast Action: Sent to a package that has been suspended by the system. This is sent
     * whenever a package is put into a suspended state or any of it's app extras change while
     * in the suspended state.
     * <p> Optionally includes the following extras:
     * <ul>
     *     <li> {@link #EXTRA_SUSPENDED_PACKAGE_EXTRAS} which is a {@link Bundle} which will contain
     *     useful information for the app being suspended.
     * </ul>
     * <p class="note">This is a protected intent that can only be sent
     * by the system. <em>This will be delivered to {@link BroadcastReceiver} components declared in
     * the manifest.</em>
     *
     * @see #ACTION_MY_PACKAGE_UNSUSPENDED
     * @see #EXTRA_SUSPENDED_PACKAGE_EXTRAS
     * @see PackageManager#isPackageSuspended()
     * @see PackageManager#getSuspendedPackageAppExtras()
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_MY_PACKAGE_SUSPENDED = "android.intent.action.MY_PACKAGE_SUSPENDED";

    /**
     * Broadcast Action: Sent to a package that has been unsuspended.
     *
     * <p class="note">This is a protected intent that can only be sent
     * by the system. <em>This will be delivered to {@link BroadcastReceiver} components declared in
     * the manifest.</em>
     *
     * @see #ACTION_MY_PACKAGE_SUSPENDED
     * @see #EXTRA_SUSPENDED_PACKAGE_EXTRAS
     * @see PackageManager#isPackageSuspended()
     * @see PackageManager#getSuspendedPackageAppExtras()
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_MY_PACKAGE_UNSUSPENDED = "android.intent.action.MY_PACKAGE_UNSUSPENDED";

    /**
     * Broadcast Action: A user ID has been removed from the system.  The user
     * ID number is stored in the extra data under {@link #EXTRA_UID}.
+1 −1
Original line number Diff line number Diff line
@@ -278,7 +278,7 @@ interface IPackageManager {

    boolean isPackageSuspendedForUser(String packageName, int userId);

    PersistableBundle getPackageSuspendedAppExtras(String pacakgeName, int userId);
    PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId);

    void setSuspendedPackageAppExtras(String packageName, in PersistableBundle appExtras,
            int userId);
+25 −8
Original line number Diff line number Diff line
@@ -5513,7 +5513,7 @@ public abstract class PackageManager {
     * Puts the package in a suspended state, where attempts at starting activities are denied.
     *
     * <p>It doesn't remove the data or the actual package file. The application's notifications
     * will be hidden, any of the it's started activities will be stopped and it will not be able to
     * will be hidden, any of its started activities will be stopped and it will not be able to
     * show toasts or dialogs or ring the device. When the user tries to launch a suspended app, a
     * system dialog with the given {@code dialogMessage} will be shown instead.</p>
     *
@@ -5577,11 +5577,26 @@ public abstract class PackageManager {
    }

    /**
     * Apps can query this to know if they have been suspended.
     * Apps can query this to know if they have been suspended. A system app with the permission
     * {@code android.permission.SUSPEND_APPS} can put any app on the device into a suspended state.
     *
     * <p>While in this state, the application's notifications will be hidden, any of its started
     * activities will be stopped and it will not be able to show toasts or dialogs or ring the
     * device. When the user tries to launch a suspended app, the system will, instead, show a
     * dialog to the user informing them that they cannot use this app while it is suspended.
     *
     * <p>When an app is put into this state, the broadcast action
     * {@link Intent#ACTION_MY_PACKAGE_SUSPENDED} will be delivered to any of its broadcast
     * receivers that included this action in their intent-filters, <em>including manifest
     * receivers.</em> Similarly, a broadcast action {@link Intent#ACTION_MY_PACKAGE_UNSUSPENDED}
     * is delivered when a previously suspended app is taken out of this state.
     * </p>
     *
     * @return {@code true} if the calling package has been suspended, {@code false} otherwise.
     *
     * @see #getSuspendedPackageAppExtras()
     * @see Intent#ACTION_MY_PACKAGE_SUSPENDED
     * @see Intent#ACTION_MY_PACKAGE_UNSUSPENDED
     */
    public boolean isPackageSuspended() {
        throw new UnsupportedOperationException("isPackageSuspended not implemented");
@@ -5602,7 +5617,7 @@ public abstract class PackageManager {
     */
    @SystemApi
    @RequiresPermission(Manifest.permission.SUSPEND_APPS)
    public PersistableBundle getSuspendedPackageAppExtras(String packageName) {
    public @Nullable PersistableBundle getSuspendedPackageAppExtras(String packageName) {
        throw new UnsupportedOperationException("getSuspendedPackageAppExtras not implemented");
    }

@@ -5631,15 +5646,17 @@ public abstract class PackageManager {
     * Returns any extra information supplied as {@code appExtras} to the system when the calling
     * app was suspended.
     *
     * <p> Note: This just returns whatever {@link PersistableBundle} was passed to the system via
     * {@code setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle,
     * String)} when suspending the package, <em> which might be {@code null}. </em></p>
     * <p>Note: If no extras were supplied to the system, this method will return {@code null}, even
     * when the calling app has been suspended.</p>
     *
     * @return A {@link PersistableBundle} containing the extras for the app, or {@code null} if the
     * @return A {@link Bundle} containing the extras for the app, or {@code null} if the
     * package is not currently suspended.
     *
     * @see #isPackageSuspended()
     * @see Intent#ACTION_MY_PACKAGE_UNSUSPENDED
     * @see Intent#ACTION_MY_PACKAGE_SUSPENDED
     */
    public @Nullable PersistableBundle getSuspendedPackageAppExtras() {
    public @Nullable Bundle getSuspendedPackageAppExtras() {
        throw new UnsupportedOperationException("getSuspendedPackageAppExtras not implemented");
    }

Loading