144fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale/* 244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * Copyright (C) 2016 The Android Open Source Project 344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * 444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * Licensed under the Apache License, Version 2.0 (the "License"); 544fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * you may not use this file except in compliance with the License. 644fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * You may obtain a copy of the License at 744fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * 844fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * http://www.apache.org/licenses/LICENSE-2.0 944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * 1044fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * Unless required by applicable law or agreed to in writing, software 1144fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * distributed under the License is distributed on an "AS IS" BASIS, 1244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * See the License for the specific language governing permissions and 1444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * limitations under the License 1544fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale */ 1644fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 1744fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwalepackage com.android.server.wm; 1844fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 1911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwaleimport static android.view.Display.DEFAULT_DISPLAY; 20469395638813abdb7423d0b91d6c42c2b1dcb78aDavid Stevensimport static android.view.View.VISIBLE; 21469395638813abdb7423d0b91d6c42c2b1dcb78aDavid Stevens 22c5cc301689649695e03f502e7d1c1492ef5e5d1eWale Ogunwaleimport android.graphics.Rect; 23367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulianimport android.hardware.display.DisplayManagerGlobal; 24367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulianimport android.view.Display; 25367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulianimport android.view.DisplayInfo; 2644fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport org.junit.Assert; 2717f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwaleimport org.junit.After; 2844fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport org.junit.Before; 299bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggiimport org.mockito.MockitoAnnotations; 3044fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 3144fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport android.content.Context; 3244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport android.support.test.InstrumentationRegistry; 3344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport android.view.IWindow; 3444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport android.view.WindowManager; 3544fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 3644fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport static android.app.ActivityManager.StackId.FIRST_DYNAMIC_STACK_ID; 378347163dbb64fb61012c0393163283106a0a351eWinson Chungimport static android.app.ActivityManager.StackId.INVALID_STACK_ID; 3844fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport static android.app.AppOpsManager.OP_NONE; 39367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulianimport static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS; 4044fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; 41342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwaleimport static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; 4244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; 433c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; 443c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY; 453c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; 463c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; 473c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; 483c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; 493c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; 503c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; 513c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; 5244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwaleimport static org.mockito.Mockito.mock; 5344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 549bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggiimport com.android.server.AttributeCache; 5517f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale 5617f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwaleimport java.util.HashSet; 57342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwaleimport java.util.LinkedList; 589bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi 5944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale/** 6044fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale * Common base class for window manager unit test classes. 6144fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale */ 6226c0dfed7a0cd54abafdd0ccbb5b757506d51c76Wale Ogunwaleclass WindowTestsBase { 6344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale static WindowManagerService sWm = null; 6411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale private static final IWindow sIWindow = new TestIWindow(); 6511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale private static final Session sMockSession = mock(Session.class); 66310de9e5ee7b57b928e7a6613d61bcfb1c0bf166Bryce Lee // The default display is removed in {@link #setUp} and then we iterate over all displays to 67310de9e5ee7b57b928e7a6613d61bcfb1c0bf166Bryce Lee // make sure we don't collide with any existing display. If we run into no other display, the 686272c7f83fd1e78ec610d84621abfd0b87680465Bryce Lee // added display should be treated as default. This cannot be the default display 6911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale private static int sNextDisplayId = DEFAULT_DISPLAY + 1; 70af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee private static int sNextStackId = FIRST_DYNAMIC_STACK_ID; 7144fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 723c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwale private static boolean sOneTimeSetupDone = false; 7311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale DisplayContent mDisplayContent; 7411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale DisplayInfo mDisplayInfo = new DisplayInfo(); 7511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowLayersController mLayersController; 7611cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState mWallpaperWindow; 7711cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState mImeWindow; 7811cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState mImeDialogWindow; 7911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState mStatusBarWindow; 8011cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState mDockedDividerWindow; 8111cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState mNavBarWindow; 8211cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState mAppWindow; 8311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState mChildAppWindowAbove; 8411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState mChildAppWindowBelow; 8511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale HashSet<WindowState> mCommonWindows; 863c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwale 8744fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale @Before 8844fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale public void setUp() throws Exception { 8911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale if (!sOneTimeSetupDone) { 9011cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale sOneTimeSetupDone = true; 9111cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale MockitoAnnotations.initMocks(this); 923c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwale } 9311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale 9444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale final Context context = InstrumentationRegistry.getTargetContext(); 959bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi AttributeCache.init(context); 9644fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale sWm = TestWindowManagerPolicy.getWindowManagerService(context); 9711cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mLayersController = new WindowLayersController(sWm); 986272c7f83fd1e78ec610d84621abfd0b87680465Bryce Lee 9911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale context.getDisplay().getDisplayInfo(mDisplayInfo); 10011cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mDisplayContent = createNewDisplay(); 1019bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi sWm.mDisplayEnabled = true; 1029bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi sWm.mDisplayReady = true; 1033c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwale 1043c1170d849dc0af79623dc0f67eda0fbc66a724fWale Ogunwale // Set-up some common windows. 10511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mCommonWindows = new HashSet(); 10611cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow"); 10711cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "mImeWindow"); 10811cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale sWm.mInputMethodWindow = mImeWindow; 10911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mImeDialogWindow = createCommonWindow(null, TYPE_INPUT_METHOD_DIALOG, "mImeDialogWindow"); 11011cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mStatusBarWindow = createCommonWindow(null, TYPE_STATUS_BAR, "mStatusBarWindow"); 11111cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mNavBarWindow = createCommonWindow(null, TYPE_NAVIGATION_BAR, "mNavBarWindow"); 11211cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mDockedDividerWindow = createCommonWindow(null, TYPE_DOCK_DIVIDER, "mDockedDividerWindow"); 11311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mAppWindow = createCommonWindow(null, TYPE_BASE_APPLICATION, "mAppWindow"); 11411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mChildAppWindowAbove = createCommonWindow(mAppWindow, TYPE_APPLICATION_ATTACHED_DIALOG, 11511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale "mChildAppWindowAbove"); 11611cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mChildAppWindowBelow = createCommonWindow(mAppWindow, TYPE_APPLICATION_MEDIA_OVERLAY, 11711cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale "mChildAppWindowBelow"); 118153badbf417c3b32fb2702c723185882ca1b3ba2Jorim Jaggi 119153badbf417c3b32fb2702c723185882ca1b3ba2Jorim Jaggi // Adding a display will cause freezing the display. Make sure to wait until it's unfrozen 120153badbf417c3b32fb2702c723185882ca1b3ba2Jorim Jaggi // to not run into race conditions with the tests. 121153badbf417c3b32fb2702c723185882ca1b3ba2Jorim Jaggi waitUntilHandlersIdle(); 12217f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 12317f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale 12417f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale @After 12517f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale public void tearDown() throws Exception { 126342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale final LinkedList<WindowState> nonCommonWindows = new LinkedList(); 127027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale 128027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale synchronized (sWm.mWindowMap) { 129027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale sWm.mRoot.forAllWindows(w -> { 130027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale if (!mCommonWindows.contains(w)) { 131027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale nonCommonWindows.addLast(w); 132027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale } 133027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale }, true /* traverseTopToBottom */); 134027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale 135027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale while (!nonCommonWindows.isEmpty()) { 136027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale nonCommonWindows.pollLast().removeImmediately(); 13717f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 138342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale 139027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale mDisplayContent.removeImmediately(); 140027f4753bcdbef5a830ed877f974701727e98d19Wale Ogunwale sWm.mInputMethodTarget = null; 141342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale } 142153badbf417c3b32fb2702c723185882ca1b3ba2Jorim Jaggi 143153badbf417c3b32fb2702c723185882ca1b3ba2Jorim Jaggi // Wait until everything is really cleaned up. 144153badbf417c3b32fb2702c723185882ca1b3ba2Jorim Jaggi waitUntilHandlersIdle(); 14517f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 14617f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale 14711cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale private WindowState createCommonWindow(WindowState parent, int type, String name) { 14817f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale final WindowState win = createWindow(parent, type, name); 14911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mCommonWindows.add(win); 150342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale // Prevent common windows from been IMe targets 151342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale win.mAttrs.flags |= FLAG_NOT_FOCUSABLE; 15217f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale return win; 15344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 15444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 15544fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale /** Asserts that the first entry is greater than the second entry. */ 15644fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale void assertGreaterThan(int first, int second) throws Exception { 15744fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale Assert.assertTrue("Excepted " + first + " to be greater than " + second, first > second); 15844fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 15944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 1609bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi /** 1619bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi * Waits until the main handler for WM has processed all messages. 1629bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi */ 163ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi void waitUntilHandlersIdle() { 1649bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi sWm.mH.runWithScissors(() -> { }, 0); 165ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi sWm.mAnimationHandler.runWithScissors(() -> { }, 0); 1669bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi } 1679bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi 16811cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale private WindowToken createWindowToken(DisplayContent dc, int stackId, int type) { 16944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale if (type < FIRST_APPLICATION_WINDOW || type > LAST_APPLICATION_WINDOW) { 170af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return new WindowTestUtils.TestWindowToken(type, dc); 17144fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 17244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 1738347163dbb64fb61012c0393163283106a0a351eWinson Chung final TaskStack stack = stackId == INVALID_STACK_ID 1748347163dbb64fb61012c0393163283106a0a351eWinson Chung ? createTaskStackOnDisplay(dc) 1758347163dbb64fb61012c0393163283106a0a351eWinson Chung : createStackControllerOnStackOnDisplay(stackId, dc).mContainer; 176d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian final Task task = createTaskInStack(stack, 0 /* userId */); 177af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee final WindowTestUtils.TestAppWindowToken token = new WindowTestUtils.TestAppWindowToken(dc); 17872919d2c310db04fdb860e926ccb0bfe6e3aef08Wale Ogunwale task.addChild(token, 0); 17944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale return token; 18044fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 18144fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 18211cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState createWindow(WindowState parent, int type, String name) { 183805d9ecc476134ffafc85a07b05e94a14b1d398cWale Ogunwale return (parent == null) 18411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale ? createWindow(parent, type, mDisplayContent, name) 185805d9ecc476134ffafc85a07b05e94a14b1d398cWale Ogunwale : createWindow(parent, type, parent.mToken, name); 186805d9ecc476134ffafc85a07b05e94a14b1d398cWale Ogunwale } 187805d9ecc476134ffafc85a07b05e94a14b1d398cWale Ogunwale 18811cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState createWindowOnStack(WindowState parent, int stackId, int type, 1898347163dbb64fb61012c0393163283106a0a351eWinson Chung DisplayContent dc, String name) { 1908347163dbb64fb61012c0393163283106a0a351eWinson Chung final WindowToken token = createWindowToken(dc, stackId, type); 1918347163dbb64fb61012c0393163283106a0a351eWinson Chung return createWindow(parent, type, token, name); 1928347163dbb64fb61012c0393163283106a0a351eWinson Chung } 1938347163dbb64fb61012c0393163283106a0a351eWinson Chung 19402886a82d876aa5e31a92444fec70208599c509cJorim Jaggi WindowState createAppWindow(Task task, int type, String name) { 19511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent); 19602886a82d876aa5e31a92444fec70208599c509cJorim Jaggi task.addChild(token, 0); 19702886a82d876aa5e31a92444fec70208599c509cJorim Jaggi return createWindow(null, type, token, name); 19802886a82d876aa5e31a92444fec70208599c509cJorim Jaggi } 19902886a82d876aa5e31a92444fec70208599c509cJorim Jaggi 20011cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) { 2018347163dbb64fb61012c0393163283106a0a351eWinson Chung final WindowToken token = createWindowToken(dc, INVALID_STACK_ID, type); 20244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale return createWindow(parent, type, token, name); 20344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 20444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 20511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name, 20617f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale boolean ownerCanAddInternalSystemWindow) { 2078347163dbb64fb61012c0393163283106a0a351eWinson Chung final WindowToken token = createWindowToken(dc, INVALID_STACK_ID, type); 20817f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale return createWindow(parent, type, token, name, ownerCanAddInternalSystemWindow); 20917f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 21017f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale 2119bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi static WindowState createWindow(WindowState parent, int type, WindowToken token, String name) { 21217f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale return createWindow(parent, type, token, name, false /* ownerCanAddInternalSystemWindow */); 21317f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 21417f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale 21517f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale static WindowState createWindow(WindowState parent, int type, WindowToken token, String name, 21617f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale boolean ownerCanAddInternalSystemWindow) { 21744fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(type); 21844fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale attrs.setTitle(name); 21944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 2208e44f6c46822028a853c41610d2289e299987af0Wale Ogunwale final WindowState w = new WindowState(sWm, sMockSession, sIWindow, token, parent, OP_NONE, 221469395638813abdb7423d0b91d6c42c2b1dcb78aDavid Stevens 0, attrs, VISIBLE, 0, ownerCanAddInternalSystemWindow); 22244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale // TODO: Probably better to make this call in the WindowState ctor to avoid errors with 22344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale // adding it to the token... 22444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale token.addWindow(w); 22544fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale return w; 22644fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 2273d0bfd9530bc51c52aec027eaf6d0dba918efc99Wale Ogunwale 228d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian /** Creates a {@link TaskStack} and adds it to the specified {@link DisplayContent}. */ 22911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale TaskStack createTaskStackOnDisplay(DisplayContent dc) { 2301666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale return createStackControllerOnDisplay(dc).mContainer; 2311666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale } 2321666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale 23311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale StackWindowController createStackControllerOnDisplay(DisplayContent dc) { 2341666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale final int stackId = ++sNextStackId; 2358347163dbb64fb61012c0393163283106a0a351eWinson Chung return createStackControllerOnStackOnDisplay(stackId, dc); 2368347163dbb64fb61012c0393163283106a0a351eWinson Chung } 2378347163dbb64fb61012c0393163283106a0a351eWinson Chung 23811cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale StackWindowController createStackControllerOnStackOnDisplay(int stackId, 2398347163dbb64fb61012c0393163283106a0a351eWinson Chung DisplayContent dc) { 2401666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale return new StackWindowController(stackId, null, dc.getDisplayId(), 2411666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale true /* onTop */, new Rect(), sWm); 242d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian } 243d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian 244367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian /** Creates a {@link Task} and adds it to the specified {@link TaskStack}. */ 24511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale Task createTaskInStack(TaskStack stack, int userId) { 246af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return WindowTestUtils.createTaskInStack(sWm, stack, userId); 247d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian } 248d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian 249367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian /** Creates a {@link DisplayContent} and adds it to the system. */ 250367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian DisplayContent createNewDisplay() { 251367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian final int displayId = sNextDisplayId++; 252367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId, 25311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mDisplayInfo, DEFAULT_DISPLAY_ADJUSTMENTS); 25411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale return new DisplayContent(display, sWm, mLayersController, new WallpaperController(sWm)); 255367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian } 256367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian 257af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /** Creates a {@link com.android.server.wm.WindowTestUtils.TestWindowState} */ 258af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee WindowTestUtils.TestWindowState createWindowState(WindowManager.LayoutParams attrs, 259af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee WindowToken token) { 260af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return new WindowTestUtils.TestWindowState(sWm, sMockSession, sIWindow, attrs, token); 261c5cc301689649695e03f502e7d1c1492ef5e5d1eWale Ogunwale } 262c5cc301689649695e03f502e7d1c1492ef5e5d1eWale Ogunwale 26344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale} 264