summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/WindowConfiguration.java5
-rw-r--r--services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java4
-rw-r--r--services/core/java/com/android/server/wm/TaskRecord.java13
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java28
4 files changed, 45 insertions, 5 deletions
diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java
index affc8b9283fb..c40031631a74 100644
--- a/core/java/android/app/WindowConfiguration.java
+++ b/core/java/android/app/WindowConfiguration.java
@@ -338,6 +338,11 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
mDisplayWindowingMode = windowingMode;
}
+ /** @hide */
+ @WindowingMode
+ public int getDisplayWindowingMode() {
+ return mDisplayWindowingMode;
+ }
public void setActivityType(@ActivityType int activityType) {
if (mActivityType == activityType) {
diff --git a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
index 14585c531203..76dd7bef6ea6 100644
--- a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
+++ b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
@@ -211,7 +211,9 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier {
if (!currentParams.isEmpty() && !hasInitialBounds
&& (!currentParams.hasPreferredDisplay()
|| displayId == currentParams.mPreferredDisplayId)) {
- if (currentParams.hasWindowingMode()) {
+ // Only set windowing mode if display is in freeform. If the display is in fullscreen
+ // mode we should only launch a task in fullscreen mode.
+ if (currentParams.hasWindowingMode() && display.inFreeformWindowingMode()) {
launchMode = currentParams.mWindowingMode;
fullyResolvedCurrentParam = launchMode != WINDOWING_MODE_FREEFORM;
if (DEBUG) {
diff --git a/services/core/java/com/android/server/wm/TaskRecord.java b/services/core/java/com/android/server/wm/TaskRecord.java
index 3fd4e83b9494..7c7fdae45a47 100644
--- a/services/core/java/com/android/server/wm/TaskRecord.java
+++ b/services/core/java/com/android/server/wm/TaskRecord.java
@@ -1908,7 +1908,7 @@ class TaskRecord extends ConfigurationContainer {
/**
* Saves launching state if necessary so that we can launch the activity to its latest state.
* It only saves state if this task has been shown to user and it's in fullscreen or freeform
- * mode.
+ * mode on freeform displays.
*/
void saveLaunchingStateIfNeeded() {
if (!hasBeenVisible) {
@@ -1917,8 +1917,15 @@ class TaskRecord extends ConfigurationContainer {
}
final int windowingMode = getWindowingMode();
- if (windowingMode != WindowConfiguration.WINDOWING_MODE_FULLSCREEN
- && windowingMode != WindowConfiguration.WINDOWING_MODE_FREEFORM) {
+ if (windowingMode != WINDOWING_MODE_FULLSCREEN
+ && windowingMode != WINDOWING_MODE_FREEFORM) {
+ return;
+ }
+
+ // Don't persist state if display isn't in freeform mode. Then the task will be launched
+ // back to its last state in a freeform display when it's launched in a freeform display
+ // next time.
+ if (getWindowConfiguration().getDisplayWindowingMode() != WINDOWING_MODE_FREEFORM) {
return;
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
index f918149e6781..24ff07d4bffe 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
@@ -346,6 +346,19 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase {
}
@Test
+ public void testLaunchesFullscreenOnFullscreenDisplayWithFreeformHistory() {
+ mCurrent.mPreferredDisplayId = Display.INVALID_DISPLAY;
+ mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
+ mCurrent.mBounds.set(0, 0, 200, 100);
+
+ assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
+ mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+
+ assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
+ WINDOWING_MODE_FULLSCREEN);
+ }
+
+ @Test
public void testRespectsFullyResolvedCurrentParam_Fullscreen() {
final TestActivityDisplay freeformDisplay = createNewActivityDisplay(
WINDOWING_MODE_FREEFORM);
@@ -1174,6 +1187,19 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase {
}
@Test
+ public void returnsNonFullscreenBoundsOnFullscreenDisplayWithFreeformHistory() {
+ mCurrent.mPreferredDisplayId = Display.INVALID_DISPLAY;
+ mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
+ mCurrent.mBounds.set(0, 0, 200, 100);
+
+ assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
+ mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+
+ // Returned bounds with in fullscreen mode will be set to last non-fullscreen bounds.
+ assertEquals(new Rect(0, 0, 200, 100), mCurrent.mBounds);
+ }
+
+ @Test
public void testAdjustsBoundsToFitInDisplayFullyResolvedBounds() {
final TestActivityDisplay freeformDisplay = createNewActivityDisplay(
WINDOWING_MODE_FREEFORM);
@@ -1186,7 +1212,7 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase {
options.setLaunchDisplayId(freeformDisplay.mDisplayId);
assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
- mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+ mActivity, /* source */ null, options, mCurrent, mResult));
assertEquals(new Rect(0, 0, 300, 300), mResult.mBounds);
}