diff options
| author | Ricky Wai <rickywai@google.com> | 2021-09-22 13:55:52 +0000 |
|---|---|---|
| committer | Ricky Wai <rickywai@google.com> | 2021-10-08 11:15:34 +0000 |
| commit | f038b502729602a2df569e4b07b0643f144d25b6 (patch) | |
| tree | 2e0125391767dc3e54ffda95d13b236651286f49 /core/java/android | |
| parent | a4378ef2339ee59157a84a835d81db91d20bf32c (diff) | |
Merge BroadcastOptions and ActivityOptions PendingIntent BAL flags and
remove @hide.
Bug: 192341120
Test: atest BackgroundActivityLaunchTest
Change-Id: Ic47b9fcd3620004f3bb178aa91e10ca8ec18c974
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ActivityOptions.java | 46 | ||||
| -rw-r--r-- | core/java/android/app/BroadcastOptions.java | 42 | ||||
| -rw-r--r-- | core/java/android/app/ComponentOptions.java | 76 |
3 files changed, 86 insertions, 78 deletions
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index 860224cc7256..c1b94787de24 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -69,7 +69,7 @@ import java.util.ArrayList; * {@link android.content.Context#startActivity(android.content.Intent, android.os.Bundle) * Context.startActivity(Intent, Bundle)} and related methods. */ -public class ActivityOptions { +public class ActivityOptions extends ComponentOptions { private static final String TAG = "ActivityOptions"; /** @@ -168,14 +168,6 @@ public class ActivityOptions { public static final String KEY_SPLASH_SCREEN_THEME = "android.activity.splashScreenTheme"; /** - * PendingIntent caller allows activity start even if PendingIntent creator is in background. - * This only works if the PendingIntent caller is allowed to start background activities, - * for example if it's in the foreground, or has BAL permission. - * @hide - */ - public static final String KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED = - "android.pendingIntent.backgroundActivityAllowed"; - /** * Callback for when the last frame of the animation is played. * @hide */ @@ -389,12 +381,6 @@ public class ActivityOptions { /** @hide */ public static final int ANIM_REMOTE_ANIMATION = 13; - /** - * Default value for KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED. - * @hide - **/ - public static final boolean PENDING_INTENT_BAL_ALLOWED_DEFAULT = true; - private String mPackageName; private Rect mLaunchBounds; private int mAnimationType = ANIM_UNDEFINED; @@ -446,7 +432,6 @@ public class ActivityOptions { private String mSplashScreenThemeResName; @SplashScreen.SplashScreenStyle private int mSplashScreenStyle; - private boolean mPendingIntentBalAllowed = PENDING_INTENT_BAL_ALLOWED_DEFAULT; private boolean mRemoveWithTaskOrganizer; private boolean mLaunchedFromBubble; private boolean mTransientLaunch; @@ -1096,13 +1081,12 @@ public class ActivityOptions { } private ActivityOptions() { + super(); } /** @hide */ public ActivityOptions(Bundle opts) { - // If the remote side sent us bad parcelables, they won't get the - // results they want, which is their loss. - opts.setDefusable(true); + super(opts); mPackageName = opts.getString(KEY_PACKAGE_NAME); try { @@ -1200,8 +1184,6 @@ public class ActivityOptions { mRemoteTransition = opts.getParcelable(KEY_REMOTE_TRANSITION); mOverrideTaskTransition = opts.getBoolean(KEY_OVERRIDE_TASK_TRANSITION); mSplashScreenThemeResName = opts.getString(KEY_SPLASH_SCREEN_THEME); - mPendingIntentBalAllowed = opts.getBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED, - PENDING_INTENT_BAL_ALLOWED_DEFAULT); mRemoveWithTaskOrganizer = opts.getBoolean(KEY_REMOVE_WITH_TASK_ORGANIZER); mLaunchedFromBubble = opts.getBoolean(KEY_LAUNCHED_FROM_BUBBLE); mTransientLaunch = opts.getBoolean(KEY_TRANSIENT_LAUNCH); @@ -1426,24 +1408,6 @@ public class ActivityOptions { } /** - * Set PendingIntent activity is allowed to be started in the background if the caller - * can start background activities. - * @hide - */ - public void setPendingIntentBackgroundActivityLaunchAllowed(boolean allowed) { - mPendingIntentBalAllowed = allowed; - } - - /** - * Get PendingIntent activity is allowed to be started in the background if the caller - * can start background activities. - * @hide - */ - public boolean isPendingIntentBackgroundActivityLaunchAllowed() { - return mPendingIntentBalAllowed; - } - - /** * Sets whether the activity is to be launched into LockTask mode. * * Use this option to start an activity in LockTask mode. Note that only apps permitted by @@ -1868,8 +1832,9 @@ public class ActivityOptions { * object; you must not modify it, but can supply it to the startActivity * methods that take an options Bundle. */ + @Override public Bundle toBundle() { - Bundle b = new Bundle(); + Bundle b = super.toBundle(); if (mPackageName != null) { b.putString(KEY_PACKAGE_NAME, mPackageName); } @@ -2016,7 +1981,6 @@ public class ActivityOptions { if (mSplashScreenThemeResName != null && !mSplashScreenThemeResName.isEmpty()) { b.putString(KEY_SPLASH_SCREEN_THEME, mSplashScreenThemeResName); } - b.putBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED, mPendingIntentBalAllowed); if (mRemoveWithTaskOrganizer) { b.putBoolean(KEY_REMOVE_WITH_TASK_ORGANIZER, mRemoveWithTaskOrganizer); } diff --git a/core/java/android/app/BroadcastOptions.java b/core/java/android/app/BroadcastOptions.java index 4e19abfa0d5b..4ca3beb39a46 100644 --- a/core/java/android/app/BroadcastOptions.java +++ b/core/java/android/app/BroadcastOptions.java @@ -34,7 +34,7 @@ import android.os.PowerExemptionManager.TempAllowListType; * {@hide} */ @SystemApi -public class BroadcastOptions { +public class BroadcastOptions extends ComponentOptions { private long mTemporaryAppAllowlistDuration; private @TempAllowListType int mTemporaryAppAllowlistType; private @ReasonCode int mTemporaryAppAllowlistReasonCode; @@ -43,7 +43,6 @@ public class BroadcastOptions { private int mMaxManifestReceiverApiLevel = Build.VERSION_CODES.CUR_DEVELOPMENT; private boolean mDontSendToRestrictedApps = false; private boolean mAllowBackgroundActivityStarts; - private boolean mPendingIntentBalAllowed = ActivityOptions.PENDING_INTENT_BAL_ALLOWED_DEFAULT; /** * How long to temporarily put an app on the power allowlist when executing this broadcast @@ -80,16 +79,6 @@ public class BroadcastOptions { "android:broadcast.dontSendToRestrictedApps"; /** - * PendingIntent caller allows activity start even if PendingIntent creator is in background. - * This only works if the PendingIntent caller is allowed to start background activities, - * for example if it's in the foreground, or has BAL permission. - * TODO: Merge it with ActivityOptions. - * @hide - */ - public static final String KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED = - "android.pendingIntent.backgroundActivityAllowed"; - - /** * Corresponds to {@link #setBackgroundActivityStartsAllowed}. */ private static final String KEY_ALLOW_BACKGROUND_ACTIVITY_STARTS = @@ -119,12 +108,14 @@ public class BroadcastOptions { } private BroadcastOptions() { + super(); resetTemporaryAppAllowlist(); } /** @hide */ @TestApi public BroadcastOptions(@NonNull Bundle opts) { + super(opts); // Match the logic in toBundle(). if (opts.containsKey(KEY_TEMPORARY_APP_ALLOWLIST_DURATION)) { mTemporaryAppAllowlistDuration = opts.getLong(KEY_TEMPORARY_APP_ALLOWLIST_DURATION); @@ -141,8 +132,6 @@ public class BroadcastOptions { mDontSendToRestrictedApps = opts.getBoolean(KEY_DONT_SEND_TO_RESTRICTED_APPS, false); mAllowBackgroundActivityStarts = opts.getBoolean(KEY_ALLOW_BACKGROUND_ACTIVITY_STARTS, false); - mPendingIntentBalAllowed = opts.getBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED, - ActivityOptions.PENDING_INTENT_BAL_ALLOWED_DEFAULT); } /** @@ -314,26 +303,6 @@ public class BroadcastOptions { } /** - * Set PendingIntent activity is allowed to be started in the background if the caller - * can start background activities. - * TODO: Merge it with ActivityOptions. - * @hide - */ - public void setPendingIntentBackgroundActivityLaunchAllowed(boolean allowed) { - mPendingIntentBalAllowed = allowed; - } - - /** - * Get PendingIntent activity is allowed to be started in the background if the caller - * can start background activities. - * TODO: Merge it with ActivityOptions. - * @hide - */ - public boolean isPendingIntentBackgroundActivityLaunchAllowed() { - return mPendingIntentBalAllowed; - } - - /** * Returns the created options as a Bundle, which can be passed to * {@link android.content.Context#sendBroadcast(android.content.Intent) * Context.sendBroadcast(Intent)} and related methods. @@ -341,8 +310,9 @@ public class BroadcastOptions { * object; you must not modify it, but can supply it to the sendBroadcast * methods that take an options Bundle. */ + @Override public Bundle toBundle() { - Bundle b = new Bundle(); + Bundle b = super.toBundle(); if (isTemporaryAppAllowlistSet()) { b.putLong(KEY_TEMPORARY_APP_ALLOWLIST_DURATION, mTemporaryAppAllowlistDuration); b.putInt(KEY_TEMPORARY_APP_ALLOWLIST_TYPE, mTemporaryAppAllowlistType); @@ -361,8 +331,6 @@ public class BroadcastOptions { if (mAllowBackgroundActivityStarts) { b.putBoolean(KEY_ALLOW_BACKGROUND_ACTIVITY_STARTS, true); } - // TODO: Add API for BroadcastOptions and have a shared base class with ActivityOptions. - b.putBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED, mPendingIntentBalAllowed); return b.isEmpty() ? null : b; } } diff --git a/core/java/android/app/ComponentOptions.java b/core/java/android/app/ComponentOptions.java new file mode 100644 index 000000000000..d50a73a1f4c2 --- /dev/null +++ b/core/java/android/app/ComponentOptions.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +import android.os.Bundle; + +/** + * @hide + */ +public class ComponentOptions { + + /** + * Default value for KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED. + * @hide + **/ + public static final boolean PENDING_INTENT_BAL_ALLOWED_DEFAULT = true; + + /** + * PendingIntent caller allows activity start even if PendingIntent creator is in background. + * This only works if the PendingIntent caller is allowed to start background activities, + * for example if it's in the foreground, or has BAL permission. + * @hide + */ + public static final String KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED = + "android.pendingIntent.backgroundActivityAllowed"; + + private boolean mPendingIntentBalAllowed = PENDING_INTENT_BAL_ALLOWED_DEFAULT; + + ComponentOptions() { + } + + ComponentOptions(Bundle opts) { + // If the remote side sent us bad parcelables, they won't get the + // results they want, which is their loss. + opts.setDefusable(true); + setPendingIntentBackgroundActivityLaunchAllowed( + opts.getBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED, + PENDING_INTENT_BAL_ALLOWED_DEFAULT)); + } + + /** + * Set PendingIntent activity is allowed to be started in the background if the caller + * can start background activities. + */ + public void setPendingIntentBackgroundActivityLaunchAllowed(boolean allowed) { + mPendingIntentBalAllowed = allowed; + } + + /** + * Get PendingIntent activity is allowed to be started in the background if the caller + * can start background activities. + */ + public boolean isPendingIntentBackgroundActivityLaunchAllowed() { + return mPendingIntentBalAllowed; + } + + public Bundle toBundle() { + Bundle b = new Bundle(); + b.putBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED, mPendingIntentBalAllowed); + return b; + } +} |
