WindowTestsBase.java revision 11cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1
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"); 11817f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 11917f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale 12017f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale @After 12117f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale public void tearDown() throws Exception { 122342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale final LinkedList<WindowState> nonCommonWindows = new LinkedList(); 12317f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale sWm.mRoot.forAllWindows(w -> { 12411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale if (!mCommonWindows.contains(w)) { 125342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale nonCommonWindows.addLast(w); 12617f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 12717f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale }, true /* traverseTopToBottom */); 128342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale 129342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale while (!nonCommonWindows.isEmpty()) { 130342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale nonCommonWindows.pollLast().removeImmediately(); 131342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale } 132342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale 13311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mDisplayContent.removeImmediately(); 134342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale sWm.mInputMethodTarget = null; 13517f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 13617f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale 13711cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale private WindowState createCommonWindow(WindowState parent, int type, String name) { 13817f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale final WindowState win = createWindow(parent, type, name); 13911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mCommonWindows.add(win); 140342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale // Prevent common windows from been IMe targets 141342479581e113a6cf05f6e1d6470a86ad6032bcbWale Ogunwale win.mAttrs.flags |= FLAG_NOT_FOCUSABLE; 14217f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale return win; 14344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 14444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 14544fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale /** Asserts that the first entry is greater than the second entry. */ 14644fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale void assertGreaterThan(int first, int second) throws Exception { 14744fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale Assert.assertTrue("Excepted " + first + " to be greater than " + second, first > second); 14844fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 14944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 1509bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi /** 1519bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi * Waits until the main handler for WM has processed all messages. 1529bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi */ 153ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi void waitUntilHandlersIdle() { 1549bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi sWm.mH.runWithScissors(() -> { }, 0); 155ed7993b5d147a6741d26fe0b16cc9fa5e34ceaeeJorim Jaggi sWm.mAnimationHandler.runWithScissors(() -> { }, 0); 1569bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi } 1579bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi 15811cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale private WindowToken createWindowToken(DisplayContent dc, int stackId, int type) { 15944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale if (type < FIRST_APPLICATION_WINDOW || type > LAST_APPLICATION_WINDOW) { 160af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return new WindowTestUtils.TestWindowToken(type, dc); 16144fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 16244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 1638347163dbb64fb61012c0393163283106a0a351eWinson Chung final TaskStack stack = stackId == INVALID_STACK_ID 1648347163dbb64fb61012c0393163283106a0a351eWinson Chung ? createTaskStackOnDisplay(dc) 1658347163dbb64fb61012c0393163283106a0a351eWinson Chung : createStackControllerOnStackOnDisplay(stackId, dc).mContainer; 166d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian final Task task = createTaskInStack(stack, 0 /* userId */); 167af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee final WindowTestUtils.TestAppWindowToken token = new WindowTestUtils.TestAppWindowToken(dc); 16872919d2c310db04fdb860e926ccb0bfe6e3aef08Wale Ogunwale task.addChild(token, 0); 16944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale return token; 17044fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 17144fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 17211cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState createWindow(WindowState parent, int type, String name) { 173805d9ecc476134ffafc85a07b05e94a14b1d398cWale Ogunwale return (parent == null) 17411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale ? createWindow(parent, type, mDisplayContent, name) 175805d9ecc476134ffafc85a07b05e94a14b1d398cWale Ogunwale : createWindow(parent, type, parent.mToken, name); 176805d9ecc476134ffafc85a07b05e94a14b1d398cWale Ogunwale } 177805d9ecc476134ffafc85a07b05e94a14b1d398cWale Ogunwale 17811cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState createWindowOnStack(WindowState parent, int stackId, int type, 1798347163dbb64fb61012c0393163283106a0a351eWinson Chung DisplayContent dc, String name) { 1808347163dbb64fb61012c0393163283106a0a351eWinson Chung final WindowToken token = createWindowToken(dc, stackId, type); 1818347163dbb64fb61012c0393163283106a0a351eWinson Chung return createWindow(parent, type, token, name); 1828347163dbb64fb61012c0393163283106a0a351eWinson Chung } 1838347163dbb64fb61012c0393163283106a0a351eWinson Chung 18402886a82d876aa5e31a92444fec70208599c509cJorim Jaggi WindowState createAppWindow(Task task, int type, String name) { 18511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent); 18602886a82d876aa5e31a92444fec70208599c509cJorim Jaggi task.addChild(token, 0); 18702886a82d876aa5e31a92444fec70208599c509cJorim Jaggi return createWindow(null, type, token, name); 18802886a82d876aa5e31a92444fec70208599c509cJorim Jaggi } 18902886a82d876aa5e31a92444fec70208599c509cJorim Jaggi 19011cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) { 1918347163dbb64fb61012c0393163283106a0a351eWinson Chung final WindowToken token = createWindowToken(dc, INVALID_STACK_ID, type); 19244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale return createWindow(parent, type, token, name); 19344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 19444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 19511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name, 19617f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale boolean ownerCanAddInternalSystemWindow) { 1978347163dbb64fb61012c0393163283106a0a351eWinson Chung final WindowToken token = createWindowToken(dc, INVALID_STACK_ID, type); 19817f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale return createWindow(parent, type, token, name, ownerCanAddInternalSystemWindow); 19917f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 20017f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale 2019bafc7150ea41758cf40ba60eb90deb62217fc34Jorim Jaggi static WindowState createWindow(WindowState parent, int type, WindowToken token, String name) { 20217f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale return createWindow(parent, type, token, name, false /* ownerCanAddInternalSystemWindow */); 20317f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale } 20417f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale 20517f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale static WindowState createWindow(WindowState parent, int type, WindowToken token, String name, 20617f175ca1a75d5a4864b88126f5d2a59935d52fdWale Ogunwale boolean ownerCanAddInternalSystemWindow) { 20744fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(type); 20844fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale attrs.setTitle(name); 20944fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale 2108e44f6c46822028a853c41610d2289e299987af0Wale Ogunwale final WindowState w = new WindowState(sWm, sMockSession, sIWindow, token, parent, OP_NONE, 211469395638813abdb7423d0b91d6c42c2b1dcb78aDavid Stevens 0, attrs, VISIBLE, 0, ownerCanAddInternalSystemWindow); 21244fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale // TODO: Probably better to make this call in the WindowState ctor to avoid errors with 21344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale // adding it to the token... 21444fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale token.addWindow(w); 21544fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale return w; 21644fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale } 2173d0bfd9530bc51c52aec027eaf6d0dba918efc99Wale Ogunwale 218d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian /** Creates a {@link TaskStack} and adds it to the specified {@link DisplayContent}. */ 21911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale TaskStack createTaskStackOnDisplay(DisplayContent dc) { 2201666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale return createStackControllerOnDisplay(dc).mContainer; 2211666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale } 2221666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale 22311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale StackWindowController createStackControllerOnDisplay(DisplayContent dc) { 2241666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale final int stackId = ++sNextStackId; 2258347163dbb64fb61012c0393163283106a0a351eWinson Chung return createStackControllerOnStackOnDisplay(stackId, dc); 2268347163dbb64fb61012c0393163283106a0a351eWinson Chung } 2278347163dbb64fb61012c0393163283106a0a351eWinson Chung 22811cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale StackWindowController createStackControllerOnStackOnDisplay(int stackId, 2298347163dbb64fb61012c0393163283106a0a351eWinson Chung DisplayContent dc) { 2301666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale return new StackWindowController(stackId, null, dc.getDisplayId(), 2311666e317dc1a17e9435246ec6c8209dbb6ee3696Wale Ogunwale true /* onTop */, new Rect(), sWm); 232d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian } 233d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian 234367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian /** Creates a {@link Task} and adds it to the specified {@link TaskStack}. */ 23511cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale Task createTaskInStack(TaskStack stack, int userId) { 236af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return WindowTestUtils.createTaskInStack(sWm, stack, userId); 237d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian } 238d276563b38907647ce70940e1e90603826df6ab4Andrii Kulian 239367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian /** Creates a {@link DisplayContent} and adds it to the system. */ 240367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian DisplayContent createNewDisplay() { 241367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian final int displayId = sNextDisplayId++; 242367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId, 24311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale mDisplayInfo, DEFAULT_DISPLAY_ADJUSTMENTS); 24411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale return new DisplayContent(display, sWm, mLayersController, new WallpaperController(sWm)); 245367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian } 246367ff7fd5251790ad8dc086bd386be8cba1dda5cAndrii Kulian 247af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /** Creates a {@link com.android.server.wm.WindowTestUtils.TestWindowState} */ 248af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee WindowTestUtils.TestWindowState createWindowState(WindowManager.LayoutParams attrs, 249af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee WindowToken token) { 250af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return new WindowTestUtils.TestWindowState(sWm, sMockSession, sIWindow, attrs, token); 251c5cc301689649695e03f502e7d1c1492ef5e5d1eWale Ogunwale } 252c5cc301689649695e03f502e7d1c1492ef5e5d1eWale Ogunwale 25344fbdf5b1e13398e35d4bafb7236d194a51ee7afWale Ogunwale} 254