diff options
11 files changed, 149 insertions, 98 deletions
diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java index 759894b907d0..8d5214a86d84 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java @@ -61,7 +61,7 @@ public class AppWindowTokenTests extends WindowTestsBase { mStack = createTaskStackOnDisplay(mDisplayContent); mTask = createTaskInStack(mStack, 0 /* userId */); - mToken = new WindowTestUtils.TestAppWindowToken(mDisplayContent); + mToken = WindowTestUtils.createTestAppWindowToken(mDisplayContent); mTask.addChild(mToken, 0); } diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java index a8556bd00e53..e31e20c847c3 100644 --- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java @@ -193,7 +193,8 @@ public class DisplayContentTests extends WindowTestsBase { assertEquals(dc, stack.getDisplayContent()); final Task task = createTaskInStack(stack, 0 /* userId */); - final WindowTestUtils.TestAppWindowToken token = new WindowTestUtils.TestAppWindowToken(dc); + final WindowTestUtils.TestAppWindowToken token = WindowTestUtils.createTestAppWindowToken( + dc); task.addChild(token, 0); assertEquals(dc, task.getDisplayContent()); assertEquals(dc, token.getDisplayContent()); @@ -265,14 +266,14 @@ public class DisplayContentTests extends WindowTestsBase { final TaskStack stack0 = createTaskStackOnDisplay(dc0); final Task task0 = createTaskInStack(stack0, 0 /* userId */); final WindowTestUtils.TestAppWindowToken token = - new WindowTestUtils.TestAppWindowToken(dc0); + WindowTestUtils.createTestAppWindowToken(dc0); task0.addChild(token, 0); dc0.mTapDetector = new TaskTapPointerEventListener(sWm, dc0); sWm.registerPointerEventListener(dc0.mTapDetector); final TaskStack stack1 = createTaskStackOnDisplay(dc1); final Task task1 = createTaskInStack(stack1, 0 /* userId */); final WindowTestUtils.TestAppWindowToken token1 = - new WindowTestUtils.TestAppWindowToken(dc0); + WindowTestUtils.createTestAppWindowToken(dc0); task1.addChild(token1, 0); dc1.mTapDetector = new TaskTapPointerEventListener(sWm, dc0); sWm.registerPointerEventListener(dc1.mTapDetector); diff --git a/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java index 57da6a3a60a6..a09656c7dc92 100644 --- a/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java @@ -89,7 +89,7 @@ public class DragDropControllerTests extends WindowTestsBase { * Creates a window state which can be used as a drop target. */ private WindowState createDropTargetWindow(String name, int ownerId) { - final WindowTestUtils.TestAppWindowToken token = new WindowTestUtils.TestAppWindowToken( + final WindowTestUtils.TestAppWindowToken token = WindowTestUtils.createTestAppWindowToken( mDisplayContent); final TaskStack stack = createStackControllerOnStackOnDisplay( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, mDisplayContent).mContainer; diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java index 71bcae7cd639..ca1994f85ccf 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java @@ -54,8 +54,8 @@ public class TaskStackContainersTests extends WindowTestsBase { // Stack should contain visible app window to be considered visible. final Task pinnedTask = createTaskInStack(mPinnedStack, 0 /* userId */); assertFalse(mPinnedStack.isVisible()); - final WindowTestUtils.TestAppWindowToken pinnedApp = new WindowTestUtils.TestAppWindowToken( - mDisplayContent); + final WindowTestUtils.TestAppWindowToken pinnedApp = + WindowTestUtils.createTestAppWindowToken(mDisplayContent); pinnedTask.addChild(pinnedApp, 0 /* addPos */); assertTrue(mPinnedStack.isVisible()); } diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java index 0ef78f4527c3..eaf71f0dc5b3 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java @@ -65,13 +65,13 @@ public class TaskStackTests extends WindowTestsBase { final TaskStack stack = createTaskStackOnDisplay(mDisplayContent); final Task task1 = createTaskInStack(stack, 0 /* userId */); WindowTestUtils.TestAppWindowToken appWindowToken1 = - new WindowTestUtils.TestAppWindowToken(mDisplayContent); + WindowTestUtils.createTestAppWindowToken(mDisplayContent); task1.addChild(appWindowToken1, 0); appWindowToken1.setOrientation(SCREEN_ORIENTATION_LANDSCAPE); final Task task2 = createTaskInStack(stack, 1 /* userId */); WindowTestUtils.TestAppWindowToken appWindowToken2 = - new WindowTestUtils.TestAppWindowToken(mDisplayContent); + WindowTestUtils.createTestAppWindowToken(mDisplayContent); task2.addChild(appWindowToken2, 0); appWindowToken2.setOrientation(SCREEN_ORIENTATION_PORTRAIT); @@ -85,13 +85,13 @@ public class TaskStackTests extends WindowTestsBase { final TaskStack stack = createTaskStackOnDisplay(mDisplayContent); final Task task1 = createTaskInStack(stack, 0 /* userId */); WindowTestUtils.TestAppWindowToken appWindowToken1 = - new WindowTestUtils.TestAppWindowToken(mDisplayContent); + WindowTestUtils.createTestAppWindowToken(mDisplayContent); task1.addChild(appWindowToken1, 0); appWindowToken1.setOrientation(SCREEN_ORIENTATION_LANDSCAPE); final Task task2 = createTaskInStack(stack, 1 /* userId */); WindowTestUtils.TestAppWindowToken appWindowToken2 = - new WindowTestUtils.TestAppWindowToken(mDisplayContent); + WindowTestUtils.createTestAppWindowToken(mDisplayContent); task2.addChild(appWindowToken2, 0); appWindowToken2.setOrientation(SCREEN_ORIENTATION_PORTRAIT); diff --git a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java index 4a22a299865c..a5c47deb2c06 100644 --- a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java @@ -44,7 +44,7 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase { @Test public void testFlow() throws Exception { - final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent); + final AppWindowToken token = WindowTestUtils.createTestAppWindowToken(mDisplayContent); sWm.mUnknownAppVisibilityController.notifyLaunched(token); sWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token); sWm.mUnknownAppVisibilityController.notifyRelayouted(token); @@ -56,8 +56,8 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase { @Test public void testMultiple() throws Exception { - final AppWindowToken token1 = new WindowTestUtils.TestAppWindowToken(mDisplayContent); - final AppWindowToken token2 = new WindowTestUtils.TestAppWindowToken(mDisplayContent); + final AppWindowToken token1 = WindowTestUtils.createTestAppWindowToken(mDisplayContent); + final AppWindowToken token2 = WindowTestUtils.createTestAppWindowToken(mDisplayContent); sWm.mUnknownAppVisibilityController.notifyLaunched(token1); sWm.mUnknownAppVisibilityController.notifyAppResumedFinished(token1); sWm.mUnknownAppVisibilityController.notifyLaunched(token2); @@ -72,7 +72,7 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase { @Test public void testClear() throws Exception { - final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent); + final AppWindowToken token = WindowTestUtils.createTestAppWindowToken(mDisplayContent); sWm.mUnknownAppVisibilityController.notifyLaunched(token); sWm.mUnknownAppVisibilityController.clear();; assertTrue(sWm.mUnknownAppVisibilityController.allResolved()); @@ -80,7 +80,7 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase { @Test public void testAppRemoved() throws Exception { - final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent); + final AppWindowToken token = WindowTestUtils.createTestAppWindowToken(mDisplayContent); sWm.mUnknownAppVisibilityController.notifyLaunched(token); sWm.mUnknownAppVisibilityController.appRemovedOrHidden(token); assertTrue(sWm.mUnknownAppVisibilityController.allResolved()); diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java index 7d6301ccfa86..b5d5fc607732 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java @@ -114,7 +114,8 @@ public class WindowFrameTests extends WindowTestsBase { // Just any non zero value. sWm.mSystemDecorLayer = 10000; - mWindowToken = new WindowTestUtils.TestAppWindowToken(sWm.getDefaultDisplayContentLocked()); + mWindowToken = WindowTestUtils.createTestAppWindowToken( + sWm.getDefaultDisplayContentLocked()); mStubStack = new TaskStack(sWm, 0, null); } 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 678aa642d8e1..cdcb949b2a3c 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java @@ -260,7 +260,7 @@ public class WindowStateTests extends WindowTestsBase { // Call prepareWindowToDisplayDuringRelayout for a windows that are not children of an // appWindowToken. Both windows have the FLAG_TURNS_SCREEN_ON so both should call wakeup - final WindowToken windowToken = new WindowTestUtils.TestWindowToken(FIRST_SUB_WINDOW, + final WindowToken windowToken = WindowTestUtils.createTestWindowToken(FIRST_SUB_WINDOW, mDisplayContent); final WindowState firstWindow = createWindow(null, TYPE_APPLICATION, windowToken, "firstWindow"); diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java index 012fc2329ea4..f4cdc90dd959 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java @@ -87,10 +87,12 @@ public class WindowTestUtils { /** Creates a {@link Task} and adds it to the specified {@link TaskStack}. */ public static Task createTaskInStack(WindowManagerService service, TaskStack stack, int userId) { - final Task newTask = new Task(sNextTaskId++, stack, userId, service, 0, false, - new ActivityManager.TaskDescription(), null); - stack.addTask(newTask, POSITION_TOP); - return newTask; + synchronized (service.mWindowMap) { + final Task newTask = new Task(sNextTaskId++, stack, userId, service, 0, false, + new ActivityManager.TaskDescription(), null); + stack.addTask(newTask, POSITION_TOP); + return newTask; + } } /** @@ -108,11 +110,17 @@ public class WindowTestUtils { } } + static TestAppWindowToken createTestAppWindowToken(DisplayContent dc) { + synchronized (dc.mService.mWindowMap) { + return new TestAppWindowToken(dc); + } + } + /** Used so we can gain access to some protected members of the {@link AppWindowToken} class. */ public static class TestAppWindowToken extends AppWindowToken { boolean mOnTop = false; - TestAppWindowToken(DisplayContent dc) { + private TestAppWindowToken(DisplayContent dc) { super(dc.mService, new IApplicationToken.Stub() { public String getName() {return null;} }, false, dc, true /* fillsParent */); @@ -158,14 +166,21 @@ public class WindowTestUtils { } } - /* Used so we can gain access to some protected members of the {@link WindowToken} class */ - public static class TestWindowToken extends WindowToken { + static TestWindowToken createTestWindowToken(int type, DisplayContent dc) { + return createTestWindowToken(type, dc, false /* persistOnEmpty */); + } - TestWindowToken(int type, DisplayContent dc) { - this(type, dc, false /* persistOnEmpty */); + static TestWindowToken createTestWindowToken(int type, DisplayContent dc, + boolean persistOnEmpty) { + synchronized (dc.mService.mWindowMap) { + return new TestWindowToken(type, dc, persistOnEmpty); } + } + + /* Used so we can gain access to some protected members of the {@link WindowToken} class */ + public static class TestWindowToken extends WindowToken { - TestWindowToken(int type, DisplayContent dc, boolean persistOnEmpty) { + private TestWindowToken(int type, DisplayContent dc, boolean persistOnEmpty) { super(dc.mService, mock(IBinder.class), type, persistOnEmpty, dc, false /* ownerCanManageAppTokens */); } diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java index 7499190b0461..6fa27401f136 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java @@ -61,6 +61,8 @@ import java.util.LinkedList; /** * Common base class for window manager unit test classes. + * + * Make sure any requests to WM hold the WM lock if needed b/73966377 */ class WindowTestsBase { private static final String TAG = WindowTestsBase.class.getSimpleName(); @@ -120,21 +122,24 @@ class WindowTestsBase { // Set-up some common windows. mCommonWindows = new HashSet(); - mWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow"); - mImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "mImeWindow"); - sWm.mInputMethodWindow = mImeWindow; - mImeDialogWindow = createCommonWindow(null, TYPE_INPUT_METHOD_DIALOG, - "mImeDialogWindow"); - mStatusBarWindow = createCommonWindow(null, TYPE_STATUS_BAR, "mStatusBarWindow"); - mNavBarWindow = createCommonWindow(null, TYPE_NAVIGATION_BAR, "mNavBarWindow"); - mDockedDividerWindow = createCommonWindow(null, TYPE_DOCK_DIVIDER, - "mDockedDividerWindow"); - mAppWindow = createCommonWindow(null, TYPE_BASE_APPLICATION, "mAppWindow"); - mChildAppWindowAbove = createCommonWindow(mAppWindow, TYPE_APPLICATION_ATTACHED_DIALOG, - "mChildAppWindowAbove"); - mChildAppWindowBelow = createCommonWindow(mAppWindow, TYPE_APPLICATION_MEDIA_OVERLAY, - "mChildAppWindowBelow"); - + synchronized (sWm.mWindowMap) { + mWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow"); + mImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "mImeWindow"); + sWm.mInputMethodWindow = mImeWindow; + mImeDialogWindow = createCommonWindow(null, TYPE_INPUT_METHOD_DIALOG, + "mImeDialogWindow"); + mStatusBarWindow = createCommonWindow(null, TYPE_STATUS_BAR, "mStatusBarWindow"); + mNavBarWindow = createCommonWindow(null, TYPE_NAVIGATION_BAR, "mNavBarWindow"); + mDockedDividerWindow = createCommonWindow(null, TYPE_DOCK_DIVIDER, + "mDockedDividerWindow"); + mAppWindow = createCommonWindow(null, TYPE_BASE_APPLICATION, "mAppWindow"); + mChildAppWindowAbove = createCommonWindow(mAppWindow, + TYPE_APPLICATION_ATTACHED_DIALOG, + "mChildAppWindowAbove"); + mChildAppWindowBelow = createCommonWindow(mAppWindow, + TYPE_APPLICATION_MEDIA_OVERLAY, + "mChildAppWindowBelow"); + } // Adding a display will cause freezing the display. Make sure to wait until it's // unfrozen to not run into race conditions with the tests. waitUntilHandlersIdle(); @@ -187,11 +192,13 @@ class WindowTestsBase { } private WindowState createCommonWindow(WindowState parent, int type, String name) { - final WindowState win = createWindow(parent, type, name); - mCommonWindows.add(win); - // Prevent common windows from been IMe targets - win.mAttrs.flags |= FLAG_NOT_FOCUSABLE; - return win; + synchronized (sWm.mWindowMap) { + final WindowState win = createWindow(parent, type, name); + mCommonWindows.add(win); + // Prevent common windows from been IMe targets + win.mAttrs.flags |= FLAG_NOT_FOCUSABLE; + return win; + } } /** Asserts that the first entry is greater than the second entry. */ @@ -215,11 +222,13 @@ class WindowTestsBase { private WindowToken createWindowToken( DisplayContent dc, int windowingMode, int activityType, int type) { - if (type < FIRST_APPLICATION_WINDOW || type > LAST_APPLICATION_WINDOW) { - return new WindowTestUtils.TestWindowToken(type, dc); - } + synchronized (sWm.mWindowMap) { + if (type < FIRST_APPLICATION_WINDOW || type > LAST_APPLICATION_WINDOW) { + return WindowTestUtils.createTestWindowToken(type, dc); + } - return createAppWindowToken(dc, windowingMode, activityType); + return createAppWindowToken(dc, windowingMode, activityType); + } } AppWindowToken createAppWindowToken(DisplayContent dc, int windowingMode, int activityType) { @@ -227,81 +236,103 @@ class WindowTestsBase { dc).mContainer; final Task task = createTaskInStack(stack, 0 /* userId */); final WindowTestUtils.TestAppWindowToken appWindowToken = - new WindowTestUtils.TestAppWindowToken(mDisplayContent); + WindowTestUtils.createTestAppWindowToken(dc); task.addChild(appWindowToken, 0); return appWindowToken; } WindowState createWindow(WindowState parent, int type, String name) { - return (parent == null) - ? createWindow(parent, type, mDisplayContent, name) - : createWindow(parent, type, parent.mToken, name); + synchronized (sWm.mWindowMap) { + return (parent == null) + ? createWindow(parent, type, mDisplayContent, name) + : createWindow(parent, type, parent.mToken, name); + } } WindowState createWindowOnStack(WindowState parent, int windowingMode, int activityType, int type, DisplayContent dc, String name) { - final WindowToken token = createWindowToken(dc, windowingMode, activityType, type); - return createWindow(parent, type, token, name); + synchronized (sWm.mWindowMap) { + final WindowToken token = createWindowToken(dc, windowingMode, activityType, type); + return createWindow(parent, type, token, name); + } } WindowState createAppWindow(Task task, int type, String name) { - final AppWindowToken token = new WindowTestUtils.TestAppWindowToken(mDisplayContent); - task.addChild(token, 0); - return createWindow(null, type, token, name); + synchronized (sWm.mWindowMap) { + final AppWindowToken token = WindowTestUtils.createTestAppWindowToken(mDisplayContent); + task.addChild(token, 0); + return createWindow(null, type, token, name); + } } WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) { - final WindowToken token = createWindowToken( - dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type); - return createWindow(parent, type, token, name); + synchronized (sWm.mWindowMap) { + final WindowToken token = createWindowToken( + dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type); + return createWindow(parent, type, token, name); + } } WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name, boolean ownerCanAddInternalSystemWindow) { - final WindowToken token = createWindowToken( - dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type); - return createWindow(parent, type, token, name, 0 /* ownerId */, - ownerCanAddInternalSystemWindow); + synchronized (sWm.mWindowMap) { + final WindowToken token = createWindowToken( + dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type); + return createWindow(parent, type, token, name, 0 /* ownerId */, + ownerCanAddInternalSystemWindow); + } } static WindowState createWindow(WindowState parent, int type, WindowToken token, String name) { - return createWindow(parent, type, token, name, 0 /* ownerId */, - false /* ownerCanAddInternalSystemWindow */); + synchronized (sWm.mWindowMap) { + return createWindow(parent, type, token, name, 0 /* ownerId */, + false /* ownerCanAddInternalSystemWindow */); + } } static WindowState createWindow(WindowState parent, int type, WindowToken token, String name, int ownerId, boolean ownerCanAddInternalSystemWindow) { - final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(type); - attrs.setTitle(name); - - final WindowState w = new WindowState(sWm, sMockSession, sIWindow, token, parent, OP_NONE, - 0, attrs, VISIBLE, ownerId, ownerCanAddInternalSystemWindow, mPowerManagerWrapper); - // TODO: Probably better to make this call in the WindowState ctor to avoid errors with - // adding it to the token... - token.addWindow(w); - return w; + synchronized (sWm.mWindowMap) { + final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(type); + attrs.setTitle(name); + + final WindowState w = new WindowState(sWm, sMockSession, sIWindow, token, parent, + OP_NONE, + 0, attrs, VISIBLE, ownerId, ownerCanAddInternalSystemWindow, + mPowerManagerWrapper); + // TODO: Probably better to make this call in the WindowState ctor to avoid errors with + // adding it to the token... + token.addWindow(w); + return w; + } } /** Creates a {@link TaskStack} and adds it to the specified {@link DisplayContent}. */ TaskStack createTaskStackOnDisplay(DisplayContent dc) { - return createStackControllerOnDisplay(dc).mContainer; + synchronized (sWm.mWindowMap) { + return createStackControllerOnDisplay(dc).mContainer; + } } StackWindowController createStackControllerOnDisplay(DisplayContent dc) { - return createStackControllerOnStackOnDisplay( - WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, dc); + synchronized (sWm.mWindowMap) { + return createStackControllerOnStackOnDisplay( + WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, dc); + } } StackWindowController createStackControllerOnStackOnDisplay( int windowingMode, int activityType, DisplayContent dc) { - final Configuration overrideConfig = new Configuration(); - overrideConfig.windowConfiguration.setWindowingMode(windowingMode); - overrideConfig.windowConfiguration.setActivityType(activityType); - final int stackId = ++sNextStackId; - final StackWindowController controller = new StackWindowController(stackId, null, - dc.getDisplayId(), true /* onTop */, new Rect(), sWm); - controller.onOverrideConfigurationChanged(overrideConfig); - return controller; + synchronized (sWm.mWindowMap) { + final Configuration overrideConfig = new Configuration(); + overrideConfig.windowConfiguration.setWindowingMode(windowingMode); + overrideConfig.windowConfiguration.setActivityType(activityType); + final int stackId = ++sNextStackId; + final StackWindowController controller = new StackWindowController(stackId, null, + dc.getDisplayId(), true /* onTop */, new Rect(), sWm); + controller.onOverrideConfigurationChanged(overrideConfig); + return controller; + } } /** Creates a {@link Task} and adds it to the specified {@link TaskStack}. */ @@ -314,14 +345,18 @@ class WindowTestsBase { final int displayId = sNextDisplayId++; final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId, mDisplayInfo, DEFAULT_DISPLAY_ADJUSTMENTS); - return new DisplayContent(display, sWm, mWallpaperController, - mock(DisplayWindowController.class)); + synchronized (sWm.mWindowMap) { + return new DisplayContent(display, sWm, mWallpaperController, + mock(DisplayWindowController.class)); + } } /** Creates a {@link com.android.server.wm.WindowTestUtils.TestWindowState} */ WindowTestUtils.TestWindowState createWindowState(WindowManager.LayoutParams attrs, WindowToken token) { - return new WindowTestUtils.TestWindowState(sWm, sMockSession, sIWindow, attrs, token); + synchronized (sWm.mWindowMap) { + return new WindowTestUtils.TestWindowState(sWm, sMockSession, sIWindow, attrs, token); + } } } diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java index 394e636d34ac..e3b717435052 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java @@ -49,7 +49,7 @@ public class WindowTokenTests extends WindowTestsBase { @Test public void testAddWindow() throws Exception { final WindowTestUtils.TestWindowToken token = - new WindowTestUtils.TestWindowToken(0, mDisplayContent); + WindowTestUtils.createTestWindowToken(0, mDisplayContent); assertEquals(0, token.getWindowsCount()); @@ -79,7 +79,7 @@ public class WindowTokenTests extends WindowTestsBase { @Test public void testChildRemoval() throws Exception { final DisplayContent dc = mDisplayContent; - final WindowTestUtils.TestWindowToken token = new WindowTestUtils.TestWindowToken(0, dc); + final WindowTestUtils.TestWindowToken token = WindowTestUtils.createTestWindowToken(0, dc); assertEquals(token, dc.getWindowToken(token.token)); @@ -102,9 +102,8 @@ public class WindowTokenTests extends WindowTestsBase { */ @Test public void testTokenRemovalProcess() throws Exception { - final WindowTestUtils.TestWindowToken token = - new WindowTestUtils.TestWindowToken(TYPE_TOAST, mDisplayContent, - true /* persistOnEmpty */); + final WindowTestUtils.TestWindowToken token = WindowTestUtils.createTestWindowToken( + TYPE_TOAST, mDisplayContent, true /* persistOnEmpty */); // Verify that the token is on the display assertNotNull(mDisplayContent.getWindowToken(token.token)); |