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

Commit 5141a39f authored by Achim Thesmann's avatar Achim Thesmann Committed by Android (Google) Code Review
Browse files

Merge "Allow a PendingIntent's creator to revoke BAL privilege."

parents 243dd7a2 64c8239c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -4757,6 +4757,7 @@ package android.app {
    method public int getLaunchDisplayId();
    method public boolean getLockTaskMode();
    method public int getPendingIntentBackgroundActivityStartMode();
    method public int getPendingIntentCreatorBackgroundActivityStartMode();
    method public int getSplashScreenStyle();
    method @Deprecated public boolean isPendingIntentBackgroundActivityLaunchAllowed();
    method public boolean isShareIdentityEnabled();
@@ -4777,6 +4778,7 @@ package android.app {
    method public android.app.ActivityOptions setLockTaskEnabled(boolean);
    method @Deprecated public void setPendingIntentBackgroundActivityLaunchAllowed(boolean);
    method @NonNull public android.app.ActivityOptions setPendingIntentBackgroundActivityStartMode(int);
    method @NonNull public android.app.ActivityOptions setPendingIntentCreatorBackgroundActivityStartMode(int);
    method @NonNull public android.app.ActivityOptions setShareIdentityEnabled(boolean);
    method @NonNull public android.app.ActivityOptions setSplashScreenStyle(int);
    method public android.os.Bundle toBundle();
+38 −15
Original line number Diff line number Diff line
@@ -397,8 +397,8 @@ public class ActivityOptions extends ComponentOptions {
    /** See {@link #setDismissKeyguard()}. */
    private static final String KEY_DISMISS_KEYGUARD = "android.activity.dismissKeyguard";

    private static final String KEY_IGNORE_PENDING_INTENT_CREATOR_FOREGROUND_STATE =
            "android.activity.ignorePendingIntentCreatorForegroundState";
    private static final String KEY_PENDING_INTENT_CREATOR_BACKGROUND_ACTIVITY_START_MODE =
            "android.activity.pendingIntentCreatorBackgroundActivityStartMode";

    /**
     * @see #setLaunchCookie
@@ -499,7 +499,9 @@ public class ActivityOptions extends ComponentOptions {
    private boolean mTransientLaunch;
    private PictureInPictureParams mLaunchIntoPipParams;
    private boolean mDismissKeyguard;
    private boolean mIgnorePendingIntentCreatorForegroundState;
    @BackgroundActivityStartMode
    private int mPendingIntentCreatorBackgroundActivityStartMode =
            MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED;
    private boolean mDisableStartingWindow;

    /**
@@ -1307,8 +1309,9 @@ public class ActivityOptions extends ComponentOptions {
        mIsEligibleForLegacyPermissionPrompt =
                opts.getBoolean(KEY_LEGACY_PERMISSION_PROMPT_ELIGIBLE);
        mDismissKeyguard = opts.getBoolean(KEY_DISMISS_KEYGUARD);
        mIgnorePendingIntentCreatorForegroundState = opts.getBoolean(
                KEY_IGNORE_PENDING_INTENT_CREATOR_FOREGROUND_STATE);
        mPendingIntentCreatorBackgroundActivityStartMode = opts.getInt(
                KEY_PENDING_INTENT_CREATOR_BACKGROUND_ACTIVITY_START_MODE,
                MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED);
        mDisableStartingWindow = opts.getBoolean(KEY_DISABLE_STARTING_WINDOW);
    }

@@ -2009,19 +2012,38 @@ public class ActivityOptions extends ComponentOptions {
     * Sets background activity launch logic won't use pending intent creator foreground state.
     *
     * @hide
     * @deprecated use {@link #setPendingIntentCreatorBackgroundActivityStartMode(int)} instead
     */
    public ActivityOptions setIgnorePendingIntentCreatorForegroundState(boolean state) {
        mIgnorePendingIntentCreatorForegroundState = state;
    @Deprecated
    public ActivityOptions setIgnorePendingIntentCreatorForegroundState(boolean ignore) {
        mPendingIntentCreatorBackgroundActivityStartMode = ignore
                ? MODE_BACKGROUND_ACTIVITY_START_DENIED : MODE_BACKGROUND_ACTIVITY_START_ALLOWED;
        return this;
    }

    /**
     * @return whether background activity launch logic should use pending intent creator
     * foreground state.
     * @hide
     * Allow a {@link PendingIntent} to use the privilege of its creator to start background
     * activities.
     *
     * @param mode the {@link android.app.ComponentOptions.BackgroundActivityStartMode} being set
     * @throws IllegalArgumentException is the value is not a valid
     * {@link android.app.ComponentOptions.BackgroundActivityStartMode}
     */
    @NonNull
    public ActivityOptions setPendingIntentCreatorBackgroundActivityStartMode(
            @BackgroundActivityStartMode int mode) {
        mPendingIntentCreatorBackgroundActivityStartMode = mode;
        return this;
    }

    /**
     * Returns the mode to start background activities granted by the creator of the
     * {@link PendingIntent}.
     *
     * @return the {@link android.app.ComponentOptions.BackgroundActivityStartMode} currently set
     */
    public boolean getIgnorePendingIntentCreatorForegroundState() {
        return mIgnorePendingIntentCreatorForegroundState;
    public @BackgroundActivityStartMode int getPendingIntentCreatorBackgroundActivityStartMode() {
        return mPendingIntentCreatorBackgroundActivityStartMode;
    }

    /**
@@ -2295,9 +2317,10 @@ public class ActivityOptions extends ComponentOptions {
        if (mDismissKeyguard) {
            b.putBoolean(KEY_DISMISS_KEYGUARD, mDismissKeyguard);
        }
        if (mIgnorePendingIntentCreatorForegroundState) {
            b.putBoolean(KEY_IGNORE_PENDING_INTENT_CREATOR_FOREGROUND_STATE,
                    mIgnorePendingIntentCreatorForegroundState);
        if (mPendingIntentCreatorBackgroundActivityStartMode
                != MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED) {
            b.putInt(KEY_PENDING_INTENT_CREATOR_BACKGROUND_ACTIVITY_START_MODE,
                    mPendingIntentCreatorBackgroundActivityStartMode);
        }
        if (mDisableStartingWindow) {
            b.putBoolean(KEY_DISABLE_STARTING_WINDOW, mDisableStartingWindow);
+3 −1
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.BackgroundStartPrivileges;
import android.app.ComponentOptions;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -166,7 +167,8 @@ public class BackgroundActivityStartController {
        final boolean useCallingUidState =
                originatingPendingIntent == null
                        || checkedOptions == null
                        || !checkedOptions.getIgnorePendingIntentCreatorForegroundState();
                        || checkedOptions.getPendingIntentCreatorBackgroundActivityStartMode()
                                != ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_DENIED;
        if (useCallingUidState) {
            if (callingUid == Process.ROOT_UID
                    || callingAppId == Process.SYSTEM_UID
+2 −2
Original line number Diff line number Diff line
@@ -146,8 +146,8 @@ public class SafeActivityOptions {
                .setLaunchRootTask(options.getLaunchRootTask())
                .setPendingIntentBackgroundActivityStartMode(
                        options.getPendingIntentBackgroundActivityStartMode())
                .setIgnorePendingIntentCreatorForegroundState(
                        options.getIgnorePendingIntentCreatorForegroundState());
                .setPendingIntentCreatorBackgroundActivityStartMode(
                        options.getPendingIntentCreatorBackgroundActivityStartMode());
    }

    /**