diff options
| author | 2017-08-17 13:41:11 +0200 | |
|---|---|---|
| committer | 2017-08-21 15:33:20 +0200 | |
| commit | 87fdbcbecb1025b92ad5d48f032b3bb7e228b7bd (patch) | |
| tree | 03ae417463471a4b3e6e76f95c4003b125f0288e | |
| parent | e33e796d26beff1d98cb827735934ac1673d635b (diff) | |
Use top fullscreen window to inherit SystemUI flags
The top fullscreen window of an app token is the one we use for
determining SystemUI flags normally. Thus, when showing the
snapshot, we need to inherit the flags from the same window.
Test: Open event in Calendar, go home, reopen Calendar app,
observe no status bar icon color change.
Test: go/wm-smoke
Change-Id: I96678000339617c8fc51e72c0f6e2e167f542491
Fixes: 62871307
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 2e4de8c58650..8456854e3d71 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -62,6 +62,7 @@ import android.util.Slog; 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; @@ -470,6 +471,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; |