Loading services/core/java/com/android/server/wm/AppWindowToken.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading services/core/java/com/android/server/wm/TaskSnapshotSurface.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java +18 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,24 @@ public class AppWindowTokenTests extends WindowTestsBase { token.removeImmediately(); } @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. Loading Loading
services/core/java/com/android/server/wm/AppWindowToken.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading
services/core/java/com/android/server/wm/TaskSnapshotSurface.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java +18 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,24 @@ public class AppWindowTokenTests extends WindowTestsBase { token.removeImmediately(); } @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. Loading