From 6c240d1432f08e207effd8dd81d4ee4d86016b84 Mon Sep 17 00:00:00 2001 From: Taran Singh Date: Mon, 15 Jun 2020 16:54:35 -0700 Subject: [PATCH] Don't allow pinned window to be IME target SysUi's PIP window (PipMenuActivity) is always focusable, transparent and yet never should be an IME target. Bug: 158881678 Test: atest WindowStateTests#testCanBeImeTarget Change-Id: Ie863dd1037d0c446f35a8b1ec07c18efaddb1840 --- services/core/java/com/android/server/wm/WindowState.java | 4 ++++ .../src/com/android/server/wm/WindowStateTests.java | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 3532edf302c49..26e3b8239b68f 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2339,6 +2339,10 @@ class WindowState extends WindowContainer implements WindowManagerP return false; } + if (inPinnedWindowingMode()) { + return false; + } + final boolean windowsAreFocusable = mActivityRecord == null || mActivityRecord.windowsAreFocusable(); if (!windowsAreFocusable) { // This window can't be an IME target if the app's windows should not be focusable. diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java index b51784d8d6e5a..6d78fa38e20c6 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java @@ -18,6 +18,7 @@ package com.android.server.wm; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; +import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.hardware.camera2.params.OutputConfiguration.ROTATION_90; import static android.view.InsetsState.ITYPE_STATUS_BAR; @@ -244,6 +245,12 @@ public class WindowStateTests extends WindowTestsBase { appWindow.mAttrs.flags &= ~FLAG_NOT_FOCUSABLE; assertTrue(appWindow.canBeImeTarget()); + // Verify PINNED windows can't be IME target. + int initialMode = appWindow.mActivityRecord.getWindowingMode(); + appWindow.mActivityRecord.setWindowingMode(WINDOWING_MODE_PINNED); + assertFalse(appWindow.canBeImeTarget()); + appWindow.mActivityRecord.setWindowingMode(initialMode); + // Make windows invisible appWindow.hideLw(false /* doAnimation */); imeWindow.hideLw(false /* doAnimation */);