Loading services/autofill/java/com/android/server/autofill/ui/SaveUi.java +1 −0 Original line number Diff line number Diff line Loading @@ -357,6 +357,7 @@ final class SaveUi { params.width = WindowManager.LayoutParams.MATCH_PARENT; params.accessibilityTitle = context.getString(R.string.autofill_save_accessibility_title); params.windowAnimations = R.style.AutofillSaveAnimation; params.setTrustedOverlay(); show(); } Loading services/core/java/com/android/server/wm/WindowState.java +8 −0 Original line number Diff line number Diff line Loading @@ -5686,6 +5686,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP && imeTarget.compareTo(this) <= 0; return inTokenWithAndAboveImeTarget; } // The condition is for the system dialog not belonging to any Activity. // (^FLAG_NOT_FOCUSABLE & FLAG_ALT_FOCUSABLE_IM) means the dialog is still focusable but // should be placed above the IME window. if ((mAttrs.flags & (FLAG_NOT_FOCUSABLE | FLAG_ALT_FOCUSABLE_IM)) == FLAG_ALT_FOCUSABLE_IM && isTrustedOverlay() && canAddInternalSystemWindow()) { return true; } return false; } Loading services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +14 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_TOAST; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; Loading Loading @@ -969,6 +970,19 @@ public class WindowStateTests extends WindowTestsBase { assertFalse(sameTokenWindow.needsRelativeLayeringToIme()); } @UseTestDisplay(addWindows = {W_ACTIVITY, W_INPUT_METHOD}) @Test public void testNeedsRelativeLayeringToIme_systemDialog() { WindowState systemDialogWindow = createWindow(null, TYPE_SECURE_SYSTEM_OVERLAY, mDisplayContent, "SystemDialog", true); mDisplayContent.setImeLayeringTarget(mAppWindow); mAppWindow.getRootTask().setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); makeWindowVisible(mImeWindow); systemDialogWindow.mAttrs.flags |= FLAG_ALT_FOCUSABLE_IM; assertTrue(systemDialogWindow.needsRelativeLayeringToIme()); } @Test public void testSetFreezeInsetsState() { final WindowState app = createWindow(null, TYPE_APPLICATION, "app"); Loading services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java +26 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; Loading @@ -31,6 +32,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; Loading Loading @@ -543,4 +545,28 @@ public class ZOrderingTests extends WindowTestsBase { assertZOrderGreaterThan(mTransaction, popupWindow.getSurfaceControl(), mDisplayContent.getImeContainer().getSurfaceControl()); } @Test public void testSystemDialogWindow_expectHigherThanIme_inMultiWindow() { // Simulate the app window is in multi windowing mode and being IME target mAppWindow.getConfiguration().windowConfiguration.setWindowingMode( WINDOWING_MODE_MULTI_WINDOW); mDisplayContent.setImeLayeringTarget(mAppWindow); mDisplayContent.setImeInputTarget(mAppWindow); makeWindowVisible(mImeWindow); // Create a popupWindow final WindowState systemDialogWindow = createWindow(null, TYPE_SECURE_SYSTEM_OVERLAY, mDisplayContent, "SystemDialog", true); systemDialogWindow.mAttrs.flags |= FLAG_ALT_FOCUSABLE_IM; spyOn(systemDialogWindow); mDisplayContent.assignChildLayers(mTransaction); // Verify the surface layer of the popupWindow should higher than IME verify(systemDialogWindow).needsRelativeLayeringToIme(); assertThat(systemDialogWindow.needsRelativeLayeringToIme()).isTrue(); assertZOrderGreaterThan(mTransaction, systemDialogWindow.getSurfaceControl(), mDisplayContent.getImeContainer().getSurfaceControl()); } } Loading
services/autofill/java/com/android/server/autofill/ui/SaveUi.java +1 −0 Original line number Diff line number Diff line Loading @@ -357,6 +357,7 @@ final class SaveUi { params.width = WindowManager.LayoutParams.MATCH_PARENT; params.accessibilityTitle = context.getString(R.string.autofill_save_accessibility_title); params.windowAnimations = R.style.AutofillSaveAnimation; params.setTrustedOverlay(); show(); } Loading
services/core/java/com/android/server/wm/WindowState.java +8 −0 Original line number Diff line number Diff line Loading @@ -5686,6 +5686,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP && imeTarget.compareTo(this) <= 0; return inTokenWithAndAboveImeTarget; } // The condition is for the system dialog not belonging to any Activity. // (^FLAG_NOT_FOCUSABLE & FLAG_ALT_FOCUSABLE_IM) means the dialog is still focusable but // should be placed above the IME window. if ((mAttrs.flags & (FLAG_NOT_FOCUSABLE | FLAG_ALT_FOCUSABLE_IM)) == FLAG_ALT_FOCUSABLE_IM && isTrustedOverlay() && canAddInternalSystemWindow()) { return true; } return false; } Loading
services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +14 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_TOAST; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; Loading Loading @@ -969,6 +970,19 @@ public class WindowStateTests extends WindowTestsBase { assertFalse(sameTokenWindow.needsRelativeLayeringToIme()); } @UseTestDisplay(addWindows = {W_ACTIVITY, W_INPUT_METHOD}) @Test public void testNeedsRelativeLayeringToIme_systemDialog() { WindowState systemDialogWindow = createWindow(null, TYPE_SECURE_SYSTEM_OVERLAY, mDisplayContent, "SystemDialog", true); mDisplayContent.setImeLayeringTarget(mAppWindow); mAppWindow.getRootTask().setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); makeWindowVisible(mImeWindow); systemDialogWindow.mAttrs.flags |= FLAG_ALT_FOCUSABLE_IM; assertTrue(systemDialogWindow.needsRelativeLayeringToIme()); } @Test public void testSetFreezeInsetsState() { final WindowState app = createWindow(null, TYPE_APPLICATION, "app"); Loading
services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java +26 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; Loading @@ -31,6 +32,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; Loading Loading @@ -543,4 +545,28 @@ public class ZOrderingTests extends WindowTestsBase { assertZOrderGreaterThan(mTransaction, popupWindow.getSurfaceControl(), mDisplayContent.getImeContainer().getSurfaceControl()); } @Test public void testSystemDialogWindow_expectHigherThanIme_inMultiWindow() { // Simulate the app window is in multi windowing mode and being IME target mAppWindow.getConfiguration().windowConfiguration.setWindowingMode( WINDOWING_MODE_MULTI_WINDOW); mDisplayContent.setImeLayeringTarget(mAppWindow); mDisplayContent.setImeInputTarget(mAppWindow); makeWindowVisible(mImeWindow); // Create a popupWindow final WindowState systemDialogWindow = createWindow(null, TYPE_SECURE_SYSTEM_OVERLAY, mDisplayContent, "SystemDialog", true); systemDialogWindow.mAttrs.flags |= FLAG_ALT_FOCUSABLE_IM; spyOn(systemDialogWindow); mDisplayContent.assignChildLayers(mTransaction); // Verify the surface layer of the popupWindow should higher than IME verify(systemDialogWindow).needsRelativeLayeringToIme(); assertThat(systemDialogWindow.needsRelativeLayeringToIme()).isTrue(); assertZOrderGreaterThan(mTransaction, systemDialogWindow.getSurfaceControl(), mDisplayContent.getImeContainer().getSurfaceControl()); } }