Support for activity to opt-in/out of resizeable/multi-window support.
Bug: 19178148
Change-Id: I5819a71cdc48e0af4add11a6d4a503ec5cbe5d63
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 91013ef..73c8439 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -239,6 +239,9 @@
final ActivityStackSupervisor mStackSupervisor;
Configuration mOverrideConfig;
+ /** True if the stack was forced to full screen because {@link TaskRecord#mResizeable} is false
+ * and the stack was previously resized. */
+ private boolean mForcedFullscreen = false;
static final int PAUSE_TIMEOUT_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 1;
static final int DESTROY_TIMEOUT_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 2;
@@ -3646,6 +3649,24 @@
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
"Ensuring correct configuration: " + r);
+ // Make sure the current stack override configuration is supported by the top task
+ // before continuing.
+ final TaskRecord topTask = topTask();
+ if (topTask != null && ((topTask.mResizeable && mForcedFullscreen)
+ || (!topTask.mResizeable && !mFullscreen))) {
+ final boolean prevFullscreen = mFullscreen;
+ final Configuration newOverrideConfig =
+ mWindowManager.forceStackToFullscreen(mStackId, !topTask.mResizeable);
+ updateOverrideConfiguration(newOverrideConfig);
+ mForcedFullscreen = !prevFullscreen && mFullscreen;
+ if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG,
+ "Updated stack config to support task=" + topTask
+ + " resizeable=" + topTask.mResizeable
+ + " mForcedFullscreen=" + mForcedFullscreen
+ + " prevFullscreen=" + prevFullscreen
+ + " mFullscreen=" + mFullscreen);
+ }
+
// Short circuit: if the two configurations are the exact same
// object (the common case), then there is nothing to do.
Configuration newConfig = mService.mConfiguration;
@@ -4121,7 +4142,7 @@
}
ArrayList<TaskRecord> getAllTasks() {
- return new ArrayList<TaskRecord>(mTaskHistory);
+ return new ArrayList<>(mTaskHistory);
}
void addTask(final TaskRecord task, final boolean toTop, boolean moving) {
@@ -4153,9 +4174,9 @@
boolean updateOverrideConfiguration(Configuration newConfig) {
Configuration oldConfig = mOverrideConfig;
mOverrideConfig = (newConfig == null) ? Configuration.EMPTY : newConfig;
- // we override the configuration only when the stack's dimensions are different from
- // the display. in this manner, we know that if the override configuration is empty,
- // the stack is necessarily full screen
+ // We override the configuration only when the stack's dimensions are different from
+ // the display. In this manner, we know that if the override configuration is empty,
+ // the stack is necessarily full screen.
mFullscreen = Configuration.EMPTY.equals(mOverrideConfig);
return !mOverrideConfig.equals(oldConfig);
}