diff options
31 files changed, 1022 insertions, 1083 deletions
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java index f69d7c332382..1eb45d587d33 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java @@ -59,7 +59,7 @@ import org.junit.runner.RunWith; @Presubmit @RunWith(WindowTestRunner.class) // TODO(b/144248496): Merge to DisplayContentTests -public class ActivityDisplayTests extends ActivityTestsBase { +public class ActivityDisplayTests extends WindowTestsBase { @Test public void testLastFocusedStackIsUpdatedWhenMovingStack() { @@ -89,9 +89,9 @@ public class ActivityDisplayTests extends ActivityTestsBase { // Create a pinned stack and move to front. final Task pinnedStack = mRootWindowContainer.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD, ON_TOP); - final Task pinnedTask = new TaskBuilder(mService.mStackSupervisor) + final Task pinnedTask = new TaskBuilder(mAtm.mStackSupervisor) .setStack(pinnedStack).build(); - new ActivityBuilder(mService).setActivityFlags(FLAG_ALWAYS_FOCUSABLE) + new ActivityBuilder(mAtm).setActivityFlags(FLAG_ALWAYS_FOCUSABLE) .setTask(pinnedTask).build(); pinnedStack.moveToFront("movePinnedStackToFront"); @@ -140,7 +140,7 @@ public class ActivityDisplayTests extends ActivityTestsBase { // Create a display which supports system decoration and allows reparenting stacks to // another display when the display is removed. final DisplayContent display = new TestDisplayContent.Builder( - mService, 1000, 1500).setSystemDecorations(true).build(); + mAtm, 1000, 1500).setSystemDecorations(true).build(); doReturn(false).when(display).shouldDestroyContentOnRemove(); // Put home stack on the display. @@ -162,9 +162,9 @@ public class ActivityDisplayTests extends ActivityTestsBase { private Task createFullscreenStackWithSimpleActivityAt(DisplayContent display) { final Task fullscreenStack = display.getDefaultTaskDisplayArea().createStack( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, ON_TOP); - final Task fullscreenTask = new TaskBuilder(mService.mStackSupervisor) + final Task fullscreenTask = new TaskBuilder(mAtm.mStackSupervisor) .setStack(fullscreenStack).build(); - new ActivityBuilder(mService).setTask(fullscreenTask).build(); + new ActivityBuilder(mAtm).setTask(fullscreenTask).build(); return fullscreenStack; } @@ -197,7 +197,7 @@ public class ActivityDisplayTests extends ActivityTestsBase { assertNull(display.topRunningActivity(true /* considerKeyguardState */)); // Add activity that should be shown on the keyguard. - final ActivityRecord showWhenLockedActivity = new ActivityBuilder(mService) + final ActivityRecord showWhenLockedActivity = new ActivityBuilder(mAtm) .setCreateTask(true) .setStack(stack) .setActivityFlags(FLAG_SHOW_WHEN_LOCKED) @@ -226,7 +226,7 @@ public class ActivityDisplayTests extends ActivityTestsBase { final TaskDisplayArea taskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea(); final Task alwaysOnTopStack = taskDisplayArea.createStack(WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, true /* onTop */); - final ActivityRecord activity = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(alwaysOnTopStack).build(); alwaysOnTopStack.setAlwaysOnTop(true); taskDisplayArea.positionChildAt(POSITION_TOP, alwaysOnTopStack, @@ -322,10 +322,10 @@ public class ActivityDisplayTests extends ActivityTestsBase { ACTIVITY_TYPE_STANDARD, ON_TOP); final Task stack4 = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, ON_TOP); - final Task task1 = new TaskBuilder(mService.mStackSupervisor).setStack(stack1).build(); - final Task task2 = new TaskBuilder(mService.mStackSupervisor).setStack(stack2).build(); - final Task task3 = new TaskBuilder(mService.mStackSupervisor).setStack(stack3).build(); - final Task task4 = new TaskBuilder(mService.mStackSupervisor).setStack(stack4).build(); + final Task task1 = new TaskBuilder(mAtm.mStackSupervisor).setStack(stack1).build(); + final Task task2 = new TaskBuilder(mAtm.mStackSupervisor).setStack(stack2).build(); + final Task task3 = new TaskBuilder(mAtm.mStackSupervisor).setStack(stack3).build(); + final Task task4 = new TaskBuilder(mAtm.mStackSupervisor).setStack(stack4).build(); // Reordering stacks while removing stacks. doAnswer(invocation -> { diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java index feac6dbe1051..46c3e22da38c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java @@ -59,7 +59,7 @@ import java.util.concurrent.TimeUnit; @SmallTest @Presubmit @RunWith(WindowTestRunner.class) -public class ActivityMetricsLaunchObserverTests extends ActivityTestsBase { +public class ActivityMetricsLaunchObserverTests extends WindowTestsBase { private ActivityMetricsLogger mActivityMetricsLogger; private ActivityMetricsLogger.LaunchingState mLaunchingState; private ActivityMetricsLaunchObserver mLaunchObserver; @@ -81,11 +81,11 @@ public class ActivityMetricsLaunchObserverTests extends ActivityTestsBase { // Sometimes we need an ActivityRecord for ActivityMetricsLogger to do anything useful. // This seems to be the easiest way to create an ActivityRecord. - mTrampolineActivity = new ActivityBuilder(mService) + mTrampolineActivity = new ActivityBuilder(mAtm) .setCreateTask(true) .setComponent(createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, "TrampolineActivity")) .build(); - mTopActivity = new ActivityBuilder(mService) + mTopActivity = new ActivityBuilder(mAtm) .setTask(mTrampolineActivity.getTask()) .setComponent(createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, "TopActivity")) .build(); @@ -121,7 +121,7 @@ public class ActivityMetricsLaunchObserverTests extends ActivityTestsBase { private <T> T verifyAsync(T mock) { // With WindowTestRunner, all test methods are inside WM lock, so we have to unblock any // messages that are waiting for the lock. - waitHandlerIdle(mService.mH); + waitHandlerIdle(mAtm.mH); // AMLO callbacks happen on a separate thread than AML calls, so we need to use a timeout. return verify(mock, timeout(TimeUnit.SECONDS.toMillis(5))); } @@ -192,7 +192,7 @@ public class ActivityMetricsLaunchObserverTests extends ActivityTestsBase { // Suppress resume when creating the record because we want to notify logger manually. mSupervisor.beginDeferResume(); // Create an activity with different process that meets process switch. - final ActivityRecord noDrawnActivity = new ActivityBuilder(mService) + final ActivityRecord noDrawnActivity = new ActivityBuilder(mAtm) .setTask(mTopActivity.getTask()) .setProcessName("other") .build(); @@ -321,7 +321,7 @@ public class ActivityMetricsLaunchObserverTests extends ActivityTestsBase { onActivityLaunched(mTopActivity); final ActivityMetricsLogger.LaunchingState previousState = mLaunchingState; - final ActivityRecord otherActivity = new ActivityBuilder(mService) + final ActivityRecord otherActivity = new ActivityBuilder(mAtm) .setComponent(createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, "OtherActivity")) .setCreateTask(true) .build(); @@ -345,7 +345,7 @@ public class ActivityMetricsLaunchObserverTests extends ActivityTestsBase { .setDisplay(addNewDisplayContentAt(DisplayContent.POSITION_BOTTOM)) .setCreateActivity(false) .build(); - final ActivityRecord activityOnNewDisplay = new ActivityBuilder(mService) + final ActivityRecord activityOnNewDisplay = new ActivityBuilder(mAtm) .setStack(stack) .setCreateTask(true) .setProcessName("new") diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index 2f020736d059..e3830f686a42 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -67,7 +67,6 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; @@ -122,7 +121,7 @@ import org.mockito.invocation.InvocationOnMock; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class ActivityRecordTests extends ActivityTestsBase { +public class ActivityRecordTests extends WindowTestsBase { private Task mStack; private Task mTask; private ActivityRecord mActivity; @@ -133,7 +132,7 @@ public class ActivityRecordTests extends ActivityTestsBase { mTask = mStack.getBottomMostTask(); mActivity = mTask.getTopNonFinishingActivity(); - setBooted(mService); + setBooted(mAtm); } @Test @@ -152,16 +151,16 @@ public class ActivityRecordTests extends ActivityTestsBase { public void testStackCleanupOnTaskRemoval() { mStack.removeChild(mTask, null /*reason*/); // Stack should be gone on task removal. - assertNull(mService.mRootWindowContainer.getStack(mStack.mTaskId)); + assertNull(mAtm.mRootWindowContainer.getStack(mStack.mTaskId)); } @Test public void testRemoveChildWithOverlayActivity() { final ActivityRecord overlayActivity = - new ActivityBuilder(mService).setTask(mTask).build(); + new ActivityBuilder(mAtm).setTask(mTask).build(); overlayActivity.setTaskOverlay(true); final ActivityRecord overlayActivity2 = - new ActivityBuilder(mService).setTask(mTask).build(); + new ActivityBuilder(mAtm).setTask(mTask).build(); overlayActivity2.setTaskOverlay(true); mTask.removeChild(overlayActivity2, "test"); @@ -170,7 +169,7 @@ public class ActivityRecordTests extends ActivityTestsBase { @Test public void testNoCleanupMovingActivityInSameStack() { - final Task newTask = new TaskBuilder(mService.mStackSupervisor).setStack(mStack).build(); + final Task newTask = new TaskBuilder(mAtm.mStackSupervisor).setStack(mStack).build(); mActivity.reparent(newTask, 0, null /*reason*/); verify(mStack, times(0)).cleanUpActivityReferences(any()); } @@ -213,7 +212,7 @@ public class ActivityRecordTests extends ActivityTestsBase { // Make sure the state does not change if we are not the current top activity. mActivity.setState(STOPPED, "testPausingWhenVisibleFromStopped behind"); - final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); mStack.mTranslucentActivityWaiting = topActivity; mActivity.makeVisibleIfNeeded(null /* starting */, true /* reportToClient */); assertTrue(mActivity.isState(STARTED)); @@ -231,8 +230,8 @@ public class ActivityRecordTests extends ActivityTestsBase { @Test public void testCanBeLaunchedOnDisplay() { - mService.mSupportsMultiWindow = true; - final ActivityRecord activity = new ActivityBuilder(mService).build(); + mAtm.mSupportsMultiWindow = true; + final ActivityRecord activity = new ActivityBuilder(mAtm).build(); // An activity can be launched on default display. assertTrue(activity.canBeLaunchedOnDisplay(DEFAULT_DISPLAY)); @@ -251,7 +250,7 @@ public class ActivityRecordTests extends ActivityTestsBase { // Set options for two ActivityRecords in same Task. Apply one ActivityRecord options. // Pending options should be cleared for both ActivityRecords - ActivityRecord activity2 = new ActivityBuilder(mService).setTask(mTask).build(); + ActivityRecord activity2 = new ActivityBuilder(mAtm).setTask(mTask).build(); activity2.updateOptionsLocked(activityOptions); mActivity.updateOptionsLocked(activityOptions); mActivity.applyOptionsLocked(); @@ -260,8 +259,8 @@ public class ActivityRecordTests extends ActivityTestsBase { // Set options for two ActivityRecords in separate Tasks. Apply one ActivityRecord options. // Pending options should be cleared for only ActivityRecord that was applied - Task task2 = new TaskBuilder(mService.mStackSupervisor).setStack(mStack).build(); - activity2 = new ActivityBuilder(mService).setTask(task2).build(); + Task task2 = new TaskBuilder(mAtm.mStackSupervisor).setStack(mStack).build(); + activity2 = new ActivityBuilder(mAtm).setTask(task2).build(); activity2.updateOptionsLocked(activityOptions); mActivity.updateOptionsLocked(activityOptions); mActivity.applyOptionsLocked(); @@ -362,7 +361,7 @@ public class ActivityRecordTests extends ActivityTestsBase { @Test public void testSetRequestedOrientationUpdatesConfiguration() throws Exception { - mActivity = new ActivityBuilder(mService) + mActivity = new ActivityBuilder(mAtm) .setTask(mTask) .setConfigChanges(CONFIG_ORIENTATION | CONFIG_SCREEN_LAYOUT) .build(); @@ -405,7 +404,7 @@ public class ActivityRecordTests extends ActivityTestsBase { final ActivityConfigurationChangeItem expected = ActivityConfigurationChangeItem.obtain(newConfig); - verify(mService.getLifecycleManager()).scheduleTransaction(eq(mActivity.app.getThread()), + verify(mAtm.getLifecycleManager()).scheduleTransaction(eq(mActivity.app.getThread()), eq(mActivity.appToken), eq(expected)); } @@ -500,9 +499,9 @@ public class ActivityRecordTests extends ActivityTestsBase { @Test public void testShouldMakeActive_nonTopVisible() { - ActivityRecord finishingActivity = new ActivityBuilder(mService).setTask(mTask).build(); + ActivityRecord finishingActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); finishingActivity.finishing = true; - ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); mActivity.setState(Task.ActivityState.STOPPED, "Testing"); assertEquals(false, mActivity.shouldMakeActive(null /* activeActivity */)); @@ -528,7 +527,7 @@ public class ActivityRecordTests extends ActivityTestsBase { mActivity.setState(Task.ActivityState.STOPPED, "Testing"); spyOn(mStack); - ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); mActivity.addResultLocked(topActivity, "resultWho", 0, 0, new Intent()); topActivity.finishing = true; @@ -539,7 +538,7 @@ public class ActivityRecordTests extends ActivityTestsBase { @Test public void testPushConfigurationWhenLaunchTaskBehind() throws Exception { - mActivity = new ActivityBuilder(mService) + mActivity = new ActivityBuilder(mAtm) .setTask(mTask) .setLaunchTaskBehind(true) .setConfigChanges(CONFIG_ORIENTATION) @@ -574,7 +573,7 @@ public class ActivityRecordTests extends ActivityTestsBase { final ActivityConfigurationChangeItem expected = ActivityConfigurationChangeItem.obtain(newConfig); - verify(mService.getLifecycleManager()).scheduleTransaction( + verify(mAtm.getLifecycleManager()).scheduleTransaction( eq(mActivity.app.getThread()), eq(mActivity.appToken), eq(expected)); } finally { stack.getDisplayArea().removeChild(stack); @@ -583,7 +582,7 @@ public class ActivityRecordTests extends ActivityTestsBase { @Test public void testShouldStartWhenMakeClientActive() { - ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); topActivity.setOccludesParent(false); mActivity.setState(Task.ActivityState.STOPPED, "Testing"); mActivity.setVisibility(true); @@ -621,7 +620,7 @@ public class ActivityRecordTests extends ActivityTestsBase { public void testCanLaunchHomeActivityFromChooser() { ComponentName chooserComponent = ComponentName.unflattenFromString( Resources.getSystem().getString(R.string.config_chooserActivity)); - ActivityRecord chooserActivity = new ActivityBuilder(mService).setComponent( + ActivityRecord chooserActivity = new ActivityBuilder(mAtm).setComponent( chooserComponent).build(); assertThat(mActivity.canLaunchHomeActivity(NOBODY_UID, chooserActivity)).isTrue(); } @@ -736,7 +735,7 @@ public class ActivityRecordTests extends ActivityTestsBase { // Put a visible activity on top, so the finishing activity doesn't have to wait until the // next activity reports idle to destroy it. - final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); topActivity.mVisibleRequested = true; topActivity.nowVisible = true; topActivity.setState(RESUMED, "test"); @@ -914,7 +913,7 @@ public class ActivityRecordTests extends ActivityTestsBase { public void testFinishActivityIfPossible_nonVisibleNoAppTransition() { // Put an activity on top of test activity to make it invisible and prevent us from // accidentally resuming the topmost one again. - new ActivityBuilder(mService).build(); + new ActivityBuilder(mAtm).build(); mActivity.mVisibleRequested = false; mActivity.setState(STOPPED, "test"); @@ -992,7 +991,7 @@ public class ActivityRecordTests extends ActivityTestsBase { */ @Test public void testCompleteFinishing_waitForNextVisible() { - final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); topActivity.mVisibleRequested = true; topActivity.nowVisible = true; topActivity.finishing = true; @@ -1017,7 +1016,7 @@ public class ActivityRecordTests extends ActivityTestsBase { */ @Test public void testCompleteFinishing_noWaitForNextVisible_alreadyInvisible() { - final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); topActivity.mVisibleRequested = false; topActivity.nowVisible = false; topActivity.finishing = true; @@ -1039,7 +1038,7 @@ public class ActivityRecordTests extends ActivityTestsBase { */ @Test public void testCompleteFinishing_waitForIdle() { - final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); topActivity.mVisibleRequested = true; topActivity.nowVisible = true; topActivity.finishing = true; @@ -1060,7 +1059,7 @@ public class ActivityRecordTests extends ActivityTestsBase { */ @Test public void testCompleteFinishing_noWaitForNextVisible_stopped() { - final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); topActivity.mVisibleRequested = false; topActivity.nowVisible = false; topActivity.finishing = true; @@ -1081,7 +1080,7 @@ public class ActivityRecordTests extends ActivityTestsBase { */ @Test public void testCompleteFinishing_noWaitForNextVisible_nonFocusedStack() { - final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); topActivity.mVisibleRequested = true; topActivity.nowVisible = true; topActivity.finishing = true; @@ -1114,7 +1113,7 @@ public class ActivityRecordTests extends ActivityTestsBase { // Make keyguard locked and set the top activity show-when-locked. KeyguardController keyguardController = mActivity.mStackSupervisor.getKeyguardController(); doReturn(true).when(keyguardController).isKeyguardLocked(); - final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); topActivity.mVisibleRequested = true; topActivity.nowVisible = true; topActivity.setState(RESUMED, "true"); @@ -1143,18 +1142,18 @@ public class ActivityRecordTests extends ActivityTestsBase { */ @Test public void testCompleteFinishing_ensureActivitiesVisible() { - final ActivityRecord firstActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); firstActivity.mVisibleRequested = false; firstActivity.nowVisible = false; firstActivity.setState(STOPPED, "true"); - final ActivityRecord secondActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord secondActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); secondActivity.mVisibleRequested = true; secondActivity.nowVisible = true; secondActivity.setState(PAUSED, "true"); final ActivityRecord translucentActivity = - new ActivityBuilder(mService).setTask(mTask).build(); + new ActivityBuilder(mAtm).setTask(mTask).build(); translucentActivity.mVisibleRequested = true; translucentActivity.nowVisible = true; translucentActivity.setState(RESUMED, "true"); @@ -1396,7 +1395,7 @@ public class ActivityRecordTests extends ActivityTestsBase { final Task firstTaskRecord = mActivity.getTask(); final ActivityRecord secondActivityRecord = - new ActivityBuilder(mService).setTask(firstTaskRecord).setUseProcess(wpc).build(); + new ActivityBuilder(mAtm).setTask(firstTaskRecord).setUseProcess(wpc).build(); assertTrue(wpc.registeredForActivityConfigChanges()); assertEquals(0, secondActivityRecord.getMergedOverrideConfiguration() @@ -1409,7 +1408,7 @@ public class ActivityRecordTests extends ActivityTestsBase { assertTrue(wpc.registeredForActivityConfigChanges()); final ActivityRecord secondActivityRecord = - new ActivityBuilder(mService).setTask(mTask).setUseProcess(wpc).build(); + new ActivityBuilder(mAtm).setTask(mTask).setUseProcess(wpc).build(); assertTrue(wpc.registeredForActivityConfigChanges()); assertEquals(0, secondActivityRecord.getMergedOverrideConfiguration() @@ -1505,7 +1504,7 @@ public class ActivityRecordTests extends ActivityTestsBase { WindowManager.LayoutParams.TYPE_APPLICATION_STARTING); params.width = params.height = WindowManager.LayoutParams.MATCH_PARENT; final WindowTestUtils.TestWindowState w = new WindowTestUtils.TestWindowState( - mService.mWindowManager, mock(Session.class), new TestIWindow(), params, mActivity); + mAtm.mWindowManager, mock(Session.class), new TestIWindow(), params, mActivity); mActivity.addWindow(w); // Assume the activity is launching in different rotation, and there was an available @@ -1526,7 +1525,7 @@ public class ActivityRecordTests extends ActivityTestsBase { any() /* outContentInsets */, any() /* outStableInsets */, any() /* outDisplayCutout */, any() /* outInputChannel */, any() /* outInsetsState */, any() /* outActiveControls */); - TaskSnapshotSurface.create(mService.mWindowManager, mActivity, snapshot); + TaskSnapshotSurface.create(mAtm.mWindowManager, mActivity, snapshot); } catch (RemoteException ignored) { } finally { reset(session); @@ -1602,7 +1601,7 @@ public class ActivityRecordTests extends ActivityTestsBase { final Configuration initialConf = new Configuration(mActivity.getMergedOverrideConfiguration()); final Task initialTask = mActivity.getTask(); - final ActivityRecord secondActivity = new ActivityBuilder(mService).setTask(initialTask) + final ActivityRecord secondActivity = new ActivityBuilder(mAtm).setTask(initialTask) .setUseProcess(wpc).build(); assertTrue(wpc.registeredForActivityConfigChanges()); @@ -1696,12 +1695,12 @@ public class ActivityRecordTests extends ActivityTestsBase { if (defaultDisplay) { display = mRootWindowContainer.getDefaultDisplay(); } else { - display = new TestDisplayContent.Builder(mService, 2000, 1000).setDensityDpi(300) + display = new TestDisplayContent.Builder(mAtm, 2000, 1000).setDensityDpi(300) .setPosition(DisplayContent.POSITION_TOP).build(); } final Task stack = display.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, true /* onTop */); final Task task = new TaskBuilder(mSupervisor).setStack(stack).build(); - return new ActivityBuilder(mService).setTask(task).setUseProcess(process).build(); + return new ActivityBuilder(mAtm).setTask(task).setUseProcess(process).build(); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java index 197c89a2d479..addf1ffe40c2 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackSupervisorTests.java @@ -55,7 +55,7 @@ import org.junit.runner.RunWith; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class ActivityStackSupervisorTests extends ActivityTestsBase { +public class ActivityStackSupervisorTests extends WindowTestsBase { private Task mFullscreenStack; @Before @@ -69,7 +69,7 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase { */ @Test public void testStoppingActivityRemovedWhenResumed() { - final ActivityRecord firstActivity = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(mFullscreenStack).build(); mSupervisor.mStoppingActivities.add(firstActivity); @@ -83,7 +83,7 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase { */ @Test public void testReportWaitingActivityLaunchedIfNeeded() { - final ActivityRecord firstActivity = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(mFullscreenStack).build(); final WaitResult taskToFrontWait = new WaitResult(); @@ -121,7 +121,7 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase { task.setResizeMode(unresizableActivity.info.resizeMode); final TaskChangeNotificationController taskChangeNotifier = - mService.getTaskChangeNotificationController(); + mAtm.getTaskChangeNotificationController(); spyOn(taskChangeNotifier); mSupervisor.handleNonResizableTaskIfNeeded(task, newDisplay.getWindowingMode(), @@ -133,7 +133,7 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase { reset(taskChangeNotifier); // Put a resizable activity on top of the unresizable task. - final ActivityRecord resizableActivity = new ActivityBuilder(mService) + final ActivityRecord resizableActivity = new ActivityBuilder(mAtm) .setTask(task).build(); resizableActivity.info.resizeMode = ActivityInfo.RESIZE_MODE_RESIZEABLE; @@ -150,24 +150,24 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase { */ @Test public void testNotifyTaskFocusChanged() { - final ActivityRecord fullScreenActivityA = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord fullScreenActivityA = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(mFullscreenStack).build(); final Task taskA = fullScreenActivityA.getTask(); final TaskChangeNotificationController taskChangeNotifier = - mService.getTaskChangeNotificationController(); + mAtm.getTaskChangeNotificationController(); spyOn(taskChangeNotifier); - mService.setResumedActivityUncheckLocked(fullScreenActivityA, "resumeA"); + mAtm.setResumedActivityUncheckLocked(fullScreenActivityA, "resumeA"); verify(taskChangeNotifier).notifyTaskFocusChanged(eq(taskA.mTaskId) /* taskId */, eq(true) /* focused */); reset(taskChangeNotifier); - final ActivityRecord fullScreenActivityB = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord fullScreenActivityB = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(mFullscreenStack).build(); final Task taskB = fullScreenActivityB.getTask(); - mService.setResumedActivityUncheckLocked(fullScreenActivityB, "resumeB"); + mAtm.setResumedActivityUncheckLocked(fullScreenActivityB, "resumeB"); verify(taskChangeNotifier).notifyTaskFocusChanged(eq(taskA.mTaskId) /* taskId */, eq(false) /* focused */); verify(taskChangeNotifier).notifyTaskFocusChanged(eq(taskB.mTaskId) /* taskId */, diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java index dfdf686e5502..e2948a724acd 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java @@ -89,7 +89,7 @@ import java.util.function.Consumer; @SmallTest @Presubmit @RunWith(WindowTestRunner.class) -public class ActivityStackTests extends ActivityTestsBase { +public class ActivityStackTests extends WindowTestsBase { private TaskDisplayArea mDefaultTaskDisplayArea; private Task mStack; private Task mTask; @@ -105,7 +105,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testResumedActivity() { - final ActivityRecord r = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord r = new ActivityBuilder(mAtm).setTask(mTask).build(); assertNull(mStack.getResumedActivity()); r.setState(RESUMED, "testResumedActivity"); assertEquals(r, mStack.getResumedActivity()); @@ -115,7 +115,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testResumedActivityFromTaskReparenting() { - final ActivityRecord r = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord r = new ActivityBuilder(mAtm).setTask(mTask).build(); // Ensure moving task between two stacks updates resumed activity r.setState(RESUMED, "testResumedActivityFromTaskReparenting"); assertEquals(r, mStack.getResumedActivity()); @@ -133,7 +133,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testResumedActivityFromActivityReparenting() { - final ActivityRecord r = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord r = new ActivityBuilder(mAtm).setTask(mTask).build(); // Ensure moving task between two stacks updates resumed activity r.setState(RESUMED, "testResumedActivityFromActivityReparenting"); assertEquals(r, mStack.getResumedActivity()); @@ -149,7 +149,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testPrimarySplitScreenMoveToBack() { - TestSplitOrganizer organizer = new TestSplitOrganizer(mService); + TestSplitOrganizer organizer = new TestSplitOrganizer(mAtm); // We're testing an edge case here where we have primary + fullscreen rather than secondary. organizer.setMoveToSecondaryOnEnter(false); @@ -177,7 +177,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testMoveToPrimarySplitScreenThenMoveToBack() { - TestSplitOrganizer organizer = new TestSplitOrganizer(mService); + TestSplitOrganizer organizer = new TestSplitOrganizer(mAtm); // This time, start with a fullscreen activitystack final Task primarySplitScreen = mDefaultTaskDisplayArea.createStack( WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, true /* onTop */); @@ -202,7 +202,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testSplitScreenMoveToBack() { - TestSplitOrganizer organizer = new TestSplitOrganizer(mService); + TestSplitOrganizer organizer = new TestSplitOrganizer(mAtm); // Set up split-screen with primary on top and secondary containing the home task below // another stack. final Task primaryTask = mDefaultTaskDisplayArea.createStack( @@ -241,12 +241,12 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testRemoveOrganizedTask_UpdateStackReference() { final Task rootHomeTask = mDefaultTaskDisplayArea.getRootHomeTask(); - final ActivityRecord homeActivity = new ActivityBuilder(mService) + final ActivityRecord homeActivity = new ActivityBuilder(mAtm) .setStack(rootHomeTask) .setCreateTask(true) .build(); final Task secondaryStack = (Task) WindowContainer.fromBinder( - mService.mTaskOrganizerController.createRootTask(rootHomeTask.getDisplayId(), + mAtm.mTaskOrganizerController.createRootTask(rootHomeTask.getDisplayId(), WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token.asBinder()); rootHomeTask.reparent(secondaryStack, POSITION_TOP); @@ -292,7 +292,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testStopActivityWhenActivityDestroyed() { - final ActivityRecord r = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord r = new ActivityBuilder(mAtm).setTask(mTask).build(); r.info.flags |= ActivityInfo.FLAG_NO_HISTORY; mStack.moveToFront("testStopActivityWithDestroy"); r.stopIfPossible(); @@ -302,14 +302,14 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testFindTaskWithOverlay() { - final ActivityRecord r = new ActivityBuilder(mService) + final ActivityRecord r = new ActivityBuilder(mAtm) .setCreateTask(true) .setStack(mStack) .setUid(0) .build(); final Task task = r.getTask(); // Overlay must be for a different user to prevent recognizing a matching top activity - final ActivityRecord taskOverlay = new ActivityBuilder(mService).setTask(task) + final ActivityRecord taskOverlay = new ActivityBuilder(mAtm).setTask(task) .setUid(UserHandle.PER_USER_RANGE * 2).build(); taskOverlay.setTaskOverlay(true); @@ -330,21 +330,21 @@ public class ActivityStackTests extends ActivityTestsBase { targetActivity); final ComponentName alias = new ComponentName(DEFAULT_COMPONENT_PACKAGE_NAME, aliasActivity); - final Task task = new TaskBuilder(mService.mStackSupervisor).setStack(mStack).build(); + final Task task = new TaskBuilder(mAtm.mStackSupervisor).setStack(mStack).build(); task.origActivity = alias; task.realActivity = target; - new ActivityBuilder(mService).setComponent(target).setTask(task).setTargetActivity( + new ActivityBuilder(mAtm).setComponent(target).setTask(task).setTargetActivity( targetActivity).build(); // Using target activity to find task. - final ActivityRecord r1 = new ActivityBuilder(mService).setComponent( + final ActivityRecord r1 = new ActivityBuilder(mAtm).setComponent( target).setTargetActivity(targetActivity).build(); RootWindowContainer.FindTaskResult result = new RootWindowContainer.FindTaskResult(); result.process(r1, mStack); assertThat(result.mRecord).isNotNull(); // Using alias activity to find task. - final ActivityRecord r2 = new ActivityBuilder(mService).setComponent( + final ActivityRecord r2 = new ActivityBuilder(mAtm).setComponent( alias).setTargetActivity(targetActivity).build(); result = new RootWindowContainer.FindTaskResult(); result.process(r2, mStack); @@ -377,7 +377,7 @@ public class ActivityStackTests extends ActivityTestsBase { final Task pinnedStack = createStackForShouldBeVisibleTest(mDefaultTaskDisplayArea, WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD, true /* onTop */); // Add an activity to the pinned stack so it isn't considered empty for visibility check. - final ActivityRecord pinnedActivity = new ActivityBuilder(mService) + final ActivityRecord pinnedActivity = new ActivityBuilder(mAtm) .setCreateTask(true) .setStack(pinnedStack) .build(); @@ -676,7 +676,7 @@ public class ActivityStackTests extends ActivityTestsBase { assertEquals(STACK_VISIBILITY_VISIBLE, translucentStack.getVisibility(null /* starting */)); // Add an activity to the pinned stack so it isn't considered empty for visibility check. - final ActivityRecord pinnedActivity = new ActivityBuilder(mService) + final ActivityRecord pinnedActivity = new ActivityBuilder(mAtm) .setCreateTask(true) .setStack(pinnedStack) .build(); @@ -689,7 +689,7 @@ public class ActivityStackTests extends ActivityTestsBase { WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, true /* onTop */); ActivityRecord topRunningHomeActivity = homeStack.topRunningActivity(); if (topRunningHomeActivity == null) { - topRunningHomeActivity = new ActivityBuilder(mService) + topRunningHomeActivity = new ActivityBuilder(mAtm) .setStack(homeStack) .setCreateTask(true) .build(); @@ -721,12 +721,12 @@ public class ActivityStackTests extends ActivityTestsBase { final Task homeStack = createStackForShouldBeVisibleTest(mDefaultTaskDisplayArea, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, true /* onTop */); - final ActivityRecord firstActivity = new ActivityBuilder(mService) + final ActivityRecord firstActivity = new ActivityBuilder(mAtm) .setStack(homeStack) .setCreateTask(true) .build(); final Task task = firstActivity.getTask(); - final ActivityRecord secondActivity = new ActivityBuilder(mService) + final ActivityRecord secondActivity = new ActivityBuilder(mAtm) .setTask(task) .build(); @@ -991,7 +991,6 @@ public class ActivityStackTests extends ActivityTestsBase { TaskDisplayArea taskDisplayArea, int windowingMode, int activityType, boolean onTop) { final Task task; if (activityType == ACTIVITY_TYPE_HOME) { - // Home stack and activity are created in ActivityTestsBase#setupActivityManagerService task = mDefaultTaskDisplayArea.getStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME); mDefaultTaskDisplayArea.positionChildAt(onTop ? POSITION_TOP : POSITION_BOTTOM, task, false /* includingParents */); @@ -1009,8 +1008,8 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testFinishDisabledPackageActivities_FinishAliveActivities() { - final ActivityRecord firstActivity = new ActivityBuilder(mService).setTask(mTask).build(); - final ActivityRecord secondActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); + final ActivityRecord secondActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); firstActivity.setState(STOPPED, "testFinishDisabledPackageActivities"); secondActivity.setState(RESUMED, "testFinishDisabledPackageActivities"); mStack.mResumedActivity = secondActivity; @@ -1029,10 +1028,10 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testFinishDisabledPackageActivities_RemoveNonAliveActivities() { - final ActivityRecord activity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(mTask).build(); // The overlay activity is not in the disabled package but it is in the same task. - final ActivityRecord overlayActivity = new ActivityBuilder(mService).setTask(mTask) + final ActivityRecord overlayActivity = new ActivityBuilder(mAtm).setTask(mTask) .setComponent(new ComponentName("package.overlay", ".OverlayActivity")).build(); // If the task only remains overlay activity, the task should also be removed. // See {@link ActivityStack#removeFromHistory}. @@ -1058,8 +1057,8 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testHandleAppDied() { - final ActivityRecord firstActivity = new ActivityBuilder(mService).setTask(mTask).build(); - final ActivityRecord secondActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); + final ActivityRecord secondActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); // Making the first activity a task overlay means it will be removed from the task's // activities as well once second activity is removed as handleAppDied processes the @@ -1080,7 +1079,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testHandleAppDied_RelaunchesAfterCrashDuringWindowingModeResize() { - final ActivityRecord activity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(mTask).build(); activity.mRelaunchReason = RELAUNCH_REASON_WINDOWING_MODE_RESIZE; activity.launchCount = 1; @@ -1094,7 +1093,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testHandleAppDied_NotRelaunchAfterThreeCrashesDuringWindowingModeResize() { - final ActivityRecord activity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(mTask).build(); activity.mRelaunchReason = RELAUNCH_REASON_WINDOWING_MODE_RESIZE; activity.launchCount = 3; @@ -1108,7 +1107,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testHandleAppDied_RelaunchesAfterCrashDuringFreeResize() { - final ActivityRecord activity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(mTask).build(); activity.mRelaunchReason = RELAUNCH_REASON_FREE_RESIZE; activity.launchCount = 1; @@ -1122,7 +1121,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testHandleAppDied_NotRelaunchAfterThreeCrashesDuringFreeResize() { - final ActivityRecord activity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(mTask).build(); activity.mRelaunchReason = RELAUNCH_REASON_FREE_RESIZE; activity.launchCount = 3; @@ -1136,11 +1135,11 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testCompletePauseOnResumeWhilePausingActivity() { - final ActivityRecord bottomActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord bottomActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); doReturn(true).when(bottomActivity).attachedToProcess(); mStack.mPausingActivity = null; mStack.mResumedActivity = bottomActivity; - final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); topActivity.info.flags |= FLAG_RESUME_WHILE_PAUSING; mStack.startPausingLocked(false /* userLeaving */, false /* uiSleeping */, topActivity); @@ -1154,7 +1153,7 @@ public class ActivityStackTests extends ActivityTestsBase { ActivityRecord activity = homeStack.topRunningActivity(); if (activity == null) { - activity = new ActivityBuilder(mService) + activity = new ActivityBuilder(mAtm) .setStack(homeStack) .setCreateTask(true) .build(); @@ -1265,13 +1264,13 @@ public class ActivityStackTests extends ActivityTestsBase { public void testNavigateUpTo() { final ActivityStartController controller = mock(ActivityStartController.class); final ActivityStarter starter = new ActivityStarter(controller, - mService, mService.mStackSupervisor, mock(ActivityStartInterceptor.class)); - doReturn(controller).when(mService).getActivityStartController(); + mAtm, mAtm.mStackSupervisor, mock(ActivityStartInterceptor.class)); + doReturn(controller).when(mAtm).getActivityStartController(); spyOn(starter); doReturn(ActivityManager.START_SUCCESS).when(starter).execute(); - final ActivityRecord firstActivity = new ActivityBuilder(mService).setTask(mTask).build(); - final ActivityRecord secondActivity = new ActivityBuilder(mService).setTask(mTask) + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setTask(mTask).build(); + final ActivityRecord secondActivity = new ActivityBuilder(mAtm).setTask(mTask) .setUid(firstActivity.getUid() + 1).build(); doReturn(starter).when(controller).obtainStarter(eq(firstActivity.intent), anyString()); @@ -1297,7 +1296,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testShouldUpRecreateTaskLockedWithCorrectAffinityFormat() { final String affinity = "affinity"; - final ActivityRecord activity = new ActivityBuilder(mService).setAffinity(affinity) + final ActivityRecord activity = new ActivityBuilder(mAtm).setAffinity(affinity) .setUid(Binder.getCallingUid()).setCreateTask(true).build(); activity.getTask().affinity = activity.taskAffinity; @@ -1307,7 +1306,7 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testShouldUpRecreateTaskLockedWithWrongAffinityFormat() { final String affinity = "affinity"; - final ActivityRecord activity = new ActivityBuilder(mService).setAffinity(affinity) + final ActivityRecord activity = new ActivityBuilder(mAtm).setAffinity(affinity) .setUid(Binder.getCallingUid()).setCreateTask(true).build(); activity.getTask().affinity = activity.taskAffinity; final String fakeAffinity = activity.getUid() + activity.taskAffinity; @@ -1318,12 +1317,12 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testResetTaskWithFinishingActivities() { final ActivityRecord taskTop = - new ActivityBuilder(mService).setStack(mStack).setCreateTask(true).build(); + new ActivityBuilder(mAtm).setStack(mStack).setCreateTask(true).build(); // Make all activities in the task are finishing to simulate Task#getTopActivity // returns null. taskTop.finishing = true; - final ActivityRecord newR = new ActivityBuilder(mService).build(); + final ActivityRecord newR = new ActivityBuilder(mAtm).build(); final ActivityRecord result = mStack.resetTaskIfNeeded(taskTop, newR); assertThat(result).isEqualTo(taskTop); } @@ -1333,9 +1332,9 @@ public class ActivityStackTests extends ActivityTestsBase { final ArrayList<ActivityRecord> occludedActivities = new ArrayList<>(); final Consumer<ActivityRecord> handleOccludedActivity = occludedActivities::add; final ActivityRecord bottomActivity = - new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build(); + new ActivityBuilder(mAtm).setStack(mStack).setTask(mTask).build(); final ActivityRecord topActivity = - new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build(); + new ActivityBuilder(mAtm).setStack(mStack).setTask(mTask).build(); // Top activity occludes bottom activity. doReturn(true).when(mStack).shouldBeVisible(any()); assertTrue(topActivity.shouldBeVisible()); @@ -1354,7 +1353,7 @@ public class ActivityStackTests extends ActivityTestsBase { // A finishing activity should not occlude other activities behind. final ActivityRecord finishingActivity = - new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build(); + new ActivityBuilder(mAtm).setStack(mStack).setTask(mTask).build(); finishingActivity.finishing = true; doCallRealMethod().when(finishingActivity).occludesParent(); assertTrue(topActivity.shouldBeVisible()); @@ -1376,9 +1375,9 @@ public class ActivityStackTests extends ActivityTestsBase { final ActivityRecord[] activities = new ActivityRecord[2]; mSupervisor.beginDeferResume(); for (int i = 0; i < activities.length; i++) { - final ActivityRecord r = new ActivityBuilder(mService).setTask(mTask).build(); + final ActivityRecord r = new ActivityBuilder(mAtm).setTask(mTask).build(); activities[i] = r; - doReturn(null).when(mService).getProcessController( + doReturn(null).when(mAtm).getProcessController( eq(r.processName), eq(r.info.applicationInfo.uid)); r.setState(Task.ActivityState.INITIALIZING, "test"); // Ensure precondition that the activity is opaque. @@ -1388,7 +1387,7 @@ public class ActivityStackTests extends ActivityTestsBase { } mSupervisor.endDeferResume(); - setBooted(mService); + setBooted(mAtm); // 2 activities are started while keyguard is locked, so they are waiting to be resolved. assertFalse(unknownAppVisibilityController.allResolved()); @@ -1405,8 +1404,8 @@ public class ActivityStackTests extends ActivityTestsBase { @Test public void testNonTopVisibleActivityNotResume() { final ActivityRecord nonTopVisibleActivity = - new ActivityBuilder(mService).setTask(mTask).build(); - new ActivityBuilder(mService).setTask(mTask).build(); + new ActivityBuilder(mAtm).setTask(mTask).build(); + new ActivityBuilder(mAtm).setTask(mTask).build(); doReturn(false).when(nonTopVisibleActivity).attachedToProcess(); doReturn(true).when(nonTopVisibleActivity).shouldBeVisible(anyBoolean(), anyBoolean()); doNothing().when(mSupervisor).startSpecificActivity(any(), anyBoolean(), diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStartControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStartControllerTests.java index c9a927901a37..55afc70f5213 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStartControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStartControllerTests.java @@ -51,7 +51,7 @@ import java.util.Random; @SmallTest @Presubmit @RunWith(WindowTestRunner.class) -public class ActivityStartControllerTests extends ActivityTestsBase { +public class ActivityStartControllerTests extends WindowTestsBase { private ActivityStartController mController; private Factory mFactory; private ActivityStarter mStarter; @@ -59,9 +59,9 @@ public class ActivityStartControllerTests extends ActivityTestsBase { @Before public void setUp() throws Exception { mFactory = mock(Factory.class); - mController = new ActivityStartController(mService, mService.mStackSupervisor, mFactory); - mStarter = spy(new ActivityStarter(mController, mService, - mService.mStackSupervisor, mock(ActivityStartInterceptor.class))); + mController = new ActivityStartController(mAtm, mAtm.mStackSupervisor, mFactory); + mStarter = spy(new ActivityStarter(mController, mAtm, + mAtm.mStackSupervisor, mock(ActivityStartInterceptor.class))); doReturn(mStarter).when(mFactory).obtain(); } @@ -72,15 +72,15 @@ public class ActivityStartControllerTests extends ActivityTestsBase { public void testPendingActivityLaunches() { final Random random = new Random(); - final ActivityRecord activity = new ActivityBuilder(mService).build(); - final ActivityRecord source = new ActivityBuilder(mService) + final ActivityRecord activity = new ActivityBuilder(mAtm).build(); + final ActivityRecord source = new ActivityBuilder(mAtm) .setCreateTask(true) .build(); final int startFlags = random.nextInt(); - final Task stack = mService.mRootWindowContainer.getDefaultTaskDisplayArea() + final Task stack = mAtm.mRootWindowContainer.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); - final WindowProcessController wpc = new WindowProcessController(mService, - mService.mContext.getApplicationInfo(), "name", 12345, + final WindowProcessController wpc = new WindowProcessController(mAtm, + mAtm.mContext.getApplicationInfo(), "name", 12345, UserHandle.getUserId(12345), mock(Object.class), mock(WindowProcessListener.class)); wpc.setThread(mock(IApplicationThread.class)); @@ -101,8 +101,8 @@ public class ActivityStartControllerTests extends ActivityTestsBase { @Test public void testRecycling() { final Intent intent = new Intent(); - final ActivityStarter optionStarter = new ActivityStarter(mController, mService, - mService.mStackSupervisor, mock(ActivityStartInterceptor.class)); + final ActivityStarter optionStarter = new ActivityStarter(mController, mAtm, + mAtm.mStackSupervisor, mock(ActivityStartInterceptor.class)); optionStarter .setIntent(intent) .setReason("Test") diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java index d07000f30046..e5c9ecc7676d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java @@ -100,7 +100,7 @@ import org.junit.runner.RunWith; @SmallTest @Presubmit @RunWith(WindowTestRunner.class) -public class ActivityStarterTests extends ActivityTestsBase { +public class ActivityStarterTests extends WindowTestsBase { private ActivityStartController mController; private ActivityMetricsLogger mActivityMetricsLogger; private PackageManagerInternal mMockPackageManager; @@ -187,7 +187,7 @@ public class ActivityStarterTests extends ActivityTestsBase { */ private void verifyStartActivityPreconditionsUntracked(int preconditions, int launchFlags, int expectedResult) { - final ActivityTaskManagerService service = mService; + final ActivityTaskManagerService service = mAtm; final IPackageManager packageManager = mock(IPackageManager.class); final ActivityStartController controller = mock(ActivityStartController.class); @@ -283,8 +283,8 @@ public class ActivityStarterTests extends ActivityTestsBase { // Ensure that {@link ActivityOptions} are aborted with unsuccessful result. if (expectedResult != START_SUCCESS) { - final ActivityStarter optionStarter = new ActivityStarter(mController, mService, - mService.mStackSupervisor, mock(ActivityStartInterceptor.class)); + final ActivityStarter optionStarter = new ActivityStarter(mController, mAtm, + mAtm.mStackSupervisor, mock(ActivityStartInterceptor.class)); final ActivityOptions options = spy(ActivityOptions.makeBasic()); final int optionResult = optionStarter.setCaller(caller) @@ -338,7 +338,7 @@ public class ActivityStarterTests extends ActivityTestsBase { invocation -> { throw new RuntimeException("Not stubbed"); }); - doReturn(mMockPackageManager).when(mService).getPackageManagerInternalLocked(); + doReturn(mMockPackageManager).when(mAtm).getPackageManagerInternalLocked(); doReturn(false).when(mMockPackageManager).isInstantAppInstallerComponent(any()); doReturn(null).when(mMockPackageManager).resolveIntent(any(), any(), anyInt(), anyInt(), anyInt(), anyBoolean(), anyInt()); @@ -359,8 +359,8 @@ public class ActivityStarterTests extends ActivityTestsBase { info.applicationInfo = new ApplicationInfo(); info.applicationInfo.packageName = ActivityBuilder.getDefaultComponent().getPackageName(); - return new ActivityStarter(mController, mService, - mService.mStackSupervisor, mock(ActivityStartInterceptor.class)) + return new ActivityStarter(mController, mAtm, + mAtm.mStackSupervisor, mock(ActivityStartInterceptor.class)) .setIntent(intent) .setActivityInfo(info); } @@ -373,7 +373,7 @@ public class ActivityStarterTests extends ActivityTestsBase { public void testCreateTaskLayout() { // modifier for validating passed values. final LaunchParamsModifier modifier = mock(LaunchParamsModifier.class); - mService.mStackSupervisor.getLaunchParamsController().registerModifier(modifier); + mAtm.mStackSupervisor.getLaunchParamsController().registerModifier(modifier); // add custom values to activity info to make unique. final ActivityInfo info = new ActivityInfo(); @@ -414,9 +414,9 @@ public class ActivityStarterTests extends ActivityTestsBase { final ActivityStarter starter = prepareStarter( FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | FLAG_ACTIVITY_SINGLE_TOP, false); final ActivityRecord splitPrimaryFocusActivity = - new ActivityBuilder(mService).setCreateTask(true).build(); + new ActivityBuilder(mAtm).setCreateTask(true).build(); final ActivityRecord splitSecondReusableActivity = - new ActivityBuilder(mService).setCreateTask(true).build(); + new ActivityBuilder(mAtm).setCreateTask(true).build(); splitPrimaryFocusActivity.getRootTask() .setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); splitSecondReusableActivity.getRootTask() @@ -443,11 +443,11 @@ public class ActivityStarterTests extends ActivityTestsBase { final ActivityStarter starter = prepareStarter( FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | FLAG_ACTIVITY_SINGLE_TOP, false); final ActivityRecord splitSecondReusableActivity = - new ActivityBuilder(mService).setCreateTask(true).build(); + new ActivityBuilder(mAtm).setCreateTask(true).build(); final ActivityRecord splitSecondTopActivity = - new ActivityBuilder(mService).setCreateTask(true).build(); + new ActivityBuilder(mAtm).setCreateTask(true).build(); final ActivityRecord splitPrimaryFocusActivity = - new ActivityBuilder(mService).setCreateTask(true).build(); + new ActivityBuilder(mAtm).setCreateTask(true).build(); splitPrimaryFocusActivity.getRootTask() .setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); splitSecondReusableActivity.getRootTask() @@ -475,13 +475,13 @@ public class ActivityStarterTests extends ActivityTestsBase { */ @Test public void testTaskModeViolation() { - final DisplayContent display = mService.mRootWindowContainer.getDefaultDisplay(); + final DisplayContent display = mAtm.mRootWindowContainer.getDefaultDisplay(); display.removeAllTasks(); assertNoTasks(display); final ActivityStarter starter = prepareStarter(0); - final LockTaskController lockTaskController = mService.getLockTaskController(); + final LockTaskController lockTaskController = mAtm.getLockTaskController(); doReturn(true).when(lockTaskController).isLockTaskModeViolation(any()); final int result = starter.setReason("testTaskModeViolation").execute(); @@ -504,8 +504,8 @@ public class ActivityStarterTests extends ActivityTestsBase { */ @Test public void testActivityStartsLogging_noLoggingWhenDisabled() { - doReturn(false).when(mService).isActivityStartsLoggingEnabled(); - doReturn(mActivityMetricsLogger).when(mService.mStackSupervisor).getActivityMetricsLogger(); + doReturn(false).when(mAtm).isActivityStartsLoggingEnabled(); + doReturn(mActivityMetricsLogger).when(mAtm.mStackSupervisor).getActivityMetricsLogger(); ActivityStarter starter = prepareStarter(FLAG_ACTIVITY_NEW_TASK); starter.setReason("testActivityStartsLogging_noLoggingWhenDisabled").execute(); @@ -521,8 +521,8 @@ public class ActivityStarterTests extends ActivityTestsBase { @Test public void testActivityStartsLogging_logsWhenEnabled() { // note: conveniently this package doesn't have any activity visible - doReturn(true).when(mService).isActivityStartsLoggingEnabled(); - doReturn(mActivityMetricsLogger).when(mService.mStackSupervisor).getActivityMetricsLogger(); + doReturn(true).when(mAtm).isActivityStartsLoggingEnabled(); + doReturn(mActivityMetricsLogger).when(mAtm.mStackSupervisor).getActivityMetricsLogger(); ActivityStarter starter = prepareStarter(FLAG_ACTIVITY_NEW_TASK) .setCallingUid(FAKE_CALLING_UID) @@ -544,7 +544,7 @@ public class ActivityStarterTests extends ActivityTestsBase { */ @Test public void testBackgroundActivityStartsAllowed_noStartsAborted() { - doReturn(true).when(mService).isBackgroundActivityStartsEnabled(); + doReturn(true).when(mAtm).isBackgroundActivityStartsEnabled(); runAndVerifyBackgroundActivityStartsSubtest("allowed_noStartsAborted", false, UNIMPORTANT_UID, false, PROCESS_STATE_TOP + 1, @@ -558,7 +558,7 @@ public class ActivityStarterTests extends ActivityTestsBase { */ @Test public void testBackgroundActivityStartsDisallowed_unsupportedStartsAborted() { - doReturn(false).when(mService).isBackgroundActivityStartsEnabled(); + doReturn(false).when(mAtm).isBackgroundActivityStartsEnabled(); runAndVerifyBackgroundActivityStartsSubtest( "disallowed_unsupportedUsecase_aborted", true, @@ -589,7 +589,7 @@ public class ActivityStarterTests extends ActivityTestsBase { */ @Test public void testBackgroundActivityStartsDisallowed_supportedStartsNotAborted() { - doReturn(false).when(mService).isBackgroundActivityStartsEnabled(); + doReturn(false).when(mAtm).isBackgroundActivityStartsEnabled(); runAndVerifyBackgroundActivityStartsSubtest("disallowed_rootUid_notAborted", false, Process.ROOT_UID, false, PROCESS_STATE_TOP + 1, @@ -644,13 +644,13 @@ public class ActivityStarterTests extends ActivityTestsBase { boolean callerIsInstrumentingWithBackgroundActivityStartPrivileges, boolean isCallingUidDeviceOwner) { // window visibility - doReturn(callingUidHasVisibleWindow).when(mService.mWindowManager.mRoot) + doReturn(callingUidHasVisibleWindow).when(mAtm.mWindowManager.mRoot) .isAnyNonToastWindowVisibleForUid(callingUid); - doReturn(realCallingUidHasVisibleWindow).when(mService.mWindowManager.mRoot) + doReturn(realCallingUidHasVisibleWindow).when(mAtm.mWindowManager.mRoot) .isAnyNonToastWindowVisibleForUid(realCallingUid); // process importance - doReturn(callingUidProcState).when(mService).getUidState(callingUid); - doReturn(realCallingUidProcState).when(mService).getUidState(realCallingUid); + doReturn(callingUidProcState).when(mAtm).getUidState(callingUid); + doReturn(realCallingUidProcState).when(mAtm).getUidState(realCallingUid); // foreground activities final IApplicationThread caller = mock(IApplicationThread.class); final WindowProcessListener listener = mock(WindowProcessListener.class); @@ -658,12 +658,12 @@ public class ActivityStarterTests extends ActivityTestsBase { ai.uid = callingUid; ai.packageName = "com.android.test.package"; final WindowProcessController callerApp = - new WindowProcessController(mService, ai, null, callingUid, -1, null, listener); + new WindowProcessController(mAtm, ai, null, callingUid, -1, null, listener); callerApp.setHasForegroundActivities(hasForegroundActivities); - doReturn(callerApp).when(mService).getProcessController(caller); + doReturn(callerApp).when(mAtm).getProcessController(caller); // caller is recents RecentTasks recentTasks = mock(RecentTasks.class); - mService.mStackSupervisor.setRecentTasks(recentTasks); + mAtm.mStackSupervisor.setRecentTasks(recentTasks); doReturn(callerIsRecents).when(recentTasks).isCallerRecents(callingUid); // caller is temp allowed if (callerIsTempAllowed) { @@ -673,7 +673,7 @@ public class ActivityStarterTests extends ActivityTestsBase { callerApp.setInstrumenting(callerIsInstrumentingWithBackgroundActivityStartPrivileges, callerIsInstrumentingWithBackgroundActivityStartPrivileges); // callingUid is the device owner - doReturn(isCallingUidDeviceOwner).when(mService).isDeviceOwner(callingUid); + doReturn(isCallingUidDeviceOwner).when(mAtm).isDeviceOwner(callingUid); final ActivityOptions options = spy(ActivityOptions.makeBasic()); ActivityRecord[] outActivity = new ActivityRecord[1]; @@ -706,14 +706,14 @@ public class ActivityStarterTests extends ActivityTestsBase { @Test public void testBringTaskToFrontWhenFocusedStackIsFinising() { // Put 2 tasks in the same stack (simulate the behavior of home stack). - final ActivityRecord activity = new ActivityBuilder(mService) + final ActivityRecord activity = new ActivityBuilder(mAtm) .setCreateTask(true).build(); - new ActivityBuilder(mService) + new ActivityBuilder(mAtm) .setStack(activity.getRootTask()) .setCreateTask(true).build(); // Create a top finishing activity. - final ActivityRecord finishingTopActivity = new ActivityBuilder(mService) + final ActivityRecord finishingTopActivity = new ActivityBuilder(mAtm) .setCreateTask(true).build(); finishingTopActivity.getRootTask().moveToFront("finishingTopActivity"); @@ -741,7 +741,7 @@ public class ActivityStarterTests extends ActivityTestsBase { // Create a secondary display at bottom. final TestDisplayContent secondaryDisplay = - new TestDisplayContent.Builder(mService, 1000, 1500) + new TestDisplayContent.Builder(mAtm, 1000, 1500) .setPosition(POSITION_BOTTOM).build(); final TaskDisplayArea secondaryTaskContainer = secondaryDisplay.getDefaultTaskDisplayArea(); final Task stack = secondaryTaskContainer.createStack( @@ -751,7 +751,7 @@ public class ActivityStarterTests extends ActivityTestsBase { final ActivityRecord topActivityOnSecondaryDisplay = createSingleTaskActivityOn(stack); // Put an activity on default display as the top focused activity. - new ActivityBuilder(mService).setCreateTask(true).build(); + new ActivityBuilder(mAtm).setCreateTask(true).build(); // Start activity with the same intent as {@code topActivityOnSecondaryDisplay} // on secondary display. @@ -781,7 +781,7 @@ public class ActivityStarterTests extends ActivityTestsBase { // Create a secondary display with an activity. final TestDisplayContent secondaryDisplay = - new TestDisplayContent.Builder(mService, 1000, 1500).build(); + new TestDisplayContent.Builder(mAtm, 1000, 1500).build(); mRootWindowContainer.positionChildAt(POSITION_TOP, secondaryDisplay, false /* includingParents */); final TaskDisplayArea secondaryTaskContainer = secondaryDisplay.getDefaultTaskDisplayArea(); @@ -793,7 +793,7 @@ public class ActivityStarterTests extends ActivityTestsBase { final Task topStack = secondaryTaskContainer.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); final Task topTask = new TaskBuilder(mSupervisor).setStack(topStack).build(); - new ActivityBuilder(mService).setTask(topTask).build(); + new ActivityBuilder(mAtm).setTask(topTask).build(); // Start activity with the same intent as {@code singleTaskActivity} on secondary display. final ActivityOptions options = ActivityOptions.makeBasic() @@ -815,16 +815,16 @@ public class ActivityStarterTests extends ActivityTestsBase { final ActivityStarter starter = prepareStarter( FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | FLAG_ACTIVITY_SINGLE_TOP, false); final ActivityRecord reusableActivity = - new ActivityBuilder(mService).setCreateTask(true).build(); + new ActivityBuilder(mAtm).setCreateTask(true).build(); final ActivityRecord topActivity = - new ActivityBuilder(mService).setCreateTask(true).build(); + new ActivityBuilder(mAtm).setCreateTask(true).build(); // Make sure topActivity is on top topActivity.getRootTask().moveToFront("testWasVisibleInRestartAttempt"); reusableActivity.setVisible(false); final TaskChangeNotificationController taskChangeNotifier = - mService.getTaskChangeNotificationController(); + mAtm.getTaskChangeNotificationController(); spyOn(taskChangeNotifier); Task task = topActivity.getTask(); @@ -853,7 +853,7 @@ public class ActivityStarterTests extends ActivityTestsBase { .setComponent(componentName) .setStack(stack) .build(); - return new ActivityBuilder(mService) + return new ActivityBuilder(mAtm) .setComponent(componentName) .setLaunchMode(LAUNCH_SINGLE_TASK) .setTask(task) @@ -876,7 +876,7 @@ public class ActivityStarterTests extends ActivityTestsBase { true /* onTop */); // Put an activity on default display as the top focused activity. - final ActivityRecord topActivity = new ActivityBuilder(mService) + final ActivityRecord topActivity = new ActivityBuilder(mAtm) .setCreateTask(true) .setLaunchMode(LAUNCH_SINGLE_TASK) .build(); @@ -900,7 +900,7 @@ public class ActivityStarterTests extends ActivityTestsBase { @Test public void testFreezeTaskListActivityOption() { RecentTasks recentTasks = mock(RecentTasks.class); - mService.mStackSupervisor.setRecentTasks(recentTasks); + mAtm.mStackSupervisor.setRecentTasks(recentTasks); doReturn(true).when(recentTasks).isCallerRecents(anyInt()); final ActivityStarter starter = prepareStarter(0 /* flags */); @@ -922,7 +922,7 @@ public class ActivityStarterTests extends ActivityTestsBase { @Test public void testFreezeTaskListActivityOptionFailedStart_expectResetFreezeTaskList() { RecentTasks recentTasks = mock(RecentTasks.class); - mService.mStackSupervisor.setRecentTasks(recentTasks); + mAtm.mStackSupervisor.setRecentTasks(recentTasks); doReturn(true).when(recentTasks).isCallerRecents(anyInt()); final ActivityStarter starter = prepareStarter(0 /* flags */); @@ -959,7 +959,7 @@ public class ActivityStarterTests extends ActivityTestsBase { intent.setComponent(ActivityBuilder.getDefaultComponent()); doReturn(true).when(mMockPackageManager).isInstantAppInstallerComponent(any()); - starter.setIntent(intent).mRequest.resolveActivity(mService.mStackSupervisor); + starter.setIntent(intent).mRequest.resolveActivity(mAtm.mStackSupervisor); // Make sure the client intent won't be modified. assertThat(intent.getComponent()).isNotNull(); @@ -985,9 +985,9 @@ public class ActivityStarterTests extends ActivityTestsBase { @Test public void testRecycleTaskFromAnotherUser() { final ActivityStarter starter = prepareStarter(0 /* flags */); - starter.mStartActivity = new ActivityBuilder(mService).build(); - final Task task = new TaskBuilder(mService.mStackSupervisor) - .setStack(mService.mRootWindowContainer.getDefaultTaskDisplayArea().createStack( + starter.mStartActivity = new ActivityBuilder(mAtm).build(); + final Task task = new TaskBuilder(mAtm.mStackSupervisor) + .setStack(mAtm.mRootWindowContainer.getDefaultTaskDisplayArea().createStack( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */)) .setUserId(10) .build(); @@ -1001,7 +1001,7 @@ public class ActivityStarterTests extends ActivityTestsBase { public void testTargetStackInSplitScreen() { final ActivityStarter starter = prepareStarter(FLAG_ACTIVITY_LAUNCH_ADJACENT, false /* mockGetLaunchStack */); - final ActivityRecord top = new ActivityBuilder(mService).setCreateTask(true).build(); + final ActivityRecord top = new ActivityBuilder(mAtm).setCreateTask(true).build(); final ActivityOptions options = ActivityOptions.makeBasic(); final ActivityRecord[] outActivity = new ActivityRecord[1]; @@ -1012,7 +1012,7 @@ public class ActivityStarterTests extends ActivityTestsBase { assertThat(outActivity[0].inSplitScreenWindowingMode()).isFalse(); // Move activity to split-screen-primary stack and make sure it has the focus. - TestSplitOrganizer splitOrg = new TestSplitOrganizer(mService, top.getDisplayId()); + TestSplitOrganizer splitOrg = new TestSplitOrganizer(mAtm, top.getDisplayId()); top.getRootTask().reparent(splitOrg.mPrimary, POSITION_BOTTOM); top.getRootTask().moveToFront("testWindowingModeOptionsLaunchAdjacent"); @@ -1026,7 +1026,7 @@ public class ActivityStarterTests extends ActivityTestsBase { @Test public void testActivityStart_expectAddedToRecentTask() { RecentTasks recentTasks = mock(RecentTasks.class); - mService.mStackSupervisor.setRecentTasks(recentTasks); + mAtm.mStackSupervisor.setRecentTasks(recentTasks); doReturn(true).when(recentTasks).isCallerRecents(anyInt()); final ActivityStarter starter = prepareStarter(0 /* flags */); @@ -1044,10 +1044,10 @@ public class ActivityStarterTests extends ActivityTestsBase { starter.setReason("testAllSplitScreenPrimaryActivitiesAreResumed"); - final ActivityRecord targetRecord = new ActivityBuilder(mService).build(); + final ActivityRecord targetRecord = new ActivityBuilder(mAtm).build(); targetRecord.setFocusable(false); targetRecord.setVisibility(false); - final ActivityRecord sourceRecord = new ActivityBuilder(mService).build(); + final ActivityRecord sourceRecord = new ActivityBuilder(mAtm).build(); final Task stack = spy( mRootWindowContainer.getDefaultTaskDisplayArea() @@ -1059,7 +1059,7 @@ public class ActivityStarterTests extends ActivityTestsBase { doReturn(stack).when(mRootWindowContainer) .getLaunchStack(any(), any(), any(), anyBoolean(), any(), anyInt(), anyInt()); - starter.mStartActivity = new ActivityBuilder(mService).build(); + starter.mStartActivity = new ActivityBuilder(mAtm).build(); // When starter.startActivityInner( diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java index f8faae66c704..2e988af29638 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java @@ -60,14 +60,14 @@ import java.util.ArrayList; @Presubmit @MediumTest @RunWith(WindowTestRunner.class) -public class ActivityTaskManagerServiceTests extends ActivityTestsBase { +public class ActivityTaskManagerServiceTests extends WindowTestsBase { private final ArgumentCaptor<ClientTransaction> mClientTransactionCaptor = ArgumentCaptor.forClass(ClientTransaction.class); @Before public void setUp() throws Exception { - setBooted(mService); + setBooted(mAtm); } /** Verify that activity is finished correctly upon request. */ @@ -75,13 +75,13 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase { public void testActivityFinish() { final Task stack = new StackBuilder(mRootWindowContainer).build(); final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity(); - assertTrue("Activity must be finished", mService.finishActivity(activity.appToken, + assertTrue("Activity must be finished", mAtm.finishActivity(activity.appToken, 0 /* resultCode */, null /* resultData */, Activity.DONT_FINISH_TASK_WITH_ACTIVITY)); assertTrue(activity.finishing); assertTrue("Duplicate activity finish request must also return 'true'", - mService.finishActivity(activity.appToken, 0 /* resultCode */, + mAtm.finishActivity(activity.appToken, 0 /* resultCode */, null /* resultData */, Activity.DONT_FINISH_TASK_WITH_ACTIVITY)); } @@ -90,10 +90,10 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase { final Task stack = new StackBuilder(mRootWindowContainer).build(); final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity(); final ClientLifecycleManager mockLifecycleManager = mock(ClientLifecycleManager.class); - doReturn(mockLifecycleManager).when(mService).getLifecycleManager(); + doReturn(mockLifecycleManager).when(mAtm).getLifecycleManager(); doReturn(true).when(activity).checkEnterPictureInPictureState(anyString(), anyBoolean()); - mService.requestPictureInPictureMode(activity.token); + mAtm.requestPictureInPictureMode(activity.token); verify(mockLifecycleManager).scheduleTransaction(mClientTransactionCaptor.capture()); final ClientTransaction transaction = mClientTransactionCaptor.getValue(); @@ -108,11 +108,11 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase { public void testOnPictureInPictureRequested_cannotEnterPip() throws RemoteException { final Task stack = new StackBuilder(mRootWindowContainer).build(); final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity(); - ClientLifecycleManager lifecycleManager = mService.getLifecycleManager(); + ClientLifecycleManager lifecycleManager = mAtm.getLifecycleManager(); doReturn(false).when(activity).inPinnedWindowingMode(); doReturn(false).when(activity).checkEnterPictureInPictureState(anyString(), anyBoolean()); - mService.requestPictureInPictureMode(activity.token); + mAtm.requestPictureInPictureMode(activity.token); // Check enter no transactions with enter pip requests are made. verify(lifecycleManager, times(0)).scheduleTransaction(any()); @@ -122,10 +122,10 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase { public void testOnPictureInPictureRequested_alreadyInPIPMode() throws RemoteException { final Task stack = new StackBuilder(mRootWindowContainer).build(); final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity(); - ClientLifecycleManager lifecycleManager = mService.getLifecycleManager(); + ClientLifecycleManager lifecycleManager = mAtm.getLifecycleManager(); doReturn(true).when(activity).inPinnedWindowingMode(); - mService.requestPictureInPictureMode(activity.token); + mAtm.requestPictureInPictureMode(activity.token); // Check that no transactions with enter pip requests are made. verify(lifecycleManager, times(0)).scheduleTransaction(any()); @@ -158,14 +158,14 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase { @Override public void onFixedRotationFinished(int displayId) {} }; - mService.mWindowManager.registerDisplayWindowListener(listener); + mAtm.mWindowManager.registerDisplayWindowListener(listener); // Check that existing displays call added assertEquals(1, added.size()); assertEquals(0, changed.size()); assertEquals(0, removed.size()); added.clear(); // Check adding a display - DisplayContent newDisp1 = new TestDisplayContent.Builder(mService, 600, 800).build(); + DisplayContent newDisp1 = new TestDisplayContent.Builder(mAtm, 600, 800).build(); assertEquals(1, added.size()); assertEquals(0, changed.size()); assertEquals(0, removed.size()); @@ -174,7 +174,7 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase { Configuration c = new Configuration(newDisp1.getRequestedOverrideConfiguration()); c.windowConfiguration.setBounds(new Rect(0, 0, 1000, 1300)); newDisp1.onRequestedOverrideConfigurationChanged(c); - mService.mRootWindowContainer.ensureVisibilityAndConfig(null /* starting */, + mAtm.mRootWindowContainer.ensureVisibilityAndConfig(null /* starting */, newDisp1.mDisplayId, false /* markFrozenIfConfigChanged */, false /* deferResume */); assertEquals(0, added.size()); @@ -214,13 +214,13 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase { //mock other operations doReturn(true).when(record) .checkEnterPictureInPictureState("enterPictureInPictureMode", false); - doReturn(false).when(mService).isInPictureInPictureMode(any()); - doReturn(false).when(mService).isKeyguardLocked(); + doReturn(false).when(mAtm).isInPictureInPictureMode(any()); + doReturn(false).when(mAtm).isKeyguardLocked(); //to simulate NPE doReturn(null).when(record).getParent(); - mService.enterPictureInPictureMode(token, params); + mAtm.enterPictureInPictureMode(token, params); //if record's null parent is not handled gracefully, test will fail with NPE mockSession.finishMocking(); diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java deleted file mode 100644 index 5be2f0453bf4..000000000000 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityTestsBase.java +++ /dev/null @@ -1,607 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -package com.android.server.wm; - -import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; -import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; -import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; -import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; -import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; -import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE; -import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; - -import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; - -import static com.android.dx.mockito.inline.extended.ExtendedMockito.any; -import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyBoolean; -import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; -import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; -import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; -import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; -import static com.android.server.wm.WindowContainer.POSITION_BOTTOM; - -import android.app.ActivityManager; -import android.app.ActivityOptions; -import android.app.IApplicationThread; -import android.app.WindowConfiguration; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.ApplicationInfo; -import android.content.res.Configuration; -import android.os.Build; -import android.os.Bundle; -import android.os.UserHandle; -import android.service.voice.IVoiceInteractionSession; -import android.view.SurfaceControl; -import android.window.ITaskOrganizer; -import android.window.WindowContainerToken; - -import com.android.server.AttributeCache; - -import org.junit.Before; -import org.junit.BeforeClass; - -/** - * A base class to handle common operations in activity related unit tests. - */ -class ActivityTestsBase extends SystemServiceTestsBase { - final Context mContext = getInstrumentation().getTargetContext(); - - ActivityTaskManagerService mService; - RootWindowContainer mRootWindowContainer; - ActivityStackSupervisor mSupervisor; - - // Default package name - static final String DEFAULT_COMPONENT_PACKAGE_NAME = "com.foo"; - - // Default base activity name - private static final String DEFAULT_COMPONENT_CLASS_NAME = ".BarActivity"; - - @BeforeClass - public static void setUpOnceBase() { - AttributeCache.init(getInstrumentation().getTargetContext()); - } - - @Before - public void setUpBase() { - mService = mSystemServicesTestRule.getActivityTaskManagerService(); - mSupervisor = mService.mStackSupervisor; - mRootWindowContainer = mService.mRootWindowContainer; - } - - /** Creates and adds a {@link TestDisplayContent} to supervisor at the given position. */ - TestDisplayContent addNewDisplayContentAt(int position) { - return new TestDisplayContent.Builder(mService, 1000, 1500).setPosition(position).build(); - } - - /** Sets the default minimum task size to 1 so that tests can use small task sizes */ - public void removeGlobalMinSizeRestriction() { - mService.mRootWindowContainer.mDefaultMinSizeOfResizeableTaskDp = 1; - } - - /** - * Builder for creating new activities. - */ - protected static class ActivityBuilder { - // An id appended to the end of the component name to make it unique - private static int sCurrentActivityId = 0; - - private final ActivityTaskManagerService mService; - - private ComponentName mComponent; - private String mTargetActivity; - private Task mTask; - private String mProcessName = "name"; - private String mAffinity; - private int mUid = 12345; - private boolean mCreateTask; - private Task mStack; - private int mActivityFlags; - private int mLaunchMode; - private int mResizeMode = RESIZE_MODE_RESIZEABLE; - private float mMaxAspectRatio; - private int mScreenOrientation = SCREEN_ORIENTATION_UNSPECIFIED; - private boolean mLaunchTaskBehind; - private int mConfigChanges; - private int mLaunchedFromPid; - private int mLaunchedFromUid; - private WindowProcessController mWpc; - private Bundle mIntentExtras; - - ActivityBuilder(ActivityTaskManagerService service) { - mService = service; - } - - ActivityBuilder setComponent(ComponentName component) { - mComponent = component; - return this; - } - - ActivityBuilder setTargetActivity(String targetActivity) { - mTargetActivity = targetActivity; - return this; - } - - ActivityBuilder setIntentExtras(Bundle extras) { - mIntentExtras = extras; - return this; - } - - static ComponentName getDefaultComponent() { - return ComponentName.createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, - DEFAULT_COMPONENT_PACKAGE_NAME); - } - - ActivityBuilder setTask(Task task) { - mTask = task; - return this; - } - - ActivityBuilder setActivityFlags(int flags) { - mActivityFlags = flags; - return this; - } - - ActivityBuilder setLaunchMode(int launchMode) { - mLaunchMode = launchMode; - return this; - } - - ActivityBuilder setStack(Task stack) { - mStack = stack; - return this; - } - - ActivityBuilder setCreateTask(boolean createTask) { - mCreateTask = createTask; - return this; - } - - ActivityBuilder setProcessName(String name) { - mProcessName = name; - return this; - } - - ActivityBuilder setUid(int uid) { - mUid = uid; - return this; - } - - ActivityBuilder setResizeMode(int resizeMode) { - mResizeMode = resizeMode; - return this; - } - - ActivityBuilder setMaxAspectRatio(float maxAspectRatio) { - mMaxAspectRatio = maxAspectRatio; - return this; - } - - ActivityBuilder setScreenOrientation(int screenOrientation) { - mScreenOrientation = screenOrientation; - return this; - } - - ActivityBuilder setLaunchTaskBehind(boolean launchTaskBehind) { - mLaunchTaskBehind = launchTaskBehind; - return this; - } - - ActivityBuilder setConfigChanges(int configChanges) { - mConfigChanges = configChanges; - return this; - } - - ActivityBuilder setLaunchedFromPid(int pid) { - mLaunchedFromPid = pid; - return this; - } - - ActivityBuilder setLaunchedFromUid(int uid) { - mLaunchedFromUid = uid; - return this; - } - - ActivityBuilder setUseProcess(WindowProcessController wpc) { - mWpc = wpc; - return this; - } - - ActivityBuilder setAffinity(String affinity) { - mAffinity = affinity; - return this; - } - - ActivityRecord build() { - SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock); - try { - mService.deferWindowLayout(); - return buildInner(); - } finally { - mService.continueWindowLayout(); - } - } - - ActivityRecord buildInner() { - if (mComponent == null) { - final int id = sCurrentActivityId++; - mComponent = ComponentName.createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, - DEFAULT_COMPONENT_CLASS_NAME + id); - } - - if (mCreateTask) { - mTask = new TaskBuilder(mService.mStackSupervisor) - .setComponent(mComponent) - .setStack(mStack).build(); - } else if (mTask == null && mStack != null && DisplayContent.alwaysCreateStack( - mStack.getWindowingMode(), mStack.getActivityType())) { - // The stack can be the task root. - mTask = mStack; - } - - Intent intent = new Intent(); - intent.setComponent(mComponent); - if (mIntentExtras != null) { - intent.putExtras(mIntentExtras); - } - final ActivityInfo aInfo = new ActivityInfo(); - aInfo.applicationInfo = new ApplicationInfo(); - aInfo.applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT; - aInfo.applicationInfo.packageName = mComponent.getPackageName(); - aInfo.applicationInfo.uid = mUid; - aInfo.processName = mProcessName; - aInfo.packageName = mComponent.getPackageName(); - aInfo.name = mComponent.getClassName(); - if (mTargetActivity != null) { - aInfo.targetActivity = mTargetActivity; - } - aInfo.flags |= mActivityFlags; - aInfo.launchMode = mLaunchMode; - aInfo.resizeMode = mResizeMode; - aInfo.maxAspectRatio = mMaxAspectRatio; - aInfo.screenOrientation = mScreenOrientation; - aInfo.configChanges |= mConfigChanges; - aInfo.taskAffinity = mAffinity; - - ActivityOptions options = null; - if (mLaunchTaskBehind) { - options = ActivityOptions.makeTaskLaunchBehind(); - } - - final ActivityRecord activity = new ActivityRecord(mService, null /* caller */, - mLaunchedFromPid /* launchedFromPid */, mLaunchedFromUid /* launchedFromUid */, - null, null, intent, null, aInfo /*aInfo*/, new Configuration(), - null /* resultTo */, null /* resultWho */, 0 /* reqCode */, - false /*componentSpecified*/, false /* rootVoiceInteraction */, - mService.mStackSupervisor, options, null /* sourceRecord */); - spyOn(activity); - if (mTask != null) { - // fullscreen value is normally read from resources in ctor, so for testing we need - // to set it somewhere else since we can't mock resources. - doReturn(true).when(activity).occludesParent(); - doReturn(true).when(activity).fillsParent(); - mTask.addChild(activity); - // Make visible by default... - activity.setVisible(true); - } - - final WindowProcessController wpc; - if (mWpc != null) { - wpc = mWpc; - } else { - wpc = new WindowProcessController(mService, - aInfo.applicationInfo, mProcessName, mUid, - UserHandle.getUserId(12345), mock(Object.class), - mock(WindowProcessListener.class)); - wpc.setThread(mock(IApplicationThread.class)); - } - wpc.setThread(mock(IApplicationThread.class)); - activity.setProcess(wpc); - doReturn(wpc).when(mService).getProcessController( - activity.processName, activity.info.applicationInfo.uid); - - // Resume top activities to make sure all other signals in the system are connected. - mService.mRootWindowContainer.resumeFocusedStacksTopActivities(); - return activity; - } - } - - /** - * Builder for creating new tasks. - */ - protected static class TaskBuilder { - private final ActivityStackSupervisor mSupervisor; - - private ComponentName mComponent; - private String mPackage; - private int mFlags = 0; - // Task id 0 is reserved in ARC for the home app. - private int mTaskId = SystemServicesTestRule.sNextTaskId++; - private int mUserId = 0; - private IVoiceInteractionSession mVoiceSession; - private boolean mCreateStack = true; - - private Task mStack; - private TaskDisplayArea mTaskDisplayArea; - - TaskBuilder(ActivityStackSupervisor supervisor) { - mSupervisor = supervisor; - } - - TaskBuilder setComponent(ComponentName component) { - mComponent = component; - return this; - } - - TaskBuilder setPackage(String packageName) { - mPackage = packageName; - return this; - } - - /** - * Set to {@code true} by default, set to {@code false} to prevent the task from - * automatically creating a parent stack. - */ - TaskBuilder setCreateStack(boolean createStack) { - mCreateStack = createStack; - return this; - } - - TaskBuilder setVoiceSession(IVoiceInteractionSession session) { - mVoiceSession = session; - return this; - } - - TaskBuilder setFlags(int flags) { - mFlags = flags; - return this; - } - - TaskBuilder setTaskId(int taskId) { - mTaskId = taskId; - return this; - } - - TaskBuilder setUserId(int userId) { - mUserId = userId; - return this; - } - - TaskBuilder setStack(Task stack) { - mStack = stack; - return this; - } - - TaskBuilder setDisplay(DisplayContent display) { - mTaskDisplayArea = display.getDefaultTaskDisplayArea(); - return this; - } - - Task build() { - SystemServicesTestRule.checkHoldsLock(mSupervisor.mService.mGlobalLock); - - if (mStack == null && mCreateStack) { - TaskDisplayArea displayArea = mTaskDisplayArea != null ? mTaskDisplayArea - : mSupervisor.mRootWindowContainer.getDefaultTaskDisplayArea(); - mStack = displayArea.createStack( - WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); - spyOn(mStack); - } - - final ActivityInfo aInfo = new ActivityInfo(); - aInfo.applicationInfo = new ApplicationInfo(); - aInfo.applicationInfo.packageName = mPackage; - - Intent intent = new Intent(); - if (mComponent == null) { - mComponent = ComponentName.createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, - DEFAULT_COMPONENT_CLASS_NAME); - } - - intent.setComponent(mComponent); - intent.setFlags(mFlags); - - final Task task = new Task(mSupervisor.mService, mTaskId, aInfo, - intent /*intent*/, mVoiceSession, null /*_voiceInteractor*/, - null /*taskDescription*/, mStack); - spyOn(task); - task.mUserId = mUserId; - - if (mStack != null) { - mStack.moveToFront("test"); - mStack.addChild(task, true, true); - } - - return task; - } - } - - static class StackBuilder { - private final RootWindowContainer mRootWindowContainer; - private DisplayContent mDisplay; - private TaskDisplayArea mTaskDisplayArea; - private int mStackId = -1; - private int mWindowingMode = WINDOWING_MODE_UNDEFINED; - private int mActivityType = ACTIVITY_TYPE_STANDARD; - private boolean mOnTop = true; - private boolean mCreateActivity = true; - private ActivityInfo mInfo; - private Intent mIntent; - - StackBuilder(RootWindowContainer root) { - mRootWindowContainer = root; - mDisplay = mRootWindowContainer.getDefaultDisplay(); - mTaskDisplayArea = mDisplay.getDefaultTaskDisplayArea(); - } - - StackBuilder setWindowingMode(int windowingMode) { - mWindowingMode = windowingMode; - return this; - } - - StackBuilder setActivityType(int activityType) { - mActivityType = activityType; - return this; - } - - StackBuilder setStackId(int stackId) { - mStackId = stackId; - return this; - } - - /** - * Set the parent {@link DisplayContent} and use the default task display area. Overrides - * the task display area, if was set before. - */ - StackBuilder setDisplay(DisplayContent display) { - mDisplay = display; - mTaskDisplayArea = mDisplay.getDefaultTaskDisplayArea(); - return this; - } - - /** Set the parent {@link TaskDisplayArea}. Overrides the display, if was set before. */ - StackBuilder setTaskDisplayArea(TaskDisplayArea taskDisplayArea) { - mTaskDisplayArea = taskDisplayArea; - mDisplay = mTaskDisplayArea.mDisplayContent; - return this; - } - - StackBuilder setOnTop(boolean onTop) { - mOnTop = onTop; - return this; - } - - StackBuilder setCreateActivity(boolean createActivity) { - mCreateActivity = createActivity; - return this; - } - - StackBuilder setActivityInfo(ActivityInfo info) { - mInfo = info; - return this; - } - - StackBuilder setIntent(Intent intent) { - mIntent = intent; - return this; - } - - Task build() { - SystemServicesTestRule.checkHoldsLock(mRootWindowContainer.mWmService.mGlobalLock); - - final int stackId = mStackId >= 0 ? mStackId : mTaskDisplayArea.getNextStackId(); - final Task stack = mTaskDisplayArea.createStackUnchecked( - mWindowingMode, mActivityType, stackId, mOnTop, mInfo, mIntent, - false /* createdByOrganizer */); - final ActivityStackSupervisor supervisor = mRootWindowContainer.mStackSupervisor; - - if (mCreateActivity) { - new ActivityBuilder(supervisor.mService) - .setCreateTask(true) - .setStack(stack) - .build(); - if (mOnTop) { - // We move the task to front again in order to regain focus after activity - // added to the stack. Or {@link DisplayContent#mPreferredTopFocusableStack} - // could be other stacks (e.g. home stack). - stack.moveToFront("createActivityStack"); - } else { - stack.moveToBack("createActivityStack", null); - } - } - spyOn(stack); - - doNothing().when(stack).startActivityLocked( - any(), any(), anyBoolean(), anyBoolean(), any()); - - return stack; - } - - } - - static class TestSplitOrganizer extends ITaskOrganizer.Stub { - final ActivityTaskManagerService mService; - Task mPrimary; - Task mSecondary; - boolean mInSplit = false; - // moves everything to secondary. Most tests expect this since sysui usually does it. - boolean mMoveToSecondaryOnEnter = true; - int mDisplayId; - TestSplitOrganizer(ActivityTaskManagerService service, int displayId) { - mService = service; - mDisplayId = displayId; - mService.mTaskOrganizerController.registerTaskOrganizer(this, - WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); - mService.mTaskOrganizerController.registerTaskOrganizer(this, - WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); - WindowContainerToken primary = mService.mTaskOrganizerController.createRootTask( - displayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).token; - mPrimary = WindowContainer.fromBinder(primary.asBinder()).asTask(); - WindowContainerToken secondary = mService.mTaskOrganizerController.createRootTask( - displayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token; - mSecondary = WindowContainer.fromBinder(secondary.asBinder()).asTask(); - } - TestSplitOrganizer(ActivityTaskManagerService service) { - this(service, - service.mStackSupervisor.mRootWindowContainer.getDefaultDisplay().mDisplayId); - } - public void setMoveToSecondaryOnEnter(boolean move) { - mMoveToSecondaryOnEnter = move; - } - @Override - public void onTaskAppeared(ActivityManager.RunningTaskInfo info, SurfaceControl leash) { - } - @Override - public void onTaskVanished(ActivityManager.RunningTaskInfo info) { - } - @Override - public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) { - if (mInSplit) { - return; - } - if (info.topActivityType == ACTIVITY_TYPE_UNDEFINED) { - // Not populated - return; - } - if (info.configuration.windowConfiguration.getWindowingMode() - != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) { - return; - } - mInSplit = true; - if (!mMoveToSecondaryOnEnter) { - return; - } - mService.mTaskOrganizerController.setLaunchRoot(mDisplayId, - mSecondary.mRemoteToken.toWindowContainerToken()); - DisplayContent dc = mService.mRootWindowContainer.getDisplayContent(mDisplayId); - dc.forAllTaskDisplayAreas(taskDisplayArea -> { - for (int sNdx = taskDisplayArea.getStackCount() - 1; sNdx >= 0; --sNdx) { - final Task stack = taskDisplayArea.getStackAt(sNdx); - if (!WindowConfiguration.isSplitScreenWindowingMode(stack.getWindowingMode())) { - stack.reparent(mSecondary, POSITION_BOTTOM); - } - } - }); - } - @Override - public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo taskInfo) { - } - }; -} diff --git a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java index 97a2ebe98abb..888935ef9747 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java @@ -431,7 +431,7 @@ public class AppWindowTokenTests extends WindowTestsBase { doCallRealMethod().when(mStack).startActivityLocked( any(), any(), anyBoolean(), anyBoolean(), any()); // Make mVisibleSetFromTransferredStartingWindow true. - final ActivityRecord middle = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) + final ActivityRecord middle = new ActivityBuilder(mWm.mAtmService) .setTask(mTask).build(); mStack.startActivityLocked(middle, null /* focusedTopActivity */, false /* newTask */, false /* keepCurTransition */, null /* options */); @@ -440,7 +440,7 @@ public class AppWindowTokenTests extends WindowTestsBase { assertNull(mActivity.startingWindow); assertHasStartingWindow(middle); - final ActivityRecord top = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) + final ActivityRecord top = new ActivityBuilder(mWm.mAtmService) .setTask(mTask).build(); // Expect the visibility should be updated to true when transferring starting window from // a visible activity. diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java index edf15361e445..0cc61599c2ac 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -850,13 +850,13 @@ public class DisplayContentTests extends WindowTestsBase { IWindowManager.FIXED_TO_USER_ROTATION_DISABLED); final Task stack = - new ActivityTestsBase.StackBuilder(mWm.mAtmService.mRootWindowContainer) + new StackBuilder(mWm.mAtmService.mRootWindowContainer) .setDisplay(dc) .build(); doReturn(true).when(stack).isVisible(); final Task freeformStack = - new ActivityTestsBase.StackBuilder(mWm.mAtmService.mRootWindowContainer) + new StackBuilder(mWm.mAtmService.mRootWindowContainer) .setDisplay(dc) .setWindowingMode(WINDOWING_MODE_FREEFORM) .build(); @@ -881,9 +881,8 @@ public class DisplayContentTests extends WindowTestsBase { IWindowManager.FIXED_TO_USER_ROTATION_DISABLED); final int newOrientation = getRotatedOrientation(dc); - final Task stack = - new ActivityTestsBase.StackBuilder(mWm.mAtmService.mRootWindowContainer) - .setDisplay(dc).build(); + final Task stack = new StackBuilder(mWm.mAtmService.mRootWindowContainer) + .setDisplay(dc).build(); final ActivityRecord activity = stack.getTopMostTask().getTopNonFinishingActivity(); activity.setRequestedOrientation(newOrientation); @@ -901,9 +900,8 @@ public class DisplayContentTests extends WindowTestsBase { IWindowManager.FIXED_TO_USER_ROTATION_ENABLED); final int newOrientation = getRotatedOrientation(dc); - final Task stack = - new ActivityTestsBase.StackBuilder(mWm.mAtmService.mRootWindowContainer) - .setDisplay(dc).build(); + final Task stack = new StackBuilder(mWm.mAtmService.mRootWindowContainer) + .setDisplay(dc).build(); final ActivityRecord activity = stack.getTopMostTask().getTopNonFinishingActivity(); activity.setRequestedOrientation(newOrientation); @@ -1213,7 +1211,7 @@ public class DisplayContentTests extends WindowTestsBase { verify(t, never()).setPosition(any(), eq(0), eq(0)); // Launch another activity before the transition is finished. - final ActivityRecord app2 = new ActivityTestsBase.StackBuilder(mWm.mRoot) + final ActivityRecord app2 = new StackBuilder(mWm.mRoot) .setDisplay(mDisplayContent).build().getTopMostActivity(); app2.setVisible(false); mDisplayContent.mOpeningApps.add(app2); @@ -1247,8 +1245,7 @@ public class DisplayContentTests extends WindowTestsBase { final ActivityRecord app = createActivityRecord(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD); final Task task = app.getTask(); - final ActivityRecord app2 = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) - .setTask(task).build(); + final ActivityRecord app2 = new ActivityBuilder(mWm.mAtmService).setTask(task).build(); mDisplayContent.setFixedRotationLaunchingApp(app2, (mDisplayContent.getRotation() + 1) % 4); doReturn(true).when(task).isAppTransitioning(); // If the task is animating transition, this should be no-op. @@ -1513,8 +1510,7 @@ public class DisplayContentTests extends WindowTestsBase { @Test public void testSetWindowingModeAtomicallyUpdatesWindoingModeAndDisplayWindowingMode() { final DisplayContent dc = createNewDisplay(); - final Task stack = - new ActivityTestsBase.StackBuilder(mWm.mAtmService.mRootWindowContainer) + final Task stack = new StackBuilder(mWm.mAtmService.mRootWindowContainer) .setDisplay(dc) .build(); doAnswer(invocation -> { diff --git a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java index a7a8505e336d..820eca4a49a8 100644 --- a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java @@ -68,14 +68,14 @@ import java.util.Map; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class LaunchParamsControllerTests extends ActivityTestsBase { +public class LaunchParamsControllerTests extends WindowTestsBase { private LaunchParamsController mController; private TestLaunchParamsPersister mPersister; @Before public void setUp() throws Exception { mPersister = new TestLaunchParamsPersister(); - mController = new LaunchParamsController(mService, mPersister); + mController = new LaunchParamsController(mAtm, mPersister); } /** @@ -87,8 +87,8 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { positioner = mock(LaunchParamsModifier.class); mController.registerModifier(positioner); - final ActivityRecord record = new ActivityBuilder(mService).build(); - final ActivityRecord source = new ActivityBuilder(mService).build(); + final ActivityRecord record = new ActivityBuilder(mAtm).build(); + final ActivityRecord source = new ActivityBuilder(mAtm).build(); final WindowLayout layout = new WindowLayout(0, 0, 0, 0, 0, 0, 0); final ActivityOptions options = mock(ActivityOptions.class); @@ -108,7 +108,7 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { final ComponentName name = new ComponentName("com.android.foo", ".BarActivity"); final int userId = 0; - final ActivityRecord activity = new ActivityBuilder(mService).setComponent(name) + final ActivityRecord activity = new ActivityBuilder(mAtm).setComponent(name) .setUid(userId).build(); final LaunchParams expected = new LaunchParams(); expected.mPreferredTaskDisplayArea = mock(TaskDisplayArea.class); @@ -228,10 +228,10 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { @Test public void testVrPreferredDisplay() { final TestDisplayContent vrDisplay = createNewDisplayContent(); - mService.mVr2dDisplayId = vrDisplay.mDisplayId; + mAtm.mVr2dDisplayId = vrDisplay.mDisplayId; final LaunchParams result = new LaunchParams(); - final ActivityRecord vrActivity = new ActivityBuilder(mService).build(); + final ActivityRecord vrActivity = new ActivityBuilder(mAtm).build(); vrActivity.requestedVrComponent = vrActivity.mActivityComponent; // VR activities should always land on default display. @@ -241,7 +241,7 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { result.mPreferredTaskDisplayArea); // Otherwise, always lands on VR 2D display. - final ActivityRecord vr2dActivity = new ActivityBuilder(mService).build(); + final ActivityRecord vr2dActivity = new ActivityBuilder(mAtm).build(); mController.calculate(null /*task*/, null /*layout*/, vr2dActivity /*activity*/, null /*source*/, null /*options*/, PHASE_BOUNDS, result); assertEquals(vrDisplay.getDefaultTaskDisplayArea(), result.mPreferredTaskDisplayArea); @@ -249,7 +249,7 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { null /*options*/, PHASE_BOUNDS, result); assertEquals(vrDisplay.getDefaultTaskDisplayArea(), result.mPreferredTaskDisplayArea); - mService.mVr2dDisplayId = INVALID_DISPLAY; + mAtm.mVr2dDisplayId = INVALID_DISPLAY; } @@ -262,8 +262,8 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { final LaunchParamsModifier positioner = mock(LaunchParamsModifier.class); mController.registerModifier(positioner); - final ActivityRecord record = new ActivityBuilder(mService).build(); - final ActivityRecord source = new ActivityBuilder(mService).build(); + final ActivityRecord record = new ActivityBuilder(mAtm).build(); + final ActivityRecord source = new ActivityBuilder(mAtm).build(); final WindowLayout layout = new WindowLayout(0, 0, 0, 0, 0, 0, 0); final ActivityOptions options = mock(ActivityOptions.class); @@ -284,7 +284,7 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { final TaskDisplayArea preferredTaskDisplayArea = display.getDefaultTaskDisplayArea(); params.mPreferredTaskDisplayArea = preferredTaskDisplayArea; final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params); - final Task task = new TaskBuilder(mService.mStackSupervisor).build(); + final Task task = new TaskBuilder(mAtm.mStackSupervisor).build(); mController.registerModifier(positioner); @@ -305,7 +305,7 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { final int windowingMode = WINDOWING_MODE_FREEFORM; params.mWindowingMode = windowingMode; final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params); - final Task task = new TaskBuilder(mService.mStackSupervisor).build(); + final Task task = new TaskBuilder(mAtm.mStackSupervisor).build(); mController.registerModifier(positioner); @@ -330,7 +330,7 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { params.mWindowingMode = WINDOWING_MODE_FREEFORM; params.mBounds.set(expected); final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params); - final Task task = new TaskBuilder(mService.mStackSupervisor).build(); + final Task task = new TaskBuilder(mAtm.mStackSupervisor).build(); mController.registerModifier(positioner); @@ -355,7 +355,7 @@ public class LaunchParamsControllerTests extends ActivityTestsBase { params.mWindowingMode = WINDOWING_MODE_FULLSCREEN; params.mBounds.set(expected); final InstrumentedPositioner positioner = new InstrumentedPositioner(RESULT_DONE, params); - final Task task = new TaskBuilder(mService.mStackSupervisor).build(); + final Task task = new TaskBuilder(mAtm.mStackSupervisor).build(); mController.registerModifier(positioner); diff --git a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java index e389a538f25d..18a2d1337d4b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsPersisterTests.java @@ -65,7 +65,7 @@ import java.util.function.Predicate; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class LaunchParamsPersisterTests extends ActivityTestsBase { +public class LaunchParamsPersisterTests extends WindowTestsBase { private static final int TEST_USER_ID = 3; private static final int ALTERNATIVE_USER_ID = 0; private static final ComponentName TEST_COMPONENT = @@ -109,7 +109,7 @@ public class LaunchParamsPersisterTests extends ActivityTestsBase { deleteRecursively(mFolder); mDisplayUniqueId = "test:" + sNextUniqueId++; - mTestDisplay = new TestDisplayContent.Builder(mService, 1000, 1500) + mTestDisplay = new TestDisplayContent.Builder(mAtm, 1000, 1500) .setUniqueId(mDisplayUniqueId).build(); when(mRootWindowContainer.getDisplayContent(eq(mDisplayUniqueId))) .thenReturn(mTestDisplay); @@ -172,7 +172,7 @@ public class LaunchParamsPersisterTests extends ActivityTestsBase { public void testFetchesSameResultWithActivity() { mTarget.saveTask(mTestTask); - final ActivityRecord activity = new ActivityBuilder(mService).setComponent(TEST_COMPONENT) + final ActivityRecord activity = new ActivityBuilder(mAtm).setComponent(TEST_COMPONENT) .setUid(TEST_USER_ID * UserHandle.PER_USER_RANGE).build(); mTarget.getLaunchParams(null, activity, mResult); diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java index 1724303633d9..54c7f271e81b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java @@ -94,7 +94,7 @@ import java.util.function.Function; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class RecentTasksTest extends ActivityTestsBase { +public class RecentTasksTest extends WindowTestsBase { private static final int TEST_USER_0_ID = 0; private static final int TEST_USER_1_ID = 10; private static final int TEST_QUIET_USER_ID = 20; @@ -122,14 +122,14 @@ public class RecentTasksTest extends ActivityTestsBase { mTaskContainer = mRootWindowContainer.getDefaultTaskDisplayArea(); // Set the recent tasks we should use for testing in this class. - mRecentTasks = new TestRecentTasks(mService, mTaskPersister); + mRecentTasks = new TestRecentTasks(mAtm, mTaskPersister); spyOn(mRecentTasks); - mService.setRecentTasks(mRecentTasks); + mAtm.setRecentTasks(mRecentTasks); mRecentTasks.loadParametersFromResources(mContext.getResources()); // Set the running tasks we should use for testing in this class. mRunningTasks = new TestRunningTasks(); - mService.mStackSupervisor.setRunningTasks(mRunningTasks); + mAtm.mStackSupervisor.setRunningTasks(mRunningTasks); mStack = mTaskContainer.createStack( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); @@ -455,7 +455,7 @@ public class RecentTasksTest extends ActivityTestsBase { final Function<Boolean, Task> taskBuilder = visible -> { final Task task = createTaskBuilder(className).build(); // Make the task non-empty. - final ActivityRecord r = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord r = new ActivityBuilder(mAtm).setTask(task).build(); r.setVisibility(visible); return task; }; @@ -831,7 +831,7 @@ public class RecentTasksTest extends ActivityTestsBase { Task stack = mTasks.get(2).getRootTask(); stack.moveToFront("", mTasks.get(2)); - doReturn(stack).when(mService.mRootWindowContainer).getTopDisplayFocusedStack(); + doReturn(stack).when(mAtm.mRootWindowContainer).getTopDisplayFocusedStack(); // Simulate the reset from the timeout mRecentTasks.resetFreezeTaskListReorderingOnTimeout(); @@ -994,16 +994,16 @@ public class RecentTasksTest extends ActivityTestsBase { mStack.removeIfPossible(); // The following APIs should not restore task from recents to the active list. - assertNotRestoreTask(() -> mService.setFocusedTask(taskId)); - assertNotRestoreTask(() -> mService.startSystemLockTaskMode(taskId)); - assertNotRestoreTask(() -> mService.cancelTaskWindowTransition(taskId)); + assertNotRestoreTask(() -> mAtm.setFocusedTask(taskId)); + assertNotRestoreTask(() -> mAtm.startSystemLockTaskMode(taskId)); + assertNotRestoreTask(() -> mAtm.cancelTaskWindowTransition(taskId)); assertNotRestoreTask( - () -> mService.resizeTask(taskId, null /* bounds */, 0 /* resizeMode */)); + () -> mAtm.resizeTask(taskId, null /* bounds */, 0 /* resizeMode */)); assertNotRestoreTask( - () -> mService.setTaskWindowingMode(taskId, WINDOWING_MODE_FULLSCREEN, + () -> mAtm.setTaskWindowingMode(taskId, WINDOWING_MODE_FULLSCREEN, false/* toTop */)); assertNotRestoreTask( - () -> mService.setTaskWindowingModeSplitScreenPrimary(taskId, false /* toTop */)); + () -> mAtm.setTaskWindowingModeSplitScreenPrimary(taskId, false /* toTop */)); } @Test @@ -1014,7 +1014,7 @@ public class RecentTasksTest extends ActivityTestsBase { mRecentTasks.remove(task); TaskChangeNotificationController controller = - mService.getTaskChangeNotificationController(); + mAtm.getTaskChangeNotificationController(); verify(controller, times(2)).notifyTaskListUpdated(); } @@ -1027,7 +1027,7 @@ public class RecentTasksTest extends ActivityTestsBase { // 2 calls - Once for add and once for remove TaskChangeNotificationController controller = - mService.getTaskChangeNotificationController(); + mAtm.getTaskChangeNotificationController(); verify(controller, times(2)).notifyTaskListUpdated(); } @@ -1042,7 +1042,7 @@ public class RecentTasksTest extends ActivityTestsBase { // 4 calls - Twice for add and twice for remove TaskChangeNotificationController controller = - mService.getTaskChangeNotificationController(); + mAtm.getTaskChangeNotificationController(); verify(controller, times(4)).notifyTaskListUpdated(); } @@ -1054,7 +1054,7 @@ public class RecentTasksTest extends ActivityTestsBase { final Bundle data = new Bundle(); data.putInt("key", 100); final Task task1 = createTaskBuilder(".Task").build(); - final ActivityRecord r1 = new ActivityBuilder(mService) + final ActivityRecord r1 = new ActivityBuilder(mAtm) .setTask(task1) .setIntentExtras(data) .build(); @@ -1106,7 +1106,7 @@ public class RecentTasksTest extends ActivityTestsBase { @Test public void testNotRecentsComponent_denyApiAccess() throws Exception { - doReturn(PackageManager.PERMISSION_DENIED).when(mService) + doReturn(PackageManager.PERMISSION_DENIED).when(mAtm) .checkGetTasksPermission(anyString(), anyInt(), anyInt()); // Expect the following methods to fail due to recents component not being set mRecentTasks.setIsCallerRecentsOverride(TestRecentTasks.DENY_THROW_SECURITY_EXCEPTION); @@ -1118,7 +1118,7 @@ public class RecentTasksTest extends ActivityTestsBase { @Test public void testRecentsComponent_allowApiAccessWithoutPermissions() { - doReturn(PackageManager.PERMISSION_DENIED).when(mService) + doReturn(PackageManager.PERMISSION_DENIED).when(mAtm) .checkGetTasksPermission(anyString(), anyInt(), anyInt()); // Set the recents component and ensure that the following calls do not fail mRecentTasks.setIsCallerRecentsOverride(TestRecentTasks.GRANT); @@ -1127,50 +1127,50 @@ public class RecentTasksTest extends ActivityTestsBase { } private void doTestRecentTasksApis(boolean expectCallable) { - assertSecurityException(expectCallable, () -> mService.removeStack(INVALID_STACK_ID)); + assertSecurityException(expectCallable, () -> mAtm.removeStack(INVALID_STACK_ID)); assertSecurityException(expectCallable, - () -> mService.removeStacksInWindowingModes( + () -> mAtm.removeStacksInWindowingModes( new int[]{WINDOWING_MODE_UNDEFINED})); assertSecurityException(expectCallable, - () -> mService.removeStacksWithActivityTypes( + () -> mAtm.removeStacksWithActivityTypes( new int[]{ACTIVITY_TYPE_UNDEFINED})); - assertSecurityException(expectCallable, () -> mService.removeTask(0)); + assertSecurityException(expectCallable, () -> mAtm.removeTask(0)); assertSecurityException(expectCallable, - () -> mService.setTaskWindowingMode(0, WINDOWING_MODE_UNDEFINED, true)); + () -> mAtm.setTaskWindowingMode(0, WINDOWING_MODE_UNDEFINED, true)); assertSecurityException(expectCallable, - () -> mService.moveTaskToStack(0, INVALID_STACK_ID, true)); + () -> mAtm.moveTaskToStack(0, INVALID_STACK_ID, true)); assertSecurityException(expectCallable, - () -> mService.setTaskWindowingModeSplitScreenPrimary(0, true)); + () -> mAtm.setTaskWindowingModeSplitScreenPrimary(0, true)); assertSecurityException(expectCallable, - () -> mService.moveTopActivityToPinnedStack(INVALID_STACK_ID, new Rect())); - assertSecurityException(expectCallable, () -> mService.getAllStackInfos()); + () -> mAtm.moveTopActivityToPinnedStack(INVALID_STACK_ID, new Rect())); + assertSecurityException(expectCallable, () -> mAtm.getAllStackInfos()); assertSecurityException(expectCallable, - () -> mService.getStackInfo(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_UNDEFINED)); + () -> mAtm.getStackInfo(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_UNDEFINED)); assertSecurityException(expectCallable, () -> { try { - mService.getFocusedStackInfo(); + mAtm.getFocusedStackInfo(); } catch (RemoteException e) { // Ignore } }); assertSecurityException(expectCallable, - () -> mService.startActivityFromRecents(0, new Bundle())); - assertSecurityException(expectCallable, () -> mService.getTaskSnapshot(0, true)); - assertSecurityException(expectCallable, () -> mService.registerTaskStackListener(null)); + () -> mAtm.startActivityFromRecents(0, new Bundle())); + assertSecurityException(expectCallable, () -> mAtm.getTaskSnapshot(0, true)); + assertSecurityException(expectCallable, () -> mAtm.registerTaskStackListener(null)); assertSecurityException(expectCallable, - () -> mService.unregisterTaskStackListener(null)); - assertSecurityException(expectCallable, () -> mService.getTaskDescription(0)); - assertSecurityException(expectCallable, () -> mService.cancelTaskWindowTransition(0)); - assertSecurityException(expectCallable, () -> mService.startRecentsActivity(null, null, + () -> mAtm.unregisterTaskStackListener(null)); + assertSecurityException(expectCallable, () -> mAtm.getTaskDescription(0)); + assertSecurityException(expectCallable, () -> mAtm.cancelTaskWindowTransition(0)); + assertSecurityException(expectCallable, () -> mAtm.startRecentsActivity(null, null, null)); - assertSecurityException(expectCallable, () -> mService.cancelRecentsAnimation(true)); - assertSecurityException(expectCallable, () -> mService.stopAppSwitches()); - assertSecurityException(expectCallable, () -> mService.resumeAppSwitches()); + assertSecurityException(expectCallable, () -> mAtm.cancelRecentsAnimation(true)); + assertSecurityException(expectCallable, () -> mAtm.stopAppSwitches()); + assertSecurityException(expectCallable, () -> mAtm.resumeAppSwitches()); } private void testGetTasksApis(boolean expectCallable) { - mService.getRecentTasks(MAX_VALUE, 0, TEST_USER_0_ID); - mService.getTasks(MAX_VALUE); + mAtm.getRecentTasks(MAX_VALUE, 0, TEST_USER_0_ID); + mAtm.getTasks(MAX_VALUE); if (expectCallable) { assertTrue(mRecentTasks.mLastAllowed); assertTrue(mRunningTasks.mLastAllowed); @@ -1185,7 +1185,7 @@ public class RecentTasksTest extends ActivityTestsBase { } private TaskBuilder createTaskBuilder(String packageName, String className) { - return new TaskBuilder(mService.mStackSupervisor) + return new TaskBuilder(mAtm.mStackSupervisor) .setComponent(new ComponentName(packageName, className)) .setStack(mStack) .setUserId(TEST_USER_0_ID); diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java index 8bc8c0b1169f..7fb7d40f0bd2 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java @@ -477,7 +477,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase { } private ActivityRecord createHomeActivity() { - final ActivityRecord homeActivity = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) + final ActivityRecord homeActivity = new ActivityBuilder(mWm.mAtmService) .setStack(mRootHomeTask) .setCreateTask(true) .build(); diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java index e5d1e465d8ff..d821d38ea297 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java @@ -66,7 +66,7 @@ import org.junit.runner.RunWith; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class RecentsAnimationTest extends ActivityTestsBase { +public class RecentsAnimationTest extends WindowTestsBase { private static final int TEST_USER_ID = 100; @@ -77,11 +77,11 @@ public class RecentsAnimationTest extends ActivityTestsBase { @Before public void setUp() throws Exception { mRecentsAnimationController = mock(RecentsAnimationController.class); - mService.mWindowManager.setRecentsAnimationController(mRecentsAnimationController); - doNothing().when(mService.mWindowManager).initializeRecentsAnimation( + mAtm.mWindowManager.setRecentsAnimationController(mRecentsAnimationController); + doNothing().when(mAtm.mWindowManager).initializeRecentsAnimation( anyInt(), any(), any(), anyInt(), any(), any()); - final RecentTasks recentTasks = mService.getRecentTasks(); + final RecentTasks recentTasks = mAtm.getRecentTasks(); spyOn(recentTasks); doReturn(mRecentsComponent).when(recentTasks).getRecentsComponent(); } @@ -91,12 +91,12 @@ public class RecentsAnimationTest extends ActivityTestsBase { TaskDisplayArea taskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea(); Task recentsStack = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS, true /* onTop */); - ActivityRecord recentActivity = new ActivityBuilder(mService) + ActivityRecord recentActivity = new ActivityBuilder(mAtm) .setComponent(mRecentsComponent) .setCreateTask(true) .setStack(recentsStack) .build(); - ActivityRecord topActivity = new ActivityBuilder(mService).setCreateTask(true).build(); + ActivityRecord topActivity = new ActivityBuilder(mAtm).setCreateTask(true).build(); topActivity.getRootTask().moveToFront("testRecentsActivityVisiblility"); doCallRealMethod().when(mRootWindowContainer).ensureActivitiesVisible( @@ -123,7 +123,7 @@ public class RecentsAnimationTest extends ActivityTestsBase { false /* includingParents */); ActivityRecord topRunningHomeActivity = homeStack.topRunningActivity(); if (topRunningHomeActivity == null) { - topRunningHomeActivity = new ActivityBuilder(mService) + topRunningHomeActivity = new ActivityBuilder(mAtm) .setStack(homeStack) .setCreateTask(true) .build(); @@ -139,15 +139,15 @@ public class RecentsAnimationTest extends ActivityTestsBase { anyInt() /* startFlags */, any() /* profilerInfo */); // Assume its process is alive because the caller should be the recents service. - WindowProcessController wpc = new WindowProcessController(mService, aInfo.applicationInfo, + WindowProcessController wpc = new WindowProcessController(mAtm, aInfo.applicationInfo, aInfo.processName, aInfo.applicationInfo.uid, 0 /* userId */, mock(Object.class) /* owner */, mock(WindowProcessListener.class)); wpc.setThread(mock(IApplicationThread.class)); - doReturn(wpc).when(mService).getProcessController(eq(wpc.mName), eq(wpc.mUid)); + doReturn(wpc).when(mAtm).getProcessController(eq(wpc.mName), eq(wpc.mUid)); Intent recentsIntent = new Intent().setComponent(mRecentsComponent); // Null animation indicates to preload. - mService.startRecentsActivity(recentsIntent, null /* assistDataReceiver */, + mAtm.startRecentsActivity(recentsIntent, null /* assistDataReceiver */, null /* recentsAnimationRunner */); Task recentsStack = defaultTaskDisplayArea.getStack(WINDOWING_MODE_FULLSCREEN, @@ -167,7 +167,7 @@ public class RecentsAnimationTest extends ActivityTestsBase { spyOn(recentsActivity); // Start when the recents activity exists. It should ensure the configuration. - mService.startRecentsActivity(recentsIntent, null /* assistDataReceiver */, + mAtm.startRecentsActivity(recentsIntent, null /* assistDataReceiver */, null /* recentsAnimationRunner */); verify(recentsActivity).ensureActivityConfiguration(anyInt() /* globalChanges */, @@ -181,20 +181,20 @@ public class RecentsAnimationTest extends ActivityTestsBase { TaskDisplayArea defaultTaskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea(); Task recentsStack = defaultTaskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS, true /* onTop */); - ActivityRecord recentActivity = new ActivityBuilder(mService).setComponent( + ActivityRecord recentActivity = new ActivityBuilder(mAtm).setComponent( mRecentsComponent).setCreateTask(true).setStack(recentsStack).build(); WindowProcessController app = recentActivity.app; recentActivity.app = null; // Start an activity on top. - new ActivityBuilder(mService).setCreateTask(true).build().getRootTask().moveToFront( + new ActivityBuilder(mAtm).setCreateTask(true).build().getRootTask().moveToFront( "testRestartRecentsActivity"); doCallRealMethod().when(mRootWindowContainer).ensureActivitiesVisible( any() /* starting */, anyInt() /* configChanges */, anyBoolean() /* preserveWindows */, anyBoolean() /* notifyClients */); - doReturn(app).when(mService).getProcessController(eq(recentActivity.processName), anyInt()); - ClientLifecycleManager lifecycleManager = mService.getLifecycleManager(); + doReturn(app).when(mAtm).getProcessController(eq(recentActivity.processName), anyInt()); + ClientLifecycleManager lifecycleManager = mAtm.getLifecycleManager(); doNothing().when(lifecycleManager).scheduleTransaction(any()); startRecentsActivity(); @@ -212,20 +212,20 @@ public class RecentsAnimationTest extends ActivityTestsBase { // Assume the home activity support recents. ActivityRecord targetActivity = homeStack.getTopNonFinishingActivity(); if (targetActivity == null) { - targetActivity = new ActivityBuilder(mService) + targetActivity = new ActivityBuilder(mAtm) .setCreateTask(true) .setStack(homeStack) .build(); } // Put another home activity in home stack. - ActivityRecord anotherHomeActivity = new ActivityBuilder(mService) + ActivityRecord anotherHomeActivity = new ActivityBuilder(mAtm) .setComponent(new ComponentName(mContext.getPackageName(), "Home2")) .setCreateTask(true) .setStack(homeStack) .build(); // Start an activity on top so the recents activity can be started. - new ActivityBuilder(mService) + new ActivityBuilder(mAtm) .setCreateTask(true) .build() .getRootTask() @@ -252,21 +252,21 @@ public class RecentsAnimationTest extends ActivityTestsBase { TaskDisplayArea taskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea(); Task fullscreenStack = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); - new ActivityBuilder(mService) + new ActivityBuilder(mAtm) .setComponent(new ComponentName(mContext.getPackageName(), "App1")) .setCreateTask(true) .setStack(fullscreenStack) .build(); Task recentsStack = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS, true /* onTop */); - new ActivityBuilder(mService) + new ActivityBuilder(mAtm) .setComponent(mRecentsComponent) .setCreateTask(true) .setStack(recentsStack) .build(); Task fullscreenStack2 = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); - new ActivityBuilder(mService) + new ActivityBuilder(mAtm) .setComponent(new ComponentName(mContext.getPackageName(), "App2")) .setCreateTask(true) .setStack(fullscreenStack2) @@ -293,21 +293,21 @@ public class RecentsAnimationTest extends ActivityTestsBase { TaskDisplayArea taskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea(); Task fullscreenStack = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); - new ActivityBuilder(mService) + new ActivityBuilder(mAtm) .setComponent(new ComponentName(mContext.getPackageName(), "App1")) .setCreateTask(true) .setStack(fullscreenStack) .build(); Task recentsStack = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS, true /* onTop */); - new ActivityBuilder(mService) + new ActivityBuilder(mAtm) .setComponent(mRecentsComponent) .setCreateTask(true) .setStack(recentsStack) .build(); Task fullscreenStack2 = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); - new ActivityBuilder(mService) + new ActivityBuilder(mAtm) .setComponent(new ComponentName(mContext.getPackageName(), "App2")) .setCreateTask(true) .setStack(fullscreenStack2) @@ -319,7 +319,7 @@ public class RecentsAnimationTest extends ActivityTestsBase { fullscreenStack.removeIfPossible(); // Ensure that the recents animation was NOT canceled - verify(mService.mWindowManager, times(0)).cancelRecentsAnimation( + verify(mAtm.mWindowManager, times(0)).cancelRecentsAnimation( eq(REORDER_KEEP_IN_PLACE), any()); verify(mRecentsAnimationController, times(0)).setCancelOnNextTransitionStart(); } @@ -330,7 +330,7 @@ public class RecentsAnimationTest extends ActivityTestsBase { .getDefaultTaskDisplayArea(); Task homeStack = taskDisplayArea.getStack(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME); - ActivityRecord otherUserHomeActivity = new ActivityBuilder(mService) + ActivityRecord otherUserHomeActivity = new ActivityBuilder(mAtm) .setStack(homeStack) .setCreateTask(true) .setComponent(new ComponentName(mContext.getPackageName(), "Home2")) @@ -339,13 +339,13 @@ public class RecentsAnimationTest extends ActivityTestsBase { Task fullscreenStack = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); - new ActivityBuilder(mService) + new ActivityBuilder(mAtm) .setComponent(new ComponentName(mContext.getPackageName(), "App1")) .setCreateTask(true) .setStack(fullscreenStack) .build(); - doReturn(TEST_USER_ID).when(mService).getCurrentUserId(); + doReturn(TEST_USER_ID).when(mAtm).getCurrentUserId(); doCallRealMethod().when(mRootWindowContainer).ensureActivitiesVisible( any() /* starting */, anyInt() /* configChanges */, anyBoolean() /* preserveWindows */, anyBoolean() /* notifyClients */); @@ -373,7 +373,7 @@ public class RecentsAnimationTest extends ActivityTestsBase { // The callback is actually RecentsAnimation. recentsAnimation[0] = invocation.getArgument(2); return null; - }).when(mService.mWindowManager).initializeRecentsAnimation( + }).when(mAtm.mWindowManager).initializeRecentsAnimation( anyInt() /* targetActivityType */, any() /* recentsAnimationRunner */, any() /* callbacks */, anyInt() /* displayId */, any() /* recentTaskIds */, any() /* targetActivity */); @@ -381,7 +381,7 @@ public class RecentsAnimationTest extends ActivityTestsBase { Intent recentsIntent = new Intent(); recentsIntent.setComponent(recentsComponent); - mService.startRecentsActivity(recentsIntent, null /* assistDataReceiver */, + mAtm.startRecentsActivity(recentsIntent, null /* assistDataReceiver */, mock(IRecentsAnimationRunner.class)); return recentsAnimation[0]; } diff --git a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java index 74be2c979668..1ec9bd24ad59 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java @@ -89,14 +89,14 @@ import java.util.function.Consumer; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class RootActivityContainerTests extends ActivityTestsBase { +public class RootActivityContainerTests extends WindowTestsBase { private Task mFullscreenStack; @Before public void setUp() throws Exception { mFullscreenStack = mRootWindowContainer.getDefaultTaskDisplayArea().createStack( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); - doNothing().when(mService).updateSleepIfNeededLocked(); + doNothing().when(mAtm).updateSleepIfNeededLocked(); } /** @@ -117,11 +117,11 @@ public class RootActivityContainerTests extends ActivityTestsBase { */ @Test public void testReplacingTaskInPinnedStack() { - final ActivityRecord firstActivity = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(mFullscreenStack).build(); final Task task = firstActivity.getTask(); - final ActivityRecord secondActivity = new ActivityBuilder(mService).setTask(task) + final ActivityRecord secondActivity = new ActivityBuilder(mAtm).setTask(task) .setStack(mFullscreenStack).build(); mFullscreenStack.moveToFront("testReplacingTaskInPinnedStack"); @@ -152,11 +152,11 @@ public class RootActivityContainerTests extends ActivityTestsBase { @Test public void testMovingBottomMostStackActivityToPinnedStack() { - final ActivityRecord firstActivity = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(mFullscreenStack).build(); final Task task = firstActivity.getTask(); - final ActivityRecord secondActivity = new ActivityBuilder(mService).setTask(task) + final ActivityRecord secondActivity = new ActivityBuilder(mAtm).setTask(task) .setStack(mFullscreenStack).build(); mFullscreenStack.moveTaskToBack(task); @@ -252,7 +252,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { @Test public void testAwakeFromSleepingWithAppConfiguration() { final DisplayContent display = mRootWindowContainer.getDefaultDisplay(); - final ActivityRecord activity = new ActivityBuilder(mService).setCreateTask(true).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build(); activity.moveFocusableActivityToTop("test"); assertTrue(activity.getStack().isFocusedStackOnDisplay()); ActivityRecordTests.setRotatedScreenOrientationSilently(activity); @@ -264,13 +264,13 @@ public class RootActivityContainerTests extends ActivityTestsBase { // Assume the activity was shown in different orientation. For example, the top activity is // landscape and the portrait lockscreen is shown. activity.setLastReportedConfiguration( - new MergedConfiguration(mService.getGlobalConfiguration(), rotatedConfig)); + new MergedConfiguration(mAtm.getGlobalConfiguration(), rotatedConfig)); activity.setState(ActivityState.STOPPED, "sleep"); display.setIsSleeping(true); doReturn(false).when(display).shouldSleep(); // Allow to resume when awaking. - setBooted(mService); + setBooted(mAtm); mRootWindowContainer.applySleepTokens(true); // The display orientation should be changed by the activity so there is no relaunch. @@ -288,7 +288,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { final int originalStackCount = defaultTaskDisplayArea.getStackCount(); final Task stack = defaultTaskDisplayArea.createStack( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, false /* onTop */); - final ActivityRecord firstActivity = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(stack).build(); assertEquals(originalStackCount + 1, defaultTaskDisplayArea.getStackCount()); @@ -312,16 +312,16 @@ public class RootActivityContainerTests extends ActivityTestsBase { final int originalStackCount = defaultTaskDisplayArea.getStackCount(); final Task stack = defaultTaskDisplayArea.createStack( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, false /* onTop */); - final ActivityRecord firstActivity = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord firstActivity = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(stack).build(); assertEquals(originalStackCount + 1, defaultTaskDisplayArea.getStackCount()); final DisplayContent dc = defaultTaskDisplayArea.getDisplayContent(); - final TaskDisplayArea secondTaskDisplayArea = WindowTestsBase.createTaskDisplayArea(dc, - mRootWindowContainer.mWmService, "TestTaskDisplayArea", FEATURE_VENDOR_FIRST); + final TaskDisplayArea secondTaskDisplayArea = WindowTestsBase.createTaskDisplayArea( + dc, mRootWindowContainer.mWmService, "TestTaskDisplayArea", FEATURE_VENDOR_FIRST); final Task secondStack = secondTaskDisplayArea.createStack( WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, false /* onTop */); - new ActivityBuilder(mService).setCreateTask(true).setStack(secondStack) + new ActivityBuilder(mAtm).setCreateTask(true).setStack(secondStack) .setUseProcess(firstActivity.app).build(); assertEquals(1, secondTaskDisplayArea.getStackCount()); @@ -340,7 +340,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { .getDefaultTaskDisplayArea(); final Task stack = defaultTaskDisplayArea.createStack( WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, true /* onTop */); - final ActivityRecord activity = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(stack).build(); // Created stacks are focusable by default. @@ -354,7 +354,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { final Task pinnedStack = defaultTaskDisplayArea.createStack( WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD, true /* onTop */); - final ActivityRecord pinnedActivity = new ActivityBuilder(mService).setCreateTask(true) + final ActivityRecord pinnedActivity = new ActivityBuilder(mAtm).setCreateTask(true) .setStack(pinnedStack).build(); // We should not be focusable when in pinned mode @@ -385,7 +385,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { .createStack(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, true /* onTop */); final Task task = new TaskBuilder(mSupervisor).setStack(primaryStack).build(); - final ActivityRecord r = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord r = new ActivityBuilder(mAtm).setTask(task).build(); // Find a launch stack for the top activity in split-screen primary, while requesting // split-screen secondary. @@ -439,7 +439,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { final Task stack = secondDisplay.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS, true /* onTop */); final Task task = new TaskBuilder(mSupervisor).setStack(stack).build(); - new ActivityBuilder(mService).setTask(task).build(); + new ActivityBuilder(mAtm).setTask(task).build(); final String reason = "findTaskToMoveToFront"; mSupervisor.findTaskToMoveToFront(targetTask, 0, ActivityOptions.makeBasic(), reason, @@ -459,7 +459,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { final Task targetStack = spy(taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, false /* onTop */)); final Task task = new TaskBuilder(mSupervisor).setStack(targetStack).build(); - final ActivityRecord activity = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(task).build(); taskDisplayArea.positionChildAt(POSITION_BOTTOM, targetStack, false /*includingParents*/); // Assume the stack is not at the topmost position (e.g. behind always-on-top stacks) but it @@ -489,7 +489,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { doReturn(true).when(mRootWindowContainer).resumeHomeActivity(any(), any(), any()); - mService.setBooted(true); + mAtm.setBooted(true); // Trigger resume on all displays mRootWindowContainer.resumeFocusedStacksTopActivities(); @@ -515,11 +515,11 @@ public class RootActivityContainerTests extends ActivityTestsBase { final Task stack = secondDisplay.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); final Task task = new TaskBuilder(mSupervisor).setStack(stack).build(); - new ActivityBuilder(mService).setTask(task).build(); + new ActivityBuilder(mAtm).setTask(task).build(); doReturn(true).when(mRootWindowContainer).resumeHomeActivity(any(), any(), any()); - mService.setBooted(true); + mAtm.setBooted(true); // Trigger resume on all displays mRootWindowContainer.resumeFocusedStacksTopActivities(); @@ -539,7 +539,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { final Task targetStack = spy(taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, false /* onTop */)); final Task task = new TaskBuilder(mSupervisor).setStack(targetStack).build(); - final ActivityRecord activity = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(task).build(); activity.setState(ActivityState.RESUMED, "test"); // Assume the stack is at the topmost position @@ -559,7 +559,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { final Task targetStack = spy(taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, false /* onTop */)); final Task task = new TaskBuilder(mSupervisor).setStack(targetStack).build(); - final ActivityRecord activity = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(task).build(); activity.setState(ActivityState.RESUMED, "test"); taskDisplayArea.positionChildAt(POSITION_BOTTOM, targetStack, false /*includingParents*/); @@ -584,7 +584,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { // Create secondary displays. final TestDisplayContent secondDisplay = - new TestDisplayContent.Builder(mService, 1000, 1500) + new TestDisplayContent.Builder(mAtm, 1000, 1500) .setSystemDecorations(true).build(); doReturn(true).when(mRootWindowContainer) @@ -605,16 +605,16 @@ public class RootActivityContainerTests extends ActivityTestsBase { @Test public void testNotStartHomeBeforeBoot() { final int displayId = 1; - final boolean isBooting = mService.mAmInternal.isBooting(); - final boolean isBooted = mService.mAmInternal.isBooted(); + final boolean isBooting = mAtm.mAmInternal.isBooting(); + final boolean isBooted = mAtm.mAmInternal.isBooted(); try { - mService.mAmInternal.setBooting(false); - mService.mAmInternal.setBooted(false); + mAtm.mAmInternal.setBooting(false); + mAtm.mAmInternal.setBooted(false); mRootWindowContainer.onDisplayAdded(displayId); verify(mRootWindowContainer, never()).startHomeOnDisplay(anyInt(), any(), anyInt()); } finally { - mService.mAmInternal.setBooting(isBooting); - mService.mAmInternal.setBooted(isBooted); + mAtm.mAmInternal.setBooting(isBooting); + mAtm.mAmInternal.setBooted(isBooted); } } @@ -626,7 +626,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { final ActivityInfo info = new ActivityInfo(); info.applicationInfo = new ApplicationInfo(); final WindowProcessController app = mock(WindowProcessController.class); - doReturn(app).when(mService).getProcessController(any(), anyInt()); + doReturn(app).when(mAtm).getProcessController(any(), anyInt()); // Can not start home if we don't want to start home while home is being instrumented. doReturn(true).when(app).isInstrumenting(); @@ -653,7 +653,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { public void testStartSecondaryHomeOnDisplayWithUserKeyLocked() { // Create secondary displays. final TestDisplayContent secondDisplay = - new TestDisplayContent.Builder(mService, 1000, 1500) + new TestDisplayContent.Builder(mAtm, 1000, 1500) .setSystemDecorations(true).build(); // Use invalid user id to let StorageManager.isUserKeyUnlocked() return false. @@ -678,7 +678,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { public void testStartSecondaryHomeOnDisplayWithoutSysDecorations() { // Create secondary displays. final TestDisplayContent secondDisplay = - new TestDisplayContent.Builder(mService, 1000, 1500) + new TestDisplayContent.Builder(mAtm, 1000, 1500) .setSystemDecorations(false).build(); mRootWindowContainer.startHomeOnDisplay(0 /* userId */, "testStartSecondaryHome", @@ -712,7 +712,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { @Test public void testResolveSecondaryHomeActivityWhenPrimaryHomeNotSet() { // Setup: primary home not set. - final Intent primaryHomeIntent = mService.getHomeIntent(); + final Intent primaryHomeIntent = mAtm.getHomeIntent(); final ActivityInfo aInfoPrimary = new ActivityInfo(); aInfoPrimary.name = ResolverActivity.class.getName(); doReturn(aInfoPrimary).when(mRootWindowContainer).resolveHomeActivity(anyInt(), @@ -740,7 +740,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { // SetUp: set secondary home and force it. mockResolveHomeActivity(false /* primaryHome */, true /* forceSystemProvided */); final Intent secondaryHomeIntent = - mService.getSecondaryHomeIntent(null /* preferredPackage */); + mAtm.getSecondaryHomeIntent(null /* preferredPackage */); final List<ResolveInfo> resolutions = new ArrayList<>(); final ResolveInfo resolveInfo = new ResolveInfo(); final ActivityInfo aInfoSecondary = getFakeHomeActivityInfo(false /* primaryHome*/); @@ -855,11 +855,11 @@ public class RootActivityContainerTests extends ActivityTestsBase { public void testGetLaunchStackWithRealCallerId() { // Create a non-system owned virtual display. final TestDisplayContent secondaryDisplay = - new TestDisplayContent.Builder(mService, 1000, 1500) + new TestDisplayContent.Builder(mAtm, 1000, 1500) .setType(TYPE_VIRTUAL).setOwnerUid(100).build(); // Create an activity with specify the original launch pid / uid. - final ActivityRecord r = new ActivityBuilder(mService).setLaunchedFromPid(200) + final ActivityRecord r = new ActivityBuilder(mAtm).setLaunchedFromPid(200) .setLaunchedFromUid(200).build(); // Simulate ActivityStarter to find a launch stack for requesting the activity to launch @@ -882,12 +882,11 @@ public class RootActivityContainerTests extends ActivityTestsBase { @Test public void testGetValidLaunchStackOnDisplayWithCandidateRootTask() { // Create a root task with an activity on secondary display. - final TestDisplayContent secondaryDisplay = new TestDisplayContent.Builder(mService, 300, + final TestDisplayContent secondaryDisplay = new TestDisplayContent.Builder(mAtm, 300, 600).build(); - final Task task = new ActivityTestsBase.StackBuilder(mRootWindowContainer).setDisplay( - secondaryDisplay).build(); - final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(mService) - .setTask(task).build(); + final Task task = new StackBuilder(mRootWindowContainer) + .setDisplay(secondaryDisplay).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(task).build(); // Make sure the root task is valid and can be reused on default display. final Task stack = mRootWindowContainer.getValidLaunchStackInTaskDisplayArea( @@ -923,7 +922,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { DisplayContent.POSITION_TOP); final Task stack = secondDisplay.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); - final ActivityRecord activity = new ActivityBuilder(mService).setStack(stack).build(); + final ActivityRecord activity = new ActivityBuilder(mAtm).setStack(stack).build(); spyOn(activity); spyOn(stack); @@ -946,7 +945,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { ActivityInfo targetActivityInfo = getFakeHomeActivityInfo(primaryHome); Intent targetIntent; if (primaryHome) { - targetIntent = mService.getHomeIntent(); + targetIntent = mAtm.getHomeIntent(); } else { Resources resources = mContext.getResources(); spyOn(resources); @@ -954,7 +953,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { com.android.internal.R.string.config_secondaryHomePackage); doReturn(forceSystemProvided).when(resources).getBoolean( com.android.internal.R.bool.config_useSystemProvidedLauncherForSecondary); - targetIntent = mService.getSecondaryHomeIntent(null /* preferredPackage */); + targetIntent = mAtm.getSecondaryHomeIntent(null /* preferredPackage */); } doReturn(targetActivityInfo).when(mRootWindowContainer).resolveHomeActivity(anyInt(), refEq(targetIntent)); @@ -965,7 +964,7 @@ public class RootActivityContainerTests extends ActivityTestsBase { * activity info for test cases. */ private void mockResolveSecondaryHomeActivity() { - final Intent secondaryHomeIntent = mService + final Intent secondaryHomeIntent = mAtm .getSecondaryHomeIntent(null /* preferredPackage */); final ActivityInfo aInfoSecondary = getFakeHomeActivityInfo(false); doReturn(Pair.create(aInfoSecondary, secondaryHomeIntent)).when(mRootWindowContainer) diff --git a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java index d9d07d9beb2b..72899e726b6e 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java @@ -133,10 +133,10 @@ public class RootWindowContainerTests extends WindowTestsBase { @Test public void testFindActivityByTargetComponent() { final ComponentName aliasComponent = ComponentName.createRelative( - ActivityTestsBase.DEFAULT_COMPONENT_PACKAGE_NAME, ".AliasActivity"); + DEFAULT_COMPONENT_PACKAGE_NAME, ".AliasActivity"); final ComponentName targetComponent = ComponentName.createRelative( aliasComponent.getPackageName(), ".TargetActivity"); - final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) + final ActivityRecord activity = new ActivityBuilder(mWm.mAtmService) .setComponent(aliasComponent) .setTargetActivity(targetComponent.getClassName()) .setLaunchMode(ActivityInfo.LAUNCH_SINGLE_INSTANCE) @@ -174,15 +174,13 @@ public class RootWindowContainerTests extends WindowTestsBase { @Test public void testForceStopPackage() { - final Task task = new ActivityTestsBase.StackBuilder(mWm.mRoot).build(); + final Task task = new StackBuilder(mWm.mRoot).build(); final ActivityRecord activity = task.getTopMostActivity(); final WindowProcessController wpc = activity.app; final ActivityRecord[] activities = { activity, - new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) - .setStack(task).setUseProcess(wpc).build(), - new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) - .setStack(task).setUseProcess(wpc).build() + new ActivityBuilder(mWm.mAtmService).setStack(task).setUseProcess(wpc).build(), + new ActivityBuilder(mWm.mAtmService).setStack(task).setUseProcess(wpc).build() }; activities[0].detachFromProcess(); activities[1].finishing = true; diff --git a/services/tests/wmtests/src/com/android/server/wm/RunningTasksTest.java b/services/tests/wmtests/src/com/android/server/wm/RunningTasksTest.java index e51a133d5cce..341509310e26 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RunningTasksTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RunningTasksTest.java @@ -42,7 +42,7 @@ import java.util.ArrayList; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class RunningTasksTest extends ActivityTestsBase { +public class RunningTasksTest extends WindowTestsBase { private static final ArraySet<Integer> PROFILE_IDS = new ArraySet<>(); @@ -57,7 +57,7 @@ public class RunningTasksTest extends ActivityTestsBase { public void testCollectTasksByLastActiveTime() { // Create a number of stacks with tasks (of incrementing active time) final ArrayList<DisplayContent> displays = new ArrayList<>(); - final DisplayContent display = new TestDisplayContent.Builder(mService, 1000, 2500).build(); + final DisplayContent display = new TestDisplayContent.Builder(mAtm, 1000, 2500).build(); displays.add(display); final int numStacks = 2; @@ -101,7 +101,7 @@ public class RunningTasksTest extends ActivityTestsBase { @Test public void testTaskInfo_expectNoExtras() { - final DisplayContent display = new TestDisplayContent.Builder(mService, 1000, 2500).build(); + final DisplayContent display = new TestDisplayContent.Builder(mAtm, 1000, 2500).build(); final int numTasks = 10; for (int i = 0; i < numTasks; i++) { final Task stack = new StackBuilder(mRootWindowContainer) @@ -132,13 +132,13 @@ public class RunningTasksTest extends ActivityTestsBase { */ private Task createTask(Task stack, String className, int taskId, int lastActiveTime, Bundle extras) { - final Task task = new TaskBuilder(mService.mStackSupervisor) + final Task task = new TaskBuilder(mAtm.mStackSupervisor) .setComponent(new ComponentName(mContext.getPackageName(), className)) .setTaskId(taskId) .setStack(stack) .build(); task.lastActiveTime = lastActiveTime; - final ActivityRecord activity = new ActivityBuilder(mService) + final ActivityRecord activity = new ActivityBuilder(mAtm) .setTask(task) .setComponent(new ComponentName(mContext.getPackageName(), ".TaskActivity")) .setIntentExtras(extras) diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java index 250cf09e8547..0e1d4dc4aa0d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -64,7 +64,7 @@ import java.util.ArrayList; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class SizeCompatTests extends ActivityTestsBase { +public class SizeCompatTests extends WindowTestsBase { private Task mStack; private Task mTask; private ActivityRecord mActivity; @@ -76,7 +76,7 @@ public class SizeCompatTests extends ActivityTestsBase { } private void setUpDisplaySizeWithApp(int dw, int dh) { - final TestDisplayContent.Builder builder = new TestDisplayContent.Builder(mService, dw, dh); + final TestDisplayContent.Builder builder = new TestDisplayContent.Builder(mAtm, dw, dh); setUpApp(builder.build()); } @@ -92,7 +92,7 @@ public class SizeCompatTests extends ActivityTestsBase { final Rect originalOverrideBounds = new Rect(mActivity.getBounds()); resizeDisplay(mStack.getDisplay(), 600, 1200); // The visible activity should recompute configuration according to the last parent bounds. - mService.restartActivityProcessIfVisible(mActivity.appToken); + mAtm.restartActivityProcessIfVisible(mActivity.appToken); assertEquals(Task.ActivityState.RESTARTING_PROCESS, mActivity.getState()); assertNotEquals(originalOverrideBounds, mActivity.getBounds()); @@ -102,7 +102,7 @@ public class SizeCompatTests extends ActivityTestsBase { public void testKeepBoundsWhenChangingFromFreeformToFullscreen() { removeGlobalMinSizeRestriction(); // create freeform display and a freeform app - DisplayContent display = new TestDisplayContent.Builder(mService, 2000, 1000) + DisplayContent display = new TestDisplayContent.Builder(mAtm, 2000, 1000) .setCanRotate(false) .setWindowingMode(WindowConfiguration.WINDOWING_MODE_FREEFORM).build(); setUpApp(display); @@ -135,7 +135,7 @@ public class SizeCompatTests extends ActivityTestsBase { @Test public void testFixedAspectRatioBoundsWithDecorInSquareDisplay() { final int notchHeight = 100; - setUpApp(new TestDisplayContent.Builder(mService, 600, 800).setNotch(notchHeight).build()); + setUpApp(new TestDisplayContent.Builder(mAtm, 600, 800).setNotch(notchHeight).build()); // Rotation is ignored so because the display size is close to square (700/600<1.333). assertTrue(mActivity.mDisplayContent.ignoreRotationForApps()); @@ -186,10 +186,10 @@ public class SizeCompatTests extends ActivityTestsBase { // Make a new less-tall display with lower density final DisplayContent newDisplay = - new TestDisplayContent.Builder(mService, 1000, 2000) + new TestDisplayContent.Builder(mAtm, 1000, 2000) .setDensityDpi(200).build(); - mActivity = new ActivityBuilder(mService) + mActivity = new ActivityBuilder(mAtm) .setTask(mTask) .setResizeMode(RESIZE_MODE_UNRESIZEABLE) .setMaxAspectRatio(1.5f) @@ -262,7 +262,7 @@ public class SizeCompatTests extends ActivityTestsBase { @Test public void testAspectRatioMatchParentBoundsAndImeAttachable() { - setUpApp(new TestDisplayContent.Builder(mService, 1000, 2000) + setUpApp(new TestDisplayContent.Builder(mAtm, 1000, 2000) .setSystemDecorations(true).build()); prepareUnresizable(2f /* maxAspect */, SCREEN_ORIENTATION_UNSPECIFIED); assertFitted(); @@ -293,7 +293,7 @@ public class SizeCompatTests extends ActivityTestsBase { final int origHeight = configBounds.height(); final int notchHeight = 100; - final DisplayContent newDisplay = new TestDisplayContent.Builder(mService, 2000, 1000) + final DisplayContent newDisplay = new TestDisplayContent.Builder(mAtm, 2000, 1000) .setCanRotate(false).setNotch(notchHeight).build(); // Move the non-resizable activity to the new display. @@ -327,7 +327,7 @@ public class SizeCompatTests extends ActivityTestsBase { public void testFixedOrientRotateCutoutDisplay() { // Create a display with a notch/cutout final int notchHeight = 60; - setUpApp(new TestDisplayContent.Builder(mService, 1000, 2500) + setUpApp(new TestDisplayContent.Builder(mAtm, 1000, 2500) .setNotch(notchHeight).build()); // Bounds=[0, 0 - 1000, 1460], AppBounds=[0, 60 - 1000, 1460]. prepareUnresizable(1.4f /* maxAspect */, SCREEN_ORIENTATION_PORTRAIT); @@ -430,14 +430,14 @@ public class SizeCompatTests extends ActivityTestsBase { // Change display density display.mBaseDisplayDensity = (int) (0.7f * display.mBaseDisplayDensity); display.computeScreenConfiguration(rotatedConfig); - mService.mAmInternal = mock(ActivityManagerInternal.class); + mAtm.mAmInternal = mock(ActivityManagerInternal.class); display.onRequestedOverrideConfigurationChanged(rotatedConfig); // The override configuration should be reset and the activity's process will be killed. assertFitted(); verify(mActivity).restartProcessIfVisible(); - waitHandlerIdle(mService.mH); - verify(mService.mAmInternal).killProcess( + waitHandlerIdle(mAtm.mH); + verify(mAtm.mAmInternal).killProcess( eq(mActivity.app.mName), eq(mActivity.app.mUid), anyString()); } @@ -454,7 +454,7 @@ public class SizeCompatTests extends ActivityTestsBase { assertFitted(); final ArrayList<IBinder> compatTokens = new ArrayList<>(); - mService.getTaskChangeNotificationController().registerTaskStackListener( + mAtm.getTaskChangeNotificationController().registerTaskStackListener( new TaskStackListener() { @Override public void onSizeCompatModeActivityChanged(int displayId, @@ -492,7 +492,7 @@ public class SizeCompatTests extends ActivityTestsBase { mActivity.info.resizeMode = ActivityInfo.RESIZE_MODE_RESIZEABLE; // Create a size compat activity on the same task. - final ActivityRecord activity = new ActivityBuilder(mService) + final ActivityRecord activity = new ActivityBuilder(mAtm) .setTask(mTask) .setResizeMode(ActivityInfo.RESIZE_MODE_UNRESIZEABLE) .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) @@ -516,7 +516,7 @@ public class SizeCompatTests extends ActivityTestsBase { final int dw = 1000; final int dh = 2500; final int notchHeight = 200; - setUpApp(new TestDisplayContent.Builder(mService, dw, dh).setNotch(notchHeight).build()); + setUpApp(new TestDisplayContent.Builder(mAtm, dw, dh).setNotch(notchHeight).build()); addStatusBar(mActivity.mDisplayContent); mActivity.setVisible(false); diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java index 27a8fc3c5943..3492556b3682 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java @@ -219,8 +219,7 @@ public class TaskDisplayAreaTests extends WindowTestsBase { final Task rootHomeTask = defaultTaskDisplayArea.getRootHomeTask(); rootHomeTask.mResizeMode = RESIZE_MODE_UNRESIZEABLE; - final Task primarySplitTask = - new ActivityTestsBase.StackBuilder(rootWindowContainer) + final Task primarySplitTask = new StackBuilder(rootWindowContainer) .setTaskDisplayArea(defaultTaskDisplayArea) .setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) .setActivityType(ACTIVITY_TYPE_STANDARD) @@ -234,7 +233,7 @@ public class TaskDisplayAreaTests extends WindowTestsBase { ActivityRecord homeActivity = rootHomeTask.getTopNonFinishingActivity(); if (homeActivity == null) { - homeActivity = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) + homeActivity = new ActivityBuilder(mWm.mAtmService) .setStack(rootHomeTask).setCreateTask(true).build(); } homeActivity.setVisible(false); diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java index a048526bb068..42de5e6b429d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java @@ -67,7 +67,7 @@ import java.util.Locale; @SmallTest @Presubmit @RunWith(WindowTestRunner.class) -public class TaskLaunchParamsModifierTests extends ActivityTestsBase { +public class TaskLaunchParamsModifierTests extends WindowTestsBase { private static final Rect DISPLAY_BOUNDS = new Rect(/* left */ 0, /* top */ 0, /* right */ 1920, /* bottom */ 1080); private static final Rect DISPLAY_STABLE_BOUNDS = new Rect(/* left */ 100, @@ -82,7 +82,7 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { @Before public void setUp() throws Exception { - mActivity = new ActivityBuilder(mService).build(); + mActivity = new ActivityBuilder(mAtm).build(); mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.N_MR1; mActivity.info.applicationInfo.flags |= ApplicationInfo.FLAG_SUPPORTS_SCREEN_DENSITIES; @@ -449,7 +449,7 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { @Test public void testForceMaximizesUnresizeableApp() { - mService.mSizeCompatFreeform = false; + mAtm.mSizeCompatFreeform = false; final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); @@ -472,7 +472,7 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { @Test public void testLaunchesAppInWindowOnFreeformDisplay() { - mService.mSizeCompatFreeform = true; + mAtm.mSizeCompatFreeform = true; final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); @@ -1318,18 +1318,18 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { @Test public void testNoMultiDisplaySupports() { - final boolean orgValue = mService.mSupportsMultiDisplay; + final boolean orgValue = mAtm.mSupportsMultiDisplay; final TestDisplayContent display = createNewDisplayContent(WINDOWING_MODE_FULLSCREEN); mCurrent.mPreferredTaskDisplayArea = display.getDefaultTaskDisplayArea(); try { - mService.mSupportsMultiDisplay = false; + mAtm.mSupportsMultiDisplay = false; assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null, mActivity, /* source */ null, /* options */ null, mCurrent, mResult)); assertEquals(mRootWindowContainer.getDefaultTaskDisplayArea(), mResult.mPreferredTaskDisplayArea); } finally { - mService.mSupportsMultiDisplay = orgValue; + mAtm.mSupportsMultiDisplay = orgValue; } } @@ -1351,7 +1351,7 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { private ActivityRecord createSourceActivity(TestDisplayContent display) { final Task stack = display.getDefaultTaskDisplayArea() .createStack(display.getWindowingMode(), ACTIVITY_TYPE_STANDARD, true); - return new ActivityBuilder(mService).setStack(stack).setCreateTask(true).build(); + return new ActivityBuilder(mAtm).setStack(stack).setCreateTask(true).build(); } private void addFreeformTaskTo(TestDisplayContent display, Rect bounds) { diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java index 0db3f94d1fc3..27cae2fc1a4c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java @@ -77,7 +77,7 @@ public class TaskPositionerTests extends WindowTestsBase { removeGlobalMinSizeRestriction(); final Task stack = createTaskStackOnDisplay(mDisplayContent); - final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(stack.mAtmService) + final ActivityRecord activity = new ActivityBuilder(stack.mAtmService) .setStack(stack) // In real case, there is no additional level for freeform mode. .setCreateTask(false) diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java index bf76c8ee5f0a..fc54e1de888f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java @@ -95,7 +95,7 @@ import java.io.Reader; @MediumTest @Presubmit @RunWith(WindowTestRunner.class) -public class TaskRecordTests extends ActivityTestsBase { +public class TaskRecordTests extends WindowTestsBase { private static final String TASK_TAG = "task"; @@ -172,7 +172,7 @@ public class TaskRecordTests extends ActivityTestsBase { @Test public void testFitWithinBounds() { final Rect parentBounds = new Rect(10, 10, 200, 200); - TaskDisplayArea taskDisplayArea = mService.mRootWindowContainer.getDefaultTaskDisplayArea(); + TaskDisplayArea taskDisplayArea = mAtm.mRootWindowContainer.getDefaultTaskDisplayArea(); Task stack = taskDisplayArea.createStack(WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, true /* onTop */); Task task = new TaskBuilder(mSupervisor).setStack(stack).build(); @@ -210,7 +210,7 @@ public class TaskRecordTests extends ActivityTestsBase { /** Tests that the task bounds adjust properly to changes between FULLSCREEN and FREEFORM */ @Test public void testBoundsOnModeChangeFreeformToFullscreen() { - DisplayContent display = mService.mRootWindowContainer.getDefaultDisplay(); + DisplayContent display = mAtm.mRootWindowContainer.getDefaultDisplay(); Task stack = new StackBuilder(mRootWindowContainer).setDisplay(display) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); Task task = stack.getBottomMostTask(); @@ -243,7 +243,7 @@ public class TaskRecordTests extends ActivityTestsBase { public void testFullscreenBoundsForcedOrientation() { final Rect fullScreenBounds = new Rect(0, 0, 1920, 1080); final Rect fullScreenBoundsPort = new Rect(0, 0, 1080, 1920); - final DisplayContent display = new TestDisplayContent.Builder(mService, + final DisplayContent display = new TestDisplayContent.Builder(mAtm, fullScreenBounds.width(), fullScreenBounds.height()).setCanRotate(false).build(); assertTrue(mRootWindowContainer.getDisplayContent(display.mDisplayId) != null); // Fix the display orientation to landscape which is the natural rotation (0) for the test @@ -267,7 +267,7 @@ public class TaskRecordTests extends ActivityTestsBase { assertEquals(fullScreenBounds.height(), task.getBounds().height()); // Top activity gets used - ActivityRecord top = new ActivityBuilder(mService).setTask(task).setStack(stack).build(); + ActivityRecord top = new ActivityBuilder(mAtm).setTask(task).setStack(stack).build(); assertEquals(top, task.getTopNonFinishingActivity()); top.setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE); assertThat(task.getBounds().width()).isGreaterThan(task.getBounds().height()); @@ -307,7 +307,7 @@ public class TaskRecordTests extends ActivityTestsBase { public void testIgnoresForcedOrientationWhenParentHandles() { final Rect fullScreenBounds = new Rect(0, 0, 1920, 1080); DisplayContent display = new TestDisplayContent.Builder( - mService, fullScreenBounds.width(), fullScreenBounds.height()).build(); + mAtm, fullScreenBounds.width(), fullScreenBounds.height()).build(); display.getRequestedOverrideConfiguration().orientation = Configuration.ORIENTATION_LANDSCAPE; @@ -339,7 +339,7 @@ public class TaskRecordTests extends ActivityTestsBase { public void testComputeConfigResourceOverrides() { final Rect fullScreenBounds = new Rect(0, 0, 1080, 1920); TestDisplayContent display = new TestDisplayContent.Builder( - mService, fullScreenBounds.width(), fullScreenBounds.height()).build(); + mAtm, fullScreenBounds.width(), fullScreenBounds.height()).build(); final Task task = new TaskBuilder(mSupervisor).setDisplay(display).build(); final Configuration inOutConfig = new Configuration(); final Configuration parentConfig = new Configuration(); @@ -438,11 +438,11 @@ public class TaskRecordTests extends ActivityTestsBase { @Test public void testInsetDisregardedWhenFreeformOverlapsNavBar() { - TaskDisplayArea taskDisplayArea = mService.mRootWindowContainer.getDefaultTaskDisplayArea(); + TaskDisplayArea taskDisplayArea = mAtm.mRootWindowContainer.getDefaultTaskDisplayArea(); Task stack = taskDisplayArea.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); DisplayInfo displayInfo = new DisplayInfo(); - mService.mContext.getDisplay().getDisplayInfo(displayInfo); + mAtm.mContext.getDisplay().getDisplayInfo(displayInfo); final int displayHeight = displayInfo.logicalHeight; final Task task = new TaskBuilder(mSupervisor).setStack(stack).build(); final Configuration inOutConfig = new Configuration(); @@ -514,23 +514,23 @@ public class TaskRecordTests extends ActivityTestsBase { info.packageName = DEFAULT_COMPONENT_PACKAGE_NAME; info.targetActivity = targetClassName; - final Task task = new Task(mService, 1 /* taskId */, info, intent, + final Task task = new Task(mAtm, 1 /* taskId */, info, intent, null /* voiceSession */, null /* voiceInteractor */, null /* taskDescriptor */, null /*stack*/); assertEquals("The alias activity component should be saved in task intent.", aliasClassName, task.intent.getComponent().getClassName()); - ActivityRecord aliasActivity = new ActivityBuilder(mService).setComponent( + ActivityRecord aliasActivity = new ActivityBuilder(mAtm).setComponent( aliasComponent).setTargetActivity(targetClassName).build(); assertEquals("Should be the same intent filter.", true, task.isSameIntentFilter(aliasActivity)); - ActivityRecord targetActivity = new ActivityBuilder(mService).setComponent( + ActivityRecord targetActivity = new ActivityBuilder(mAtm).setComponent( targetComponent).build(); assertEquals("Should be the same intent filter.", true, task.isSameIntentFilter(targetActivity)); - ActivityRecord defaultActivity = new ActivityBuilder(mService).build(); + ActivityRecord defaultActivity = new ActivityBuilder(mAtm).build(); assertEquals("Should not be the same intent filter.", false, task.isSameIntentFilter(defaultActivity)); } @@ -540,7 +540,7 @@ public class TaskRecordTests extends ActivityTestsBase { public void testFindRootIndex() { final Task task = getTestTask(); // Add an extra activity on top of the root one - new ActivityBuilder(mService).setTask(task).build(); + new ActivityBuilder(mAtm).setTask(task).build(); assertEquals("The root activity in the task must be reported.", task.getChildAt(0), task.getRootActivity( @@ -557,9 +557,9 @@ public class TaskRecordTests extends ActivityTestsBase { // Add extra two activities and mark the two on the bottom as finishing. final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.finishing = true; - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); activity1.finishing = true; - new ActivityBuilder(mService).setTask(task).build(); + new ActivityBuilder(mAtm).setTask(task).build(); assertEquals("The first non-finishing activity in the task must be reported.", task.getChildAt(2), task.getRootActivity( @@ -574,7 +574,7 @@ public class TaskRecordTests extends ActivityTestsBase { public void testFindRootIndex_effectiveRoot() { final Task task = getTestTask(); // Add an extra activity on top of the root one - new ActivityBuilder(mService).setTask(task).build(); + new ActivityBuilder(mAtm).setTask(task).build(); assertEquals("The root activity in the task must be reported.", task.getChildAt(0), task.getRootActivity( @@ -592,9 +592,9 @@ public class TaskRecordTests extends ActivityTestsBase { // one above as finishing. final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); activity1.finishing = true; - new ActivityBuilder(mService).setTask(task).build(); + new ActivityBuilder(mAtm).setTask(task).build(); assertEquals("The first non-finishing activity and non-relinquishing task identity " + "must be reported.", task.getChildAt(2), task.getRootActivity( @@ -626,7 +626,7 @@ public class TaskRecordTests extends ActivityTestsBase { // Set relinquishTaskIdentity for all activities in the task final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); activity1.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; assertEquals("The topmost activity in the task must be reported.", @@ -639,7 +639,7 @@ public class TaskRecordTests extends ActivityTestsBase { public void testGetRootActivity() { final Task task = getTestTask(); // Add an extra activity on top of the root one - new ActivityBuilder(mService).setTask(task).build(); + new ActivityBuilder(mAtm).setTask(task).build(); assertEquals("The root activity in the task must be reported.", task.getBottomMostActivity(), task.getRootActivity()); @@ -652,7 +652,7 @@ public class TaskRecordTests extends ActivityTestsBase { public void testGetRootActivity_finishing() { final Task task = getTestTask(); // Add an extra activity on top of the root one - new ActivityBuilder(mService).setTask(task).build(); + new ActivityBuilder(mAtm).setTask(task).build(); // Mark the root as finishing task.getBottomMostActivity().finishing = true; @@ -670,7 +670,7 @@ public class TaskRecordTests extends ActivityTestsBase { final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; // Add an extra activity on top of the root one. - new ActivityBuilder(mService).setTask(task).build(); + new ActivityBuilder(mAtm).setTask(task).build(); assertEquals("The root activity in the task must be reported.", task.getBottomMostActivity(), task.getRootActivity()); @@ -687,7 +687,7 @@ public class TaskRecordTests extends ActivityTestsBase { final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.finishing = true; // Add an extra activity on top of the root one and mark it as finishing - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); activity1.finishing = true; assertNull("No activity must be reported if all are finishing", task.getRootActivity()); @@ -703,7 +703,7 @@ public class TaskRecordTests extends ActivityTestsBase { final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.finishing = true; // Add an extra activity on top of the root one. - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); assertFalse("Finishing activity must not be the root of task", activity0.isRootOfTask()); assertTrue("Non-finishing activity must be the root of task", activity1.isRootOfTask()); @@ -720,7 +720,7 @@ public class TaskRecordTests extends ActivityTestsBase { final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.finishing = true; // Add an extra activity on top of the root one and mark it as finishing - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); activity1.finishing = true; assertTrue("Bottom activity must be the root of task", activity0.isRootOfTask()); @@ -756,9 +756,9 @@ public class TaskRecordTests extends ActivityTestsBase { final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.finishing = true; // Add an extra activity on top - this will be the new root - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); // Add one more on top - final ActivityRecord activity2 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity2 = new ActivityBuilder(mAtm).setTask(task).build(); assertEquals(task.mTaskId, ActivityRecord.getTaskForActivityLocked(activity0.appToken, true /* onlyRoot */)); @@ -779,9 +779,9 @@ public class TaskRecordTests extends ActivityTestsBase { final ActivityRecord activity0 = task.getBottomMostActivity(); activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; // Add an extra activity on top - this will be the new root - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); // Add one more on top - final ActivityRecord activity2 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity2 = new ActivityBuilder(mAtm).setTask(task).build(); assertEquals(task.mTaskId, ActivityRecord.getTaskForActivityLocked(activity0.appToken, true /* onlyRoot */)); @@ -803,11 +803,11 @@ public class TaskRecordTests extends ActivityTestsBase { activity0.finishing = true; // Add an extra activity on top of the root one and make it relinquish task identity - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); activity1.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY; // Add one more activity on top - final ActivityRecord activity2 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity2 = new ActivityBuilder(mAtm).setTask(task).build(); assertEquals(task.mTaskId, ActivityRecord.getTaskForActivityLocked(activity0.appToken, false /* onlyRoot */)); @@ -843,7 +843,7 @@ public class TaskRecordTests extends ActivityTestsBase { // Mark the bottom-most activity as finishing. activity0.finishing = true; // Add an extra activity on top of the root one - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); spyOn(task); task.updateEffectiveIntent(); @@ -863,7 +863,7 @@ public class TaskRecordTests extends ActivityTestsBase { // Mark the bottom-most activity as finishing. activity0.finishing = true; // Add an extra activity on top of the root one and make it relinquish task identity - final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build(); + final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build(); activity1.finishing = true; // Task must still update the intent using the root activity (preserving legacy behavior). @@ -874,7 +874,7 @@ public class TaskRecordTests extends ActivityTestsBase { @Test public void testSaveLaunchingStateWhenConfigurationChanged() { - LaunchParamsPersister persister = mService.mStackSupervisor.mLaunchParamsPersister; + LaunchParamsPersister persister = mAtm.mStackSupervisor.mLaunchParamsPersister; spyOn(persister); final Task task = getTestTask(); @@ -890,7 +890,7 @@ public class TaskRecordTests extends ActivityTestsBase { @Test public void testSaveLaunchingStateWhenClearingParent() { - LaunchParamsPersister persister = mService.mStackSupervisor.mLaunchParamsPersister; + LaunchParamsPersister persister = mAtm.mStackSupervisor.mLaunchParamsPersister; spyOn(persister); final Task task = getTestTask(); @@ -915,7 +915,7 @@ public class TaskRecordTests extends ActivityTestsBase { @Test public void testNotSaveLaunchingStateNonFreeformDisplay() { - LaunchParamsPersister persister = mService.mStackSupervisor.mLaunchParamsPersister; + LaunchParamsPersister persister = mAtm.mStackSupervisor.mLaunchParamsPersister; spyOn(persister); final Task task = getTestTask(); @@ -930,7 +930,7 @@ public class TaskRecordTests extends ActivityTestsBase { @Test public void testNotSaveLaunchingStateWhenNotFullscreenOrFreeformWindow() { - LaunchParamsPersister persister = mService.mStackSupervisor.mLaunchParamsPersister; + LaunchParamsPersister persister = mAtm.mStackSupervisor.mLaunchParamsPersister; spyOn(persister); final Task task = getTestTask(); @@ -983,7 +983,7 @@ public class TaskRecordTests extends ActivityTestsBase { private void testStackBoundsConfiguration(int windowingMode, Rect parentBounds, Rect bounds, Rect expectedConfigBounds) { - TaskDisplayArea taskDisplayArea = mService.mRootWindowContainer.getDefaultTaskDisplayArea(); + TaskDisplayArea taskDisplayArea = mAtm.mRootWindowContainer.getDefaultTaskDisplayArea(); Task stack = taskDisplayArea.createStack(windowingMode, ACTIVITY_TYPE_STANDARD, true /* onTop */); Task task = new TaskBuilder(mSupervisor).setStack(stack).build(); @@ -1019,12 +1019,12 @@ public class TaskRecordTests extends ActivityTestsBase { parser.setInput(reader); assertEquals(XmlPullParser.START_TAG, parser.next()); assertEquals(TASK_TAG, parser.getName()); - return Task.restoreFromXml(parser, mService.mStackSupervisor); + return Task.restoreFromXml(parser, mAtm.mStackSupervisor); } } private Task createTask(int taskId) { - return new Task(mService, taskId, new Intent(), null, null, null, + return new Task(mAtm, taskId, new Intent(), null, null, null, ActivityBuilder.getDefaultComponent(), null, false, false, false, 0, 10050, null, 0, false, null, 0, 0, 0, 0, null, null, 0, false, false, false, 0, 0, null /*ActivityInfo*/, null /*_voiceSession*/, null /*_voiceInteractor*/, diff --git a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java index 573e37a2d6b3..ed9e2707ae39 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java @@ -295,7 +295,7 @@ public class WallpaperControllerTests extends WindowTestsBase { } private WindowState createWallpaperTargetWindow(DisplayContent dc) { - final ActivityRecord homeActivity = new ActivityTestsBase.ActivityBuilder(mWm.mAtmService) + final ActivityRecord homeActivity = new ActivityBuilder(mWm.mAtmService) .setStack(dc.getDefaultTaskDisplayArea().getRootHomeTask()) .setCreateTask(true) .build(); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java index 3ebc28886377..8ac44f2afcfd 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java @@ -830,7 +830,7 @@ public class WindowContainerTests extends WindowTestsBase { final DisplayContent displayContent = createNewDisplay(); // Do not reparent activity to default display when removing the display. doReturn(true).when(displayContent).shouldDestroyContentOnRemove(); - final ActivityRecord r = new ActivityTestsBase.StackBuilder(mWm.mRoot) + final ActivityRecord r = new StackBuilder(mWm.mRoot) .setDisplay(displayContent).build().getTopMostActivity(); // Add a window and make the activity animating so the removal of activity is deferred. createWindow(null, TYPE_BASE_APPLICATION, r, "win"); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java index 800a5d42ce09..8cfa4f00c8b6 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java @@ -321,7 +321,7 @@ public class WindowOrganizerTests extends WindowTestsBase { @Test public void testTaskTransaction() { removeGlobalMinSizeRestriction(); - final Task stack = new ActivityTestsBase.StackBuilder(mWm.mRoot) + final Task stack = new StackBuilder(mWm.mRoot) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); final Task task = stack.getTopMostTask(); testTransaction(task); @@ -330,7 +330,7 @@ public class WindowOrganizerTests extends WindowTestsBase { @Test public void testStackTransaction() { removeGlobalMinSizeRestriction(); - final Task stack = new ActivityTestsBase.StackBuilder(mWm.mRoot) + final Task stack = new StackBuilder(mWm.mRoot) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); StackInfo info = mWm.mAtmService.getStackInfo(WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD); @@ -355,7 +355,7 @@ public class WindowOrganizerTests extends WindowTestsBase { @Test public void testSetWindowingMode() { - final Task stack = new ActivityTestsBase.StackBuilder(mWm.mRoot) + final Task stack = new StackBuilder(mWm.mRoot) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); testSetWindowingMode(stack); @@ -389,7 +389,7 @@ public class WindowOrganizerTests extends WindowTestsBase { @Test public void testContainerFocusableChanges() { removeGlobalMinSizeRestriction(); - final Task stack = new ActivityTestsBase.StackBuilder(mWm.mRoot) + final Task stack = new StackBuilder(mWm.mRoot) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); final Task task = stack.getTopMostTask(); WindowContainerTransaction t = new WindowContainerTransaction(); @@ -405,7 +405,7 @@ public class WindowOrganizerTests extends WindowTestsBase { @Test public void testContainerHiddenChanges() { removeGlobalMinSizeRestriction(); - final Task stack = new ActivityTestsBase.StackBuilder(mWm.mRoot) + final Task stack = new StackBuilder(mWm.mRoot) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); WindowContainerTransaction t = new WindowContainerTransaction(); assertTrue(stack.shouldBeVisible(null)); @@ -420,7 +420,7 @@ public class WindowOrganizerTests extends WindowTestsBase { @Test public void testOverrideConfigSize() { removeGlobalMinSizeRestriction(); - final Task stack = new ActivityTestsBase.StackBuilder(mWm.mRoot) + final Task stack = new StackBuilder(mWm.mRoot) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); final Task task = stack.getTopMostTask(); WindowContainerTransaction t = new WindowContainerTransaction(); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerMapTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerMapTests.java index cb7bff3a4f15..c2ee0798fd07 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerMapTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerMapTests.java @@ -31,6 +31,7 @@ import androidx.test.filters.SmallTest; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; /** * Tests for the {@link WindowProcessControllerMap} class. @@ -40,7 +41,8 @@ import org.junit.Test; */ @SmallTest @Presubmit -public class WindowProcessControllerMapTests extends ActivityTestsBase { +@RunWith(WindowTestRunner.class) +public class WindowProcessControllerMapTests extends WindowTestsBase { private static final int FAKE_UID1 = 666; private static final int FAKE_UID2 = 667; @@ -60,23 +62,23 @@ public class WindowProcessControllerMapTests extends ActivityTestsBase { public void setUp() throws Exception { mProcessMap = new WindowProcessControllerMap(); pid1uid1 = new WindowProcessController( - mService, mService.mContext.getApplicationInfo(), "fakepid1fakeuid1", FAKE_UID1, + mAtm, mAtm.mContext.getApplicationInfo(), "fakepid1fakeuid1", FAKE_UID1, UserHandle.getUserId(12345), mock(Object.class), mock(WindowProcessListener.class)); pid1uid1.setPid(FAKE_PID1); pid1uid2 = new WindowProcessController( - mService, mService.mContext.getApplicationInfo(), "fakepid1fakeuid2", FAKE_UID2, + mAtm, mAtm.mContext.getApplicationInfo(), "fakepid1fakeuid2", FAKE_UID2, UserHandle.getUserId(12345), mock(Object.class), mock(WindowProcessListener.class)); pid1uid2.setPid(FAKE_PID1); pid2uid1 = new WindowProcessController( - mService, mService.mContext.getApplicationInfo(), "fakepid2fakeuid1", FAKE_UID1, + mAtm, mAtm.mContext.getApplicationInfo(), "fakepid2fakeuid1", FAKE_UID1, UserHandle.getUserId(12345), mock(Object.class), mock(WindowProcessListener.class)); pid2uid1.setPid(FAKE_PID2); pid3uid1 = new WindowProcessController( - mService, mService.mContext.getApplicationInfo(), "fakepid3fakeuid1", FAKE_UID1, + mAtm, mAtm.mContext.getApplicationInfo(), "fakepid3fakeuid1", FAKE_UID1, UserHandle.getUserId(12345), mock(Object.class), mock(WindowProcessListener.class)); pid3uid1.setPid(FAKE_PID3); pid4uid2 = new WindowProcessController( - mService, mService.mContext.getApplicationInfo(), "fakepid4fakeuid2", FAKE_UID2, + mAtm, mAtm.mContext.getApplicationInfo(), "fakepid4fakeuid2", FAKE_UID2, UserHandle.getUserId(12345), mock(Object.class), mock(WindowProcessListener.class)); pid4uid2.setPid(FAKE_PID4); } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java index cdf8eb4faf1d..2f736555ae1b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java @@ -50,7 +50,7 @@ import org.mockito.Mockito; */ @Presubmit @RunWith(WindowTestRunner.class) -public class WindowProcessControllerTests extends ActivityTestsBase { +public class WindowProcessControllerTests extends WindowTestsBase { WindowProcessController mWpc; WindowProcessListener mMockListener; @@ -62,7 +62,7 @@ public class WindowProcessControllerTests extends ActivityTestsBase { ApplicationInfo info = mock(ApplicationInfo.class); info.packageName = "test.package.name"; mWpc = new WindowProcessController( - mService, info, null, 0, -1, null, mMockListener); + mAtm, info, null, 0, -1, null, mMockListener); mWpc.setThread(mock(IApplicationThread.class)); } @@ -108,7 +108,7 @@ public class WindowProcessControllerTests extends ActivityTestsBase { public void testSetRunningRecentsAnimation() { mWpc.setRunningRecentsAnimation(true); mWpc.setRunningRecentsAnimation(false); - waitHandlerIdle(mService.mH); + waitHandlerIdle(mAtm.mH); InOrder orderVerifier = Mockito.inOrder(mMockListener); orderVerifier.verify(mMockListener).setRunningRemoteAnimation(eq(true)); @@ -119,7 +119,7 @@ public class WindowProcessControllerTests extends ActivityTestsBase { public void testSetRunningRemoteAnimation() { mWpc.setRunningRemoteAnimation(true); mWpc.setRunningRemoteAnimation(false); - waitHandlerIdle(mService.mH); + waitHandlerIdle(mAtm.mH); InOrder orderVerifier = Mockito.inOrder(mMockListener); orderVerifier.verify(mMockListener).setRunningRemoteAnimation(eq(true)); @@ -133,7 +133,7 @@ public class WindowProcessControllerTests extends ActivityTestsBase { mWpc.setRunningRecentsAnimation(false); mWpc.setRunningRemoteAnimation(false); - waitHandlerIdle(mService.mH); + waitHandlerIdle(mAtm.mH); InOrder orderVerifier = Mockito.inOrder(mMockListener); orderVerifier.verify(mMockListener, times(3)).setRunningRemoteAnimation(eq(true)); @@ -147,12 +147,12 @@ public class WindowProcessControllerTests extends ActivityTestsBase { assertEquals(INVALID_DISPLAY, mWpc.getDisplayId()); // Register to a new display as a listener. - final DisplayContent display = new TestDisplayContent.Builder(mService, 2000, 1000) + final DisplayContent display = new TestDisplayContent.Builder(mAtm, 2000, 1000) .setDensityDpi(300).setPosition(DisplayContent.POSITION_TOP).build(); mWpc.registerDisplayConfigurationListener(display); assertEquals(display.mDisplayId, mWpc.getDisplayId()); - final Configuration expectedConfig = mService.mRootWindowContainer.getConfiguration(); + final Configuration expectedConfig = mAtm.mRootWindowContainer.getConfiguration(); expectedConfig.updateFrom(display.getConfiguration()); assertEquals(expectedConfig, mWpc.getConfiguration()); } @@ -184,15 +184,15 @@ public class WindowProcessControllerTests extends ActivityTestsBase { @Test public void testActivityNotOverridingSystemUiProcessConfig() { - final ComponentName systemUiServiceComponent = mService.getSysUiServiceComponentLocked(); + final ComponentName systemUiServiceComponent = mAtm.getSysUiServiceComponentLocked(); ApplicationInfo applicationInfo = mock(ApplicationInfo.class); applicationInfo.packageName = systemUiServiceComponent.getPackageName(); WindowProcessController wpc = new WindowProcessController( - mService, applicationInfo, null, 0, -1, null, mMockListener); + mAtm, applicationInfo, null, 0, -1, null, mMockListener); wpc.setThread(mock(IApplicationThread.class)); - final ActivityRecord activity = new ActivityBuilder(mService) + final ActivityRecord activity = new ActivityBuilder(mAtm) .setCreateTask(true) .setUseProcess(wpc) .build(); @@ -209,7 +209,7 @@ public class WindowProcessControllerTests extends ActivityTestsBase { // Notify WPC that this process has started an IME service. mWpc.onServiceStarted(serviceInfo); - final ActivityRecord activity = new ActivityBuilder(mService) + final ActivityRecord activity = new ActivityBuilder(mAtm) .setCreateTask(true) .setUseProcess(mWpc) .build(); @@ -226,7 +226,7 @@ public class WindowProcessControllerTests extends ActivityTestsBase { // Notify WPC that this process has started an ally service. mWpc.onServiceStarted(serviceInfo); - final ActivityRecord activity = new ActivityBuilder(mService) + final ActivityRecord activity = new ActivityBuilder(mAtm) .setCreateTask(true) .setUseProcess(mWpc) .build(); @@ -243,7 +243,7 @@ public class WindowProcessControllerTests extends ActivityTestsBase { // Notify WPC that this process has started an voice interaction service. mWpc.onServiceStarted(serviceInfo); - final ActivityRecord activity = new ActivityBuilder(mService) + final ActivityRecord activity = new ActivityBuilder(mAtm) .setCreateTask(true) .setUseProcess(mWpc) .build(); @@ -254,7 +254,7 @@ public class WindowProcessControllerTests extends ActivityTestsBase { } private TestDisplayContent createTestDisplayContentInContainer() { - return new TestDisplayContent.Builder(mService, 1000, 1500).build(); + return new TestDisplayContent.Builder(mAtm, 1000, 1500).build(); } private static void invertOrientation(Configuration config) { diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java index 2502932c5421..0180d87290a1 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java @@ -25,7 +25,7 @@ import android.os.IBinder; import android.view.IWindow; import android.view.WindowManager; -import com.android.server.wm.ActivityTestsBase.ActivityBuilder; +import com.android.server.wm.WindowTestsBase.ActivityBuilder; /** * A collection of static functions that provide access to WindowManager related test functionality. @@ -34,7 +34,7 @@ class WindowTestUtils { /** Creates a {@link Task} and adds it to the specified {@link Task}. */ static Task createTaskInStack(WindowManagerService service, Task stack, int userId) { - final Task task = new ActivityTestsBase.TaskBuilder(stack.mStackSupervisor) + final Task task = new WindowTestsBase.TaskBuilder(stack.mStackSupervisor) .setUserId(userId) .setStack(stack) .build(); @@ -49,7 +49,7 @@ class WindowTestUtils { } static ActivityRecord createTestActivityRecord(Task stack) { - final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(stack.mAtmService) + final ActivityRecord activity = new ActivityBuilder(stack.mAtmService) .setStack(stack) .setCreateTask(true) .build(); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java index dc388833f338..ec19a58b17c4 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java @@ -18,7 +18,13 @@ package com.android.server.wm; import static android.app.AppOpsManager.OP_NONE; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; +import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; +import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; +import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; +import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE; +import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; import static android.os.Process.SYSTEM_UID; import static android.view.View.VISIBLE; import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; @@ -37,22 +43,44 @@ import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; +import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; +import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; +import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; +import static com.android.server.wm.WindowContainer.POSITION_BOTTOM; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.mock; import android.annotation.IntDef; +import android.app.ActivityManager; +import android.app.ActivityOptions; +import android.app.IApplicationThread; +import android.app.WindowConfiguration; +import android.content.ComponentName; +import android.content.Context; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.res.Configuration; import android.hardware.display.DisplayManager; +import android.os.Build; +import android.os.Bundle; import android.os.RemoteException; import android.os.UserHandle; +import android.service.voice.IVoiceInteractionSession; import android.view.Display; import android.view.DisplayInfo; import android.view.IDisplayWindowInsetsController; import android.view.IWindow; import android.view.InsetsSourceControl; import android.view.InsetsState; +import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; import android.view.View; import android.view.WindowManager; +import android.window.ITaskOrganizer; +import android.window.WindowContainerToken; import com.android.internal.util.ArrayUtils; import com.android.server.AttributeCache; @@ -68,11 +96,20 @@ import java.lang.annotation.Target; /** Common base class for window manager unit test classes. */ class WindowTestsBase extends SystemServiceTestsBase { + final Context mContext = getInstrumentation().getTargetContext(); + + // Default package name + static final String DEFAULT_COMPONENT_PACKAGE_NAME = "com.foo"; + + // Default base activity name + private static final String DEFAULT_COMPONENT_CLASS_NAME = ".BarActivity"; + ActivityTaskManagerService mAtm; + RootWindowContainer mRootWindowContainer; + ActivityStackSupervisor mSupervisor; WindowManagerService mWm; private final IWindow mIWindow = new TestIWindow(); private Session mMockSession; - static int sNextStackId = 1000; DisplayInfo mDisplayInfo = new DisplayInfo(); DisplayContent mDefaultDisplay; @@ -107,6 +144,9 @@ class WindowTestsBase extends SystemServiceTestsBase { @Before public void setUpBase() { + mAtm = mSystemServicesTestRule.getActivityTaskManagerService(); + mSupervisor = mAtm.mStackSupervisor; + mRootWindowContainer = mAtm.mRootWindowContainer; mWm = mSystemServicesTestRule.getWindowManagerService(); SystemServicesTestRule.checkHoldsLock(mWm.mGlobalLock); @@ -114,7 +154,7 @@ class WindowTestsBase extends SystemServiceTestsBase { mTransaction = mSystemServicesTestRule.mTransaction; mMockSession = mock(Session.class); - getInstrumentation().getTargetContext().getSystemService(DisplayManager.class) + mContext.getSystemService(DisplayManager.class) .getDisplay(Display.DEFAULT_DISPLAY).getDisplayInfo(mDisplayInfo); // Only create an additional test display for annotated test class/method because it may @@ -328,7 +368,7 @@ class WindowTestsBase extends SystemServiceTestsBase { } Task createTaskStackOnDisplay(int windowingMode, int activityType, DisplayContent dc) { - return new ActivityTestsBase.StackBuilder(dc.mWmService.mRoot) + return new StackBuilder(dc.mWmService.mRoot) .setDisplay(dc) .setWindowingMode(windowingMode) .setActivityType(activityType) @@ -339,7 +379,7 @@ class WindowTestsBase extends SystemServiceTestsBase { Task createTaskStackOnTaskDisplayArea(int windowingMode, int activityType, TaskDisplayArea tda) { - return new ActivityTestsBase.StackBuilder(tda.mWmService.mRoot) + return new StackBuilder(tda.mWmService.mRoot) .setTaskDisplayArea(tda) .setWindowingMode(windowingMode) .setActivityType(activityType) @@ -371,7 +411,7 @@ class WindowTestsBase extends SystemServiceTestsBase { /** Creates a {@link DisplayContent} and adds it to the system. */ private DisplayContent createNewDisplay(DisplayInfo info, boolean supportIme) { final DisplayContent display = - new TestDisplayContent.Builder(mWm.mAtmService, info).build(); + new TestDisplayContent.Builder(mAtm, info).build(); final DisplayContent dc = display.mDisplayContent; // this display can show IME. dc.mWmService.mDisplayWindowSettings.setShouldShowImeLocked(dc, supportIme); @@ -435,11 +475,6 @@ class WindowTestsBase extends SystemServiceTestsBase { }; } - /** Sets the default minimum task size to 1 so that tests can use small task sizes */ - void removeGlobalMinSizeRestriction() { - mWm.mAtmService.mRootWindowContainer.mDefaultMinSizeOfResizeableTaskDp = 1; - } - /** * Avoids rotating screen disturbed by some conditions. It is usually used for the default * display that is not the instance of {@link TestDisplayContent} (it bypasses the conditions). @@ -501,4 +536,523 @@ class WindowTestsBase extends SystemServiceTestsBase { boolean addAllCommonWindows() default false; @CommonTypes int[] addWindows() default {}; } + + /** Creates and adds a {@link TestDisplayContent} to supervisor at the given position. */ + TestDisplayContent addNewDisplayContentAt(int position) { + return new TestDisplayContent.Builder(mAtm, 1000, 1500).setPosition(position).build(); + } + + /** Sets the default minimum task size to 1 so that tests can use small task sizes */ + public void removeGlobalMinSizeRestriction() { + mAtm.mRootWindowContainer.mDefaultMinSizeOfResizeableTaskDp = 1; + } + + /** + * Builder for creating new activities. + */ + protected static class ActivityBuilder { + // An id appended to the end of the component name to make it unique + private static int sCurrentActivityId = 0; + + private final ActivityTaskManagerService mService; + + private ComponentName mComponent; + private String mTargetActivity; + private Task mTask; + private String mProcessName = "name"; + private String mAffinity; + private int mUid = 12345; + private boolean mCreateTask; + private Task mStack; + private int mActivityFlags; + private int mLaunchMode; + private int mResizeMode = RESIZE_MODE_RESIZEABLE; + private float mMaxAspectRatio; + private int mScreenOrientation = SCREEN_ORIENTATION_UNSPECIFIED; + private boolean mLaunchTaskBehind; + private int mConfigChanges; + private int mLaunchedFromPid; + private int mLaunchedFromUid; + private WindowProcessController mWpc; + private Bundle mIntentExtras; + + ActivityBuilder(ActivityTaskManagerService service) { + mService = service; + } + + ActivityBuilder setComponent(ComponentName component) { + mComponent = component; + return this; + } + + ActivityBuilder setTargetActivity(String targetActivity) { + mTargetActivity = targetActivity; + return this; + } + + ActivityBuilder setIntentExtras(Bundle extras) { + mIntentExtras = extras; + return this; + } + + static ComponentName getDefaultComponent() { + return ComponentName.createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, + DEFAULT_COMPONENT_PACKAGE_NAME); + } + + ActivityBuilder setTask(Task task) { + mTask = task; + return this; + } + + ActivityBuilder setActivityFlags(int flags) { + mActivityFlags = flags; + return this; + } + + ActivityBuilder setLaunchMode(int launchMode) { + mLaunchMode = launchMode; + return this; + } + + ActivityBuilder setStack(Task stack) { + mStack = stack; + return this; + } + + ActivityBuilder setCreateTask(boolean createTask) { + mCreateTask = createTask; + return this; + } + + ActivityBuilder setProcessName(String name) { + mProcessName = name; + return this; + } + + ActivityBuilder setUid(int uid) { + mUid = uid; + return this; + } + + ActivityBuilder setResizeMode(int resizeMode) { + mResizeMode = resizeMode; + return this; + } + + ActivityBuilder setMaxAspectRatio(float maxAspectRatio) { + mMaxAspectRatio = maxAspectRatio; + return this; + } + + ActivityBuilder setScreenOrientation(int screenOrientation) { + mScreenOrientation = screenOrientation; + return this; + } + + ActivityBuilder setLaunchTaskBehind(boolean launchTaskBehind) { + mLaunchTaskBehind = launchTaskBehind; + return this; + } + + ActivityBuilder setConfigChanges(int configChanges) { + mConfigChanges = configChanges; + return this; + } + + ActivityBuilder setLaunchedFromPid(int pid) { + mLaunchedFromPid = pid; + return this; + } + + ActivityBuilder setLaunchedFromUid(int uid) { + mLaunchedFromUid = uid; + return this; + } + + ActivityBuilder setUseProcess(WindowProcessController wpc) { + mWpc = wpc; + return this; + } + + ActivityBuilder setAffinity(String affinity) { + mAffinity = affinity; + return this; + } + + ActivityRecord build() { + SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock); + try { + mService.deferWindowLayout(); + return buildInner(); + } finally { + mService.continueWindowLayout(); + } + } + + ActivityRecord buildInner() { + if (mComponent == null) { + final int id = sCurrentActivityId++; + mComponent = ComponentName.createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, + DEFAULT_COMPONENT_CLASS_NAME + id); + } + + if (mCreateTask) { + mTask = new TaskBuilder(mService.mStackSupervisor) + .setComponent(mComponent) + .setStack(mStack).build(); + } else if (mTask == null && mStack != null && DisplayContent.alwaysCreateStack( + mStack.getWindowingMode(), mStack.getActivityType())) { + // The stack can be the task root. + mTask = mStack; + } + + Intent intent = new Intent(); + intent.setComponent(mComponent); + if (mIntentExtras != null) { + intent.putExtras(mIntentExtras); + } + final ActivityInfo aInfo = new ActivityInfo(); + aInfo.applicationInfo = new ApplicationInfo(); + aInfo.applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT; + aInfo.applicationInfo.packageName = mComponent.getPackageName(); + aInfo.applicationInfo.uid = mUid; + aInfo.processName = mProcessName; + aInfo.packageName = mComponent.getPackageName(); + aInfo.name = mComponent.getClassName(); + if (mTargetActivity != null) { + aInfo.targetActivity = mTargetActivity; + } + aInfo.flags |= mActivityFlags; + aInfo.launchMode = mLaunchMode; + aInfo.resizeMode = mResizeMode; + aInfo.maxAspectRatio = mMaxAspectRatio; + aInfo.screenOrientation = mScreenOrientation; + aInfo.configChanges |= mConfigChanges; + aInfo.taskAffinity = mAffinity; + + ActivityOptions options = null; + if (mLaunchTaskBehind) { + options = ActivityOptions.makeTaskLaunchBehind(); + } + + final ActivityRecord activity = new ActivityRecord(mService, null /* caller */, + mLaunchedFromPid /* launchedFromPid */, mLaunchedFromUid /* launchedFromUid */, + null, null, intent, null, aInfo /*aInfo*/, new Configuration(), + null /* resultTo */, null /* resultWho */, 0 /* reqCode */, + false /*componentSpecified*/, false /* rootVoiceInteraction */, + mService.mStackSupervisor, options, null /* sourceRecord */); + spyOn(activity); + if (mTask != null) { + // fullscreen value is normally read from resources in ctor, so for testing we need + // to set it somewhere else since we can't mock resources. + doReturn(true).when(activity).occludesParent(); + doReturn(true).when(activity).fillsParent(); + mTask.addChild(activity); + // Make visible by default... + activity.setVisible(true); + } + + final WindowProcessController wpc; + if (mWpc != null) { + wpc = mWpc; + } else { + wpc = new WindowProcessController(mService, + aInfo.applicationInfo, mProcessName, mUid, + UserHandle.getUserId(12345), mock(Object.class), + mock(WindowProcessListener.class)); + wpc.setThread(mock(IApplicationThread.class)); + } + wpc.setThread(mock(IApplicationThread.class)); + activity.setProcess(wpc); + doReturn(wpc).when(mService).getProcessController( + activity.processName, activity.info.applicationInfo.uid); + + // Resume top activities to make sure all other signals in the system are connected. + mService.mRootWindowContainer.resumeFocusedStacksTopActivities(); + return activity; + } + } + + /** + * Builder for creating new tasks. + */ + protected static class TaskBuilder { + private final ActivityStackSupervisor mSupervisor; + + private ComponentName mComponent; + private String mPackage; + private int mFlags = 0; + // Task id 0 is reserved in ARC for the home app. + private int mTaskId = SystemServicesTestRule.sNextTaskId++; + private int mUserId = 0; + private IVoiceInteractionSession mVoiceSession; + private boolean mCreateStack = true; + + private Task mStack; + private TaskDisplayArea mTaskDisplayArea; + + TaskBuilder(ActivityStackSupervisor supervisor) { + mSupervisor = supervisor; + } + + TaskBuilder setComponent(ComponentName component) { + mComponent = component; + return this; + } + + TaskBuilder setPackage(String packageName) { + mPackage = packageName; + return this; + } + + /** + * Set to {@code true} by default, set to {@code false} to prevent the task from + * automatically creating a parent stack. + */ + TaskBuilder setCreateStack(boolean createStack) { + mCreateStack = createStack; + return this; + } + + TaskBuilder setVoiceSession(IVoiceInteractionSession session) { + mVoiceSession = session; + return this; + } + + TaskBuilder setFlags(int flags) { + mFlags = flags; + return this; + } + + TaskBuilder setTaskId(int taskId) { + mTaskId = taskId; + return this; + } + + TaskBuilder setUserId(int userId) { + mUserId = userId; + return this; + } + + TaskBuilder setStack(Task stack) { + mStack = stack; + return this; + } + + TaskBuilder setDisplay(DisplayContent display) { + mTaskDisplayArea = display.getDefaultTaskDisplayArea(); + return this; + } + + Task build() { + SystemServicesTestRule.checkHoldsLock(mSupervisor.mService.mGlobalLock); + + if (mStack == null && mCreateStack) { + TaskDisplayArea displayArea = mTaskDisplayArea != null ? mTaskDisplayArea + : mSupervisor.mRootWindowContainer.getDefaultTaskDisplayArea(); + mStack = displayArea.createStack( + WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); + spyOn(mStack); + } + + final ActivityInfo aInfo = new ActivityInfo(); + aInfo.applicationInfo = new ApplicationInfo(); + aInfo.applicationInfo.packageName = mPackage; + + Intent intent = new Intent(); + if (mComponent == null) { + mComponent = ComponentName.createRelative(DEFAULT_COMPONENT_PACKAGE_NAME, + DEFAULT_COMPONENT_CLASS_NAME); + } + + intent.setComponent(mComponent); + intent.setFlags(mFlags); + + final Task task = new Task(mSupervisor.mService, mTaskId, aInfo, + intent /*intent*/, mVoiceSession, null /*_voiceInteractor*/, + null /*taskDescription*/, mStack); + spyOn(task); + task.mUserId = mUserId; + + if (mStack != null) { + mStack.moveToFront("test"); + mStack.addChild(task, true, true); + } + + return task; + } + } + + static class StackBuilder { + private final RootWindowContainer mRootWindowContainer; + private DisplayContent mDisplay; + private TaskDisplayArea mTaskDisplayArea; + private int mStackId = -1; + private int mWindowingMode = WINDOWING_MODE_UNDEFINED; + private int mActivityType = ACTIVITY_TYPE_STANDARD; + private boolean mOnTop = true; + private boolean mCreateActivity = true; + private ActivityInfo mInfo; + private Intent mIntent; + + StackBuilder(RootWindowContainer root) { + mRootWindowContainer = root; + mDisplay = mRootWindowContainer.getDefaultDisplay(); + mTaskDisplayArea = mDisplay.getDefaultTaskDisplayArea(); + } + + StackBuilder setWindowingMode(int windowingMode) { + mWindowingMode = windowingMode; + return this; + } + + StackBuilder setActivityType(int activityType) { + mActivityType = activityType; + return this; + } + + StackBuilder setStackId(int stackId) { + mStackId = stackId; + return this; + } + + /** + * Set the parent {@link DisplayContent} and use the default task display area. Overrides + * the task display area, if was set before. + */ + StackBuilder setDisplay(DisplayContent display) { + mDisplay = display; + mTaskDisplayArea = mDisplay.getDefaultTaskDisplayArea(); + return this; + } + + /** Set the parent {@link TaskDisplayArea}. Overrides the display, if was set before. */ + StackBuilder setTaskDisplayArea(TaskDisplayArea taskDisplayArea) { + mTaskDisplayArea = taskDisplayArea; + mDisplay = mTaskDisplayArea.mDisplayContent; + return this; + } + + StackBuilder setOnTop(boolean onTop) { + mOnTop = onTop; + return this; + } + + StackBuilder setCreateActivity(boolean createActivity) { + mCreateActivity = createActivity; + return this; + } + + StackBuilder setActivityInfo(ActivityInfo info) { + mInfo = info; + return this; + } + + StackBuilder setIntent(Intent intent) { + mIntent = intent; + return this; + } + + Task build() { + SystemServicesTestRule.checkHoldsLock(mRootWindowContainer.mWmService.mGlobalLock); + + final int stackId = mStackId >= 0 ? mStackId : mTaskDisplayArea.getNextStackId(); + final Task stack = mTaskDisplayArea.createStackUnchecked( + mWindowingMode, mActivityType, stackId, mOnTop, mInfo, mIntent, + false /* createdByOrganizer */); + final ActivityStackSupervisor supervisor = mRootWindowContainer.mStackSupervisor; + + if (mCreateActivity) { + new ActivityBuilder(supervisor.mService) + .setCreateTask(true) + .setStack(stack) + .build(); + if (mOnTop) { + // We move the task to front again in order to regain focus after activity + // added to the stack. Or {@link DisplayContent#mPreferredTopFocusableStack} + // could be other stacks (e.g. home stack). + stack.moveToFront("createActivityStack"); + } else { + stack.moveToBack("createActivityStack", null); + } + } + spyOn(stack); + + doNothing().when(stack).startActivityLocked( + any(), any(), anyBoolean(), anyBoolean(), any()); + + return stack; + } + + } + + static class TestSplitOrganizer extends ITaskOrganizer.Stub { + final ActivityTaskManagerService mService; + Task mPrimary; + Task mSecondary; + boolean mInSplit = false; + // moves everything to secondary. Most tests expect this since sysui usually does it. + boolean mMoveToSecondaryOnEnter = true; + int mDisplayId; + TestSplitOrganizer(ActivityTaskManagerService service, int displayId) { + mService = service; + mDisplayId = displayId; + mService.mTaskOrganizerController.registerTaskOrganizer(this, + WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); + mService.mTaskOrganizerController.registerTaskOrganizer(this, + WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); + WindowContainerToken primary = mService.mTaskOrganizerController.createRootTask( + displayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).token; + mPrimary = WindowContainer.fromBinder(primary.asBinder()).asTask(); + WindowContainerToken secondary = mService.mTaskOrganizerController.createRootTask( + displayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token; + mSecondary = WindowContainer.fromBinder(secondary.asBinder()).asTask(); + } + TestSplitOrganizer(ActivityTaskManagerService service) { + this(service, + service.mStackSupervisor.mRootWindowContainer.getDefaultDisplay().mDisplayId); + } + public void setMoveToSecondaryOnEnter(boolean move) { + mMoveToSecondaryOnEnter = move; + } + @Override + public void onTaskAppeared(ActivityManager.RunningTaskInfo info, SurfaceControl leash) { + } + @Override + public void onTaskVanished(ActivityManager.RunningTaskInfo info) { + } + @Override + public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) { + if (mInSplit) { + return; + } + if (info.topActivityType == ACTIVITY_TYPE_UNDEFINED) { + // Not populated + return; + } + if (info.configuration.windowConfiguration.getWindowingMode() + != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) { + return; + } + mInSplit = true; + if (!mMoveToSecondaryOnEnter) { + return; + } + mService.mTaskOrganizerController.setLaunchRoot(mDisplayId, + mSecondary.mRemoteToken.toWindowContainerToken()); + DisplayContent dc = mService.mRootWindowContainer.getDisplayContent(mDisplayId); + dc.forAllTaskDisplayAreas(taskDisplayArea -> { + for (int sNdx = taskDisplayArea.getStackCount() - 1; sNdx >= 0; --sNdx) { + final Task stack = taskDisplayArea.getStackAt(sNdx); + if (!WindowConfiguration.isSplitScreenWindowingMode(stack.getWindowingMode())) { + stack.reparent(mSecondary, POSITION_BOTTOM); + } + } + }); + } + @Override + public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo taskInfo) { + } + } } |