diff --git a/services/core/java/com/android/server/input/InputWindowHandle.java b/services/core/java/com/android/server/input/InputWindowHandle.java index 3d6f7ad16a7a5..720eaaa543871 100644 --- a/services/core/java/com/android/server/input/InputWindowHandle.java +++ b/services/core/java/com/android/server/input/InputWindowHandle.java @@ -92,7 +92,7 @@ public final class InputWindowHandle { public int inputFeatures; // Display this input is on. - public final int displayId; + public int displayId; private native void nativeDispose(); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 54c2e9badc7b0..f015889355d59 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -178,6 +178,7 @@ import android.util.MergedConfiguration; import android.util.Slog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; +import android.view.Display; import android.view.DisplayCutout; import android.view.DisplayInfo; import android.view.Gravity; @@ -1366,6 +1367,7 @@ class WindowState extends WindowContainer implements WindowManagerP // Window was not laid out for this display yet, so make sure mLayoutSeq does not match. if (dc != null) { mLayoutSeq = dc.mLayoutSeq - 1; + mInputWindowHandle.displayId = dc.getDisplayId(); } } @@ -1378,7 +1380,7 @@ class WindowState extends WindowContainer implements WindowManagerP public int getDisplayId() { final DisplayContent displayContent = getDisplayContent(); if (displayContent == null) { - return -1; + return Display.INVALID_DISPLAY; } return displayContent.getDisplayId(); } diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java index 1248eaea7ae73..7c928c988b4f0 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java @@ -326,6 +326,17 @@ public class WindowStateTests extends WindowTestsBase { assertThat(app.mLayoutSeq, not(is(mDisplayContent.mLayoutSeq))); } + @Test + public void testDisplayIdUpdatedOnReparent() throws Exception { + final WindowState app = createWindow(null, TYPE_APPLICATION, "app"); + // fake a different display + app.mInputWindowHandle.displayId = mDisplayContent.getDisplayId() + 1; + app.onDisplayChanged(mDisplayContent); + + assertThat(app.mInputWindowHandle.displayId, is(mDisplayContent.getDisplayId())); + assertThat(app.getDisplayId(), is(mDisplayContent.getDisplayId())); + } + private void testPrepareWindowToDisplayDuringRelayout(boolean wasVisible) { reset(mPowerManagerWrapper); final WindowState root = createWindow(null, TYPE_APPLICATION, "root");