diff options
| author | Winson Chung <winsonc@google.com> | 2020-03-12 22:39:22 -0700 |
|---|---|---|
| committer | Winson Chung <winsonc@google.com> | 2020-03-18 11:44:34 -0700 |
| commit | 8a16890698f7a23a39bf8acc538203cb69324378 (patch) | |
| tree | 29e82ca090c886f7629a8a46ea7a6ce4ab6f9d0c /core/java/android/app/ActivityOptions.java | |
| parent | 10e5f365502d7c5bbdd3857b0105338736c1a218 (diff) | |
Update some policy around multi-window windowing mode
- Allow SysUI to start task in always-on-top mode to ensure
visibility and to allow SysUI to control the visibility using
the WCT setHidden call.
- Expose unregisterTaskOrganizer call for SysUI
- Skip dispatching status/nav bar insets for always on top mw
tasks. Since they are effectively floating, it doesn't make
sense for us to send bar insets
- Fix issue with preferred windowing mode being referenced too
early (before computeLaunchParams), and apply the windowing
mode to the root task when it is brought forward
Bug: 151392361
Test: atest WmTests:ActivityOptionsTest
Test: atest InsetsStateControllerTest
Change-Id: Ia3d8a369c902928e8de51a6b7479b10848ebe44a
Diffstat (limited to 'core/java/android/app/ActivityOptions.java')
| -rw-r--r-- | core/java/android/app/ActivityOptions.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index 4aacf4879c43..7fd0211215c5 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -209,6 +209,12 @@ public class ActivityOptions { "android.activity.pendingIntentLaunchFlags"; /** + * See {@link #setTaskAlwaysOnTop}. + * @hide + */ + private static final String KEY_TASK_ALWAYS_ON_TOP = "android.activity.alwaysOnTop"; + + /** * See {@link #setTaskOverlay}. * @hide */ @@ -337,6 +343,7 @@ public class ActivityOptions { private int mSplitScreenCreateMode = SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; private boolean mLockTaskMode = false; private boolean mDisallowEnterPictureInPictureWhileLaunching; + private boolean mTaskAlwaysOnTop; private boolean mTaskOverlay; private boolean mTaskOverlayCanResume; private boolean mAvoidMoveToFront; @@ -971,6 +978,7 @@ public class ActivityOptions { mLaunchActivityType = opts.getInt(KEY_LAUNCH_ACTIVITY_TYPE, ACTIVITY_TYPE_UNDEFINED); mLaunchTaskId = opts.getInt(KEY_LAUNCH_TASK_ID, -1); mPendingIntentLaunchFlags = opts.getInt(KEY_PENDING_INTENT_LAUNCH_FLAGS, 0); + mTaskAlwaysOnTop = opts.getBoolean(KEY_TASK_ALWAYS_ON_TOP, false); mTaskOverlay = opts.getBoolean(KEY_TASK_OVERLAY, false); mTaskOverlayCanResume = opts.getBoolean(KEY_TASK_OVERLAY_CAN_RESUME, false); mAvoidMoveToFront = opts.getBoolean(KEY_AVOID_MOVE_TO_FRONT, false); @@ -1300,6 +1308,22 @@ public class ActivityOptions { } /** + * Set's whether the task for the activity launched with this option should always be on top. + * @hide + */ + @TestApi + public void setTaskAlwaysOnTop(boolean alwaysOnTop) { + mTaskAlwaysOnTop = alwaysOnTop; + } + + /** + * @hide + */ + public boolean getTaskAlwaysOnTop() { + return mTaskAlwaysOnTop; + } + + /** * Set's whether the activity launched with this option should be a task overlay. That is the * activity will always be the top activity of the task. * @param canResume {@code false} if the task will also not be moved to the front of the stack. @@ -1556,6 +1580,9 @@ public class ActivityOptions { if (mPendingIntentLaunchFlags != 0) { b.putInt(KEY_PENDING_INTENT_LAUNCH_FLAGS, mPendingIntentLaunchFlags); } + if (mTaskAlwaysOnTop) { + b.putBoolean(KEY_TASK_ALWAYS_ON_TOP, mTaskAlwaysOnTop); + } if (mTaskOverlay) { b.putBoolean(KEY_TASK_OVERLAY, mTaskOverlay); } |
