summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jorim Jaggi <jjaggi@google.com> 2017-08-21 16:42:31 +0000
committer android-build-merger <android-build-merger@google.com> 2017-08-21 16:42:31 +0000
commit3a58025684a8c379d64bd9968f6549bb11efe753 (patch)
tree96e903731e3004a894e2a53671caaf707bec06fc
parent54c4cc4cf698a24d73512bfd4e66f233a5ba618a (diff)
parentc299f64309912a07095902228c6a190fd6d51a01 (diff)
Merge "Use top fullscreen window to inherit SystemUI flags" into oc-mr1-dev am: 626b8c371b
am: c299f64309 Change-Id: I9fb90fe4bb2d1610d1a94d88644c323605aabafb
-rw-r--r--services/core/java/com/android/server/wm/AppWindowToken.java15
-rw-r--r--services/core/java/com/android/server/wm/TaskSnapshotSurface.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java18
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;