1af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee/* 2af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * Copyright (C) 2017 The Android Open Source Project 3af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * 4af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * Licensed under the Apache License, Version 2.0 (the "License"); 5af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * you may not use this file except in compliance with the License. 6af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * You may obtain a copy of the License at 7af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * 8af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * http://www.apache.org/licenses/LICENSE-2.0 9af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * 10af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * Unless required by applicable law or agreed to in writing, software 11af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * distributed under the License is distributed on an "AS IS" BASIS, 12af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * See the License for the specific language governing permissions and 14af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * limitations under the License 15af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee */ 16af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 17af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leepackage com.android.server.wm; 18af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 19af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport android.app.ActivityManager; 20af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport android.content.Context; 21af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport android.content.res.Configuration; 22af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport android.graphics.Rect; 23af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport android.os.Binder; 24af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport android.os.IBinder; 25af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport android.view.IApplicationToken; 26af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport android.view.IWindow; 27af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport android.view.WindowManager; 28af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 29af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport static android.app.AppOpsManager.OP_NONE; 30af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE; 31af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; 32af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport static android.content.res.Configuration.EMPTY; 33af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport static com.android.server.wm.WindowContainer.POSITION_TOP; 34af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leeimport static org.mockito.Mockito.mock; 35af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 36af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee/** 37af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * A collection of static functions that can be referenced by other test packages to provide access 38af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * to WindowManager related test functionality. 39af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee */ 40af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Leepublic class WindowTestUtils { 41af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static int sNextTaskId = 0; 42af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 43af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /** 44af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * Retrieves an instance of {@link WindowManagerService}, creating it if necessary. 45af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee */ 46af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static WindowManagerService getWindowManagerService(Context context) { 47af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return TestWindowManagerPolicy.getWindowManagerService(context); 48af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 49af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 50af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /** 5104ab3466fabb7244660adf54740a4f60874b02a1Bryce Lee * Retrieves an instance of a mock {@link WindowManagerService}. 5204ab3466fabb7244660adf54740a4f60874b02a1Bryce Lee */ 5304ab3466fabb7244660adf54740a4f60874b02a1Bryce Lee public static WindowManagerService getMockWindowManagerService() { 5404ab3466fabb7244660adf54740a4f60874b02a1Bryce Lee return mock(WindowManagerService.class); 5504ab3466fabb7244660adf54740a4f60874b02a1Bryce Lee } 5604ab3466fabb7244660adf54740a4f60874b02a1Bryce Lee 5704ab3466fabb7244660adf54740a4f60874b02a1Bryce Lee /** 58af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * Creates a mock instance of {@link StackWindowController}. 59af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee */ 60af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static StackWindowController createMockStackWindowContainerController() { 61af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee StackWindowController controller = mock(StackWindowController.class); 62af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee controller.mContainer = mock(TestTaskStack.class); 63af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return controller; 64af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 65af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 66af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /** Creates a {@link Task} and adds it to the specified {@link TaskStack}. */ 67af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static Task createTaskInStack(WindowManagerService service, TaskStack stack, 68af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee int userId) { 692f569ed618f0eb834efb7a27c57d8ca43bcf4f1bWale Ogunwale final Task newTask = new Task(sNextTaskId++, stack, userId, service, null, EMPTY, 0, false, 70af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee false, new ActivityManager.TaskDescription(), null); 71af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee stack.addTask(newTask, POSITION_TOP); 72af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return newTask; 73af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 74af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 75af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /** 76af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * An extension of {@link TestTaskStack}, which overrides package scoped methods that would not 77af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * normally be mocked out. 78af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee */ 79af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static class TestTaskStack extends TaskStack { 80af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestTaskStack(WindowManagerService service, int stackId) { 81af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee super(service, stackId); 82af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 83af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 84af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 85af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee void addTask(Task task, int position, boolean showForAllUsers, boolean moveParents) { 86af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee // Do nothing. 87af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 88af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 89af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 90af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /** Used so we can gain access to some protected members of the {@link AppWindowToken} class. */ 91af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static class TestAppWindowToken extends AppWindowToken { 92af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 93af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestAppWindowToken(DisplayContent dc) { 942f569ed618f0eb834efb7a27c57d8ca43bcf4f1bWale Ogunwale super(dc.mService, new IApplicationToken.Stub() {}, false, dc, true /* fillsParent */, 95af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee null /* overrideConfig */, null /* bounds */); 96af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 97af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 98af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestAppWindowToken(WindowManagerService service, IApplicationToken token, 99af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean voiceInteraction, DisplayContent dc, long inputDispatchingTimeoutNanos, 100af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean fullscreen, boolean showForAllUsers, int targetSdk, int orientation, 101af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee int rotationAnimationHint, int configChanges, boolean launchTaskBehind, 102af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean alwaysFocusable, AppWindowContainerController controller, 103af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee Configuration overrideConfig, Rect bounds) { 104af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee super(service, token, voiceInteraction, dc, inputDispatchingTimeoutNanos, fullscreen, 105af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee showForAllUsers, targetSdk, orientation, rotationAnimationHint, configChanges, 106af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee launchTaskBehind, alwaysFocusable, controller, overrideConfig, bounds); 107af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 108af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 109af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee int getWindowsCount() { 110af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return mChildren.size(); 111af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 112af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 113af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean hasWindow(WindowState w) { 114af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return mChildren.contains(w); 115af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 116af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 117af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee WindowState getFirstChild() { 118612bb885bcef87034070e8e3bfc0b0e953c0f606Jorim Jaggi return mChildren.peekFirst(); 119af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 120af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 121af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee WindowState getLastChild() { 122612bb885bcef87034070e8e3bfc0b0e953c0f606Jorim Jaggi return mChildren.peekLast(); 123af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 124af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 125af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee int positionInParent() { 126af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return getParent().mChildren.indexOf(this); 127af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 128af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 129af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 130af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /* Used so we can gain access to some protected members of the {@link WindowToken} class */ 131af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static class TestWindowToken extends WindowToken { 132af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee int adj = 0; 133af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 134af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestWindowToken(int type, DisplayContent dc) { 135af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee this(type, dc, false /* persistOnEmpty */); 136af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 137af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 138af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestWindowToken(int type, DisplayContent dc, boolean persistOnEmpty) { 13911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale super(dc.mService, mock(IBinder.class), type, persistOnEmpty, dc, 140af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee false /* ownerCanManageAppTokens */); 141af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 142af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 143af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee int getWindowsCount() { 144af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return mChildren.size(); 145af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 146af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 147af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean hasWindow(WindowState w) { 148af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return mChildren.contains(w); 149af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 150af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 151af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 152af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee int getAnimLayerAdjustment() { 153af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return adj; 154af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 155af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 156af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 157af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /* Used so we can gain access to some protected members of the {@link Task} class */ 158af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static class TestTask extends Task { 159af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean mShouldDeferRemoval = false; 160af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean mOnDisplayChangedCalled = false; 161af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee private boolean mUseLocalIsAnimating = false; 162af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee private boolean mIsAnimating = false; 163af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 164af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestTask(int taskId, TaskStack stack, int userId, WindowManagerService service, Rect bounds, 165af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee Configuration overrideConfig, int resizeMode, boolean supportsPictureInPicture, 166af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean homeTask, TaskWindowContainerController controller) { 167af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee super(taskId, stack, userId, service, bounds, overrideConfig, resizeMode, 168af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee supportsPictureInPicture, homeTask, new ActivityManager.TaskDescription(), 169af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee controller); 170af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 171af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 172af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean shouldDeferRemoval() { 173af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return mShouldDeferRemoval; 174af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 175af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 176af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee int positionInParent() { 177af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return getParent().mChildren.indexOf(this); 178af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 179af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 180af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 181af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee void onDisplayChanged(DisplayContent dc) { 182af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee super.onDisplayChanged(dc); 183af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee mOnDisplayChangedCalled = true; 184af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 185af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 186af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 187af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean isAnimating() { 188af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return mUseLocalIsAnimating ? mIsAnimating : super.isAnimating(); 189af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 190af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 191af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee void setLocalIsAnimating(boolean isAnimating) { 192af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee mUseLocalIsAnimating = true; 193af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee mIsAnimating = isAnimating; 194af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 195af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 196af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 197af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /** 198af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * Used so we can gain access to some protected members of {@link TaskWindowContainerController} 199af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee * class. 200af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee */ 201af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static class TestTaskWindowContainerController extends TaskWindowContainerController { 202af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 20311cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale TestTaskWindowContainerController(WindowTestsBase testsBase) { 20411cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale this(testsBase.createStackControllerOnDisplay(testsBase.mDisplayContent)); 205af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 206af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 207af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestTaskWindowContainerController(StackWindowController stackController) { 208af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee super(sNextTaskId++, new TaskWindowContainerListener() { 209af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 210af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public void onSnapshotChanged(ActivityManager.TaskSnapshot snapshot) { 211af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 212af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 213af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 214af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 215af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public void requestResize(Rect bounds, int resizeMode) { 216af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 217af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 218af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee }, stackController, 0 /* userId */, null /* bounds */, 219af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee EMPTY /* overrideConfig*/, RESIZE_MODE_UNRESIZEABLE, 220af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee false /* supportsPictureInPicture */, false /* homeTask*/, true /* toTop*/, 22111cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale true /* showForAllUsers */, new ActivityManager.TaskDescription(), 22211cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale stackController.mService); 223af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 224af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 225af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 226af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestTask createTask(int taskId, TaskStack stack, int userId, Rect bounds, 227af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee Configuration overrideConfig, int resizeMode, boolean supportsPictureInPicture, 228af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean homeTask, ActivityManager.TaskDescription taskDescription) { 229af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return new TestTask(taskId, stack, userId, mService, bounds, overrideConfig, resizeMode, 230af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee supportsPictureInPicture, homeTask, this); 231af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 232af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 233af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 234af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static class TestAppWindowContainerController extends AppWindowContainerController { 235af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 236af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee final IApplicationToken mToken; 237af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 238af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestAppWindowContainerController(TestTaskWindowContainerController taskController) { 239af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee this(taskController, new TestIApplicationToken()); 240af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 241af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 242af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestAppWindowContainerController(TestTaskWindowContainerController taskController, 243af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee IApplicationToken token) { 244af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee super(taskController, token, null /* listener */, 0 /* index */, 245af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee SCREEN_ORIENTATION_UNSPECIFIED, true /* fullscreen */, 246af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee true /* showForAllUsers */, 0 /* configChanges */, false /* voiceInteraction */, 247af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee false /* launchTaskBehind */, false /* alwaysFocusable */, 248af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 0 /* targetSdkVersion */, 0 /* rotationAnimationHint */, 24911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale 0 /* inputDispatchingTimeoutNanos */, taskController.mService, 25011cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale null /* overrideConfig */, null /* bounds */); 251af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee mToken = token; 252af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 253af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 254af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 255af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee AppWindowToken createAppWindow(WindowManagerService service, IApplicationToken token, 256af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean voiceInteraction, DisplayContent dc, long inputDispatchingTimeoutNanos, 257af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean fullscreen, boolean showForAllUsers, int targetSdk, int orientation, 258af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee int rotationAnimationHint, int configChanges, boolean launchTaskBehind, 259af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean alwaysFocusable, AppWindowContainerController controller, 260af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee Configuration overrideConfig, Rect bounds) { 261af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return new TestAppWindowToken(service, token, voiceInteraction, dc, 262af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee inputDispatchingTimeoutNanos, fullscreen, showForAllUsers, targetSdk, 263af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee orientation, 264af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee rotationAnimationHint, configChanges, launchTaskBehind, alwaysFocusable, 265af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee controller, overrideConfig, bounds); 266af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 267af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 26811cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale AppWindowToken getAppWindowToken(DisplayContent dc) { 26911cc516a925ac7fc814dbb0a79a7f0abfbfe1ce1Wale Ogunwale return (AppWindowToken) dc.getWindowToken(mToken.asBinder()); 270af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 271af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 272af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 273af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static class TestIApplicationToken implements IApplicationToken { 274af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 275af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee private final Binder mBinder = new Binder(); 276af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 277af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public IBinder asBinder() { 278af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return mBinder; 279af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 280af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 281af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 282af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee /** Used to track resize reports. */ 283af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public static class TestWindowState extends WindowState { 284af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean resizeReported; 285af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 286af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee TestWindowState(WindowManagerService service, Session session, IWindow window, 287af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee WindowManager.LayoutParams attrs, WindowToken token) { 288af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee super(service, session, window, token, null, OP_NONE, 0, attrs, 0, 0, 289af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee false /* ownerCanAddInternalSystemWindow */); 290af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 291af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 292af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 293af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee void reportResized() { 294af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee super.reportResized(); 295af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee resizeReported = true; 296af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 297af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 298af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 299af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee public boolean isGoneForLayoutLw() { 300af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee return false; 301af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 302af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 303af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee @Override 304af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee void updateResizingWindowIfNeeded() { 305af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee // Used in AppWindowTokenTests#testLandscapeSeascapeRotationRelayout to deceive 306af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee // the system that it can actually update the window. 307af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee boolean hadSurface = mHasSurface; 308af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee mHasSurface = true; 309af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 310af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee super.updateResizingWindowIfNeeded(); 311af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee 312af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee mHasSurface = hadSurface; 313af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 314af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee } 315af691c0be7bbfea63e880dd717c51a38a0bc874aBryce Lee} 316