diff options
3 files changed, 34 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 6c6b030b30f8..00d387a7ac9f 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -67,6 +67,7 @@ import android.util.proto.ProtoOutputStream; import android.view.IApplicationToken; import android.view.SurfaceControl; import android.view.WindowManager; +import android.view.WindowManager.LayoutParams; import android.view.WindowManagerPolicy.StartingSurface; import com.android.internal.util.ToBooleanFunction; @@ -475,6 +476,20 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree return delayed; } + /** + * @return The to top most child window for which {@link LayoutParams#isFullscreen()} returns + * true. + */ + WindowState getTopFullscreenWindow() { + for (int i = mChildren.size() - 1; i >= 0; i--) { + final WindowState win = mChildren.get(i); + if (win != null && win.mAttrs.isFullscreen()) { + return win; + } + } + return null; + } + WindowState findMainWindow() { WindowState candidate = null; int j = mChildren.size(); diff --git a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java index 1bece6903eac..0610b945d20e 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java @@ -162,7 +162,7 @@ class TaskSnapshotSurface implements StartingSurface { + task); return null; } - final WindowState topFullscreenWindow = topFullscreenToken.findMainWindow(); + final WindowState topFullscreenWindow = topFullscreenToken.getTopFullscreenWindow(); if (mainWindow == null || topFullscreenWindow == null) { Slog.w(TAG, "TaskSnapshotSurface.create: Failed to find main window for token=" + token); diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java index b09601e698f9..9ad7addab858 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java @@ -97,6 +97,24 @@ public class AppWindowTokenTests extends WindowTestsBase { } @Test + public void testGetTopFullscreenWindow() throws Exception { + final WindowTestUtils.TestAppWindowToken token = + new WindowTestUtils.TestAppWindowToken(mDisplayContent); + + assertNull(token.getTopFullscreenWindow()); + + final WindowState window1 = createWindow(null, TYPE_BASE_APPLICATION, token, "window1"); + final WindowState window11 = createWindow(null, TYPE_APPLICATION, token, "window11"); + final WindowState window12 = createWindow(null, TYPE_APPLICATION, token, "window12"); + assertEquals(window12, token.getTopFullscreenWindow()); + window12.mAttrs.width = 500; + assertEquals(window11, token.getTopFullscreenWindow()); + window11.mAttrs.width = 500; + assertEquals(window1, token.getTopFullscreenWindow()); + token.removeImmediately(); + } + + @Test public void testLandscapeSeascapeRotationByApp() throws Exception { // Some plumbing to get the service ready for rotation updates. sWm.mDisplayReady = true; |