From 3b72c868c4ac3ee4302034847b5d1e0f5f03bcf0 Mon Sep 17 00:00:00 2001 From: Brandon Pollack Date: Mon, 13 Feb 2023 04:23:15 +0000 Subject: [PATCH] Added a simple fix to override persisted window mode. In Task.java we havent updated to check Task Display Area instead of display to tell if we should or should not persist the windowing mode. This corrects that. Bug: 265114439 Test: Manually tested, open the app in tablet mode, close, then open in desktop mode and verfiy it isnt full screen Change-Id: Ice3462e4dda92dd3695a3a1eea01d58a5ca9d753 --- .../com/android/server/wm/LaunchParamsPersister.java | 4 ++-- services/core/java/com/android/server/wm/Task.java | 9 +++++---- .../android/server/wm/LaunchParamsPersisterTests.java | 1 + .../wmtests/src/com/android/server/wm/TaskTests.java | 11 +++++------ 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/wm/LaunchParamsPersister.java b/services/core/java/com/android/server/wm/LaunchParamsPersister.java index bf511adf0bf9a..bb50372ba019a 100644 --- a/services/core/java/com/android/server/wm/LaunchParamsPersister.java +++ b/services/core/java/com/android/server/wm/LaunchParamsPersister.java @@ -263,8 +263,8 @@ class LaunchParamsPersister { boolean changed = !Objects.equals(params.mDisplayUniqueId, info.uniqueId); params.mDisplayUniqueId = info.uniqueId; - changed |= params.mWindowingMode != task.getWindowingMode(); - params.mWindowingMode = task.getWindowingMode(); + changed |= params.mWindowingMode != task.getTaskDisplayArea().getWindowingMode(); + params.mWindowingMode = task.getTaskDisplayArea().getWindowingMode(); if (task.mLastNonFullscreenBounds != null) { changed |= !Objects.equals(params.mBounds, task.mLastNonFullscreenBounds); diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 67ca8443102bd..b33fb4f5207e4 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -2277,10 +2277,11 @@ class Task extends TaskFragment { 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) { + // Don't persist state if Task Display Area isn't in freeform mode. Then the task will be + // launched back to its last state in a freeform Task Display Area when it's launched in a + // freeform Task Display Area next time. + if (getTaskDisplayArea() == null + || getTaskDisplayArea().getWindowingMode() != WINDOWING_MODE_FREEFORM) { return; } diff --git a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java index 7cb7c79d63a08..43fc1c43d6ba2 100644 --- a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java @@ -111,6 +111,7 @@ public class LaunchParamsPersisterTests extends WindowTestsBase { mDisplayUniqueId = "test:" + sNextUniqueId++; mTestDisplay = new TestDisplayContent.Builder(mAtm, 1000, 1500) .setUniqueId(mDisplayUniqueId).build(); + mTestDisplay.getDefaultTaskDisplayArea().setWindowingMode(TEST_WINDOWING_MODE); when(mRootWindowContainer.getDisplayContent(eq(mDisplayUniqueId))) .thenReturn(mTestDisplay); diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java index 5208e5a2dc2f3..28241d30e1680 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java @@ -1328,17 +1328,16 @@ public class TaskTests extends WindowTestsBase { spyOn(persister); final Task task = getTestTask(); - task.setHasBeenVisible(false); + task.setHasBeenVisible(true); task.getDisplayContent() .getDefaultTaskDisplayArea() - .setWindowingMode(WindowConfiguration.WINDOWING_MODE_FREEFORM); - task.getRootTask().setWindowingMode(WINDOWING_MODE_FULLSCREEN); + .setWindowingMode(WINDOWING_MODE_FREEFORM); + task.getRootTask().setWindowingMode(WINDOWING_MODE_FREEFORM); final DisplayContent oldDisplay = task.getDisplayContent(); LaunchParamsController.LaunchParams params = new LaunchParamsController.LaunchParams(); - params.mWindowingMode = WINDOWING_MODE_UNDEFINED; persister.getLaunchParams(task, null, params); - assertEquals(WINDOWING_MODE_UNDEFINED, params.mWindowingMode); + assertEquals(WINDOWING_MODE_FREEFORM, params.mWindowingMode); task.setHasBeenVisible(true); task.removeImmediately(); @@ -1346,7 +1345,7 @@ public class TaskTests extends WindowTestsBase { verify(persister).saveTask(task, oldDisplay); persister.getLaunchParams(task, null, params); - assertEquals(WINDOWING_MODE_FULLSCREEN, params.mWindowingMode); + assertEquals(WINDOWING_MODE_FREEFORM, params.mWindowingMode); } @Test