Merge changes from topic "launch_params_modifier_cleanup"

* changes:
  Some cleanup around LaunchParamsModifier.
  Remove warning about cases where root is null
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index ecbf266..1b0bec5 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1883,7 +1883,7 @@
         }
 
         mSupervisor.getLaunchParamsController().calculate(targetTask, r.info.windowLayout, r,
-                sourceRecord, mOptions, PHASE_BOUNDS, mLaunchParams, mRequest);
+                sourceRecord, mOptions, mRequest, PHASE_BOUNDS, mLaunchParams);
         mPreferredTaskDisplayArea = mLaunchParams.hasPreferredTaskDisplayArea()
                 ? mLaunchParams.mPreferredTaskDisplayArea
                 : mRootWindowContainer.getDefaultTaskDisplayArea();
@@ -2274,7 +2274,7 @@
         // Preferred display id is the only state we need for now and it could be updated again
         // after we located a reusable task (which might be resided in another display).
         mSupervisor.getLaunchParamsController().calculate(inTask, r.info.windowLayout, r,
-                sourceRecord, options, PHASE_DISPLAY, mLaunchParams, mRequest);
+                sourceRecord, options, mRequest, PHASE_DISPLAY, mLaunchParams);
         mPreferredTaskDisplayArea = mLaunchParams.hasPreferredTaskDisplayArea()
                 ? mLaunchParams.mPreferredTaskDisplayArea
                 : mRootWindowContainer.getDefaultTaskDisplayArea();
diff --git a/services/core/java/com/android/server/wm/LaunchParamsController.java b/services/core/java/com/android/server/wm/LaunchParamsController.java
index 8745e95..35653f9 100644
--- a/services/core/java/com/android/server/wm/LaunchParamsController.java
+++ b/services/core/java/com/android/server/wm/LaunchParamsController.java
@@ -73,11 +73,12 @@
      * @param activity  The {@link ActivityRecord} currently being positioned.
      * @param source    The {@link ActivityRecord} from which activity was started from.
      * @param options   The {@link ActivityOptions} specified for the activity.
-     * @param result    The resulting params.
      * @param request   The optional request from the activity starter.
+     * @param phase     The {@link LaunchParamsModifier.Phase} that the resolution should finish.
+     * @param result    The resulting params.
      */
     void calculate(Task task, WindowLayout layout, ActivityRecord activity, ActivityRecord source,
-            ActivityOptions options, int phase, LaunchParams result, @Nullable Request request) {
+            ActivityOptions options, @Nullable Request request, int phase, LaunchParams result) {
         result.reset();
 
         if (task != null || activity != null) {
@@ -92,8 +93,8 @@
             mTmpResult.reset();
             final LaunchParamsModifier modifier = mModifiers.get(i);
 
-            switch(modifier.onCalculate(task, layout, activity, source, options, phase, mTmpCurrent,
-                    mTmpResult, request)) {
+            switch(modifier.onCalculate(task, layout, activity, source, options, request, phase,
+                    mTmpCurrent, mTmpResult)) {
                 case RESULT_SKIP:
                     // Do not apply any results when we are told to skip
                     continue;
@@ -130,8 +131,8 @@
 
     boolean layoutTask(Task task, WindowLayout layout, ActivityRecord activity,
             ActivityRecord source, ActivityOptions options) {
-        calculate(task, layout, activity, source, options, PHASE_BOUNDS, mTmpParams,
-                null /* request */);
+        calculate(task, layout, activity, source, options, null /* request */, PHASE_BOUNDS,
+                mTmpParams);
 
         // No changes, return.
         if (mTmpParams.isEmpty()) {
@@ -308,17 +309,17 @@
          *                      launched should have this be non-null.
          * @param source        the Activity that launched a new task. Could be {@code null}.
          * @param options       {@link ActivityOptions} used to start the activity with.
+         * @param request       Optional data to give more context on the launch
          * @param phase         the calculation phase, see {@link Phase}
          * @param currentParams launching params after the process of last {@link
          *                      LaunchParamsModifier}.
          * @param outParams     the result params to be set.
-         * @param request       Optional data to give more context on the launch
          * @return see {@link LaunchParamsModifier.Result}
          */
         @Result
-        int onCalculate(@Nullable Task task, WindowLayout layout, ActivityRecord activity,
-                ActivityRecord source, ActivityOptions options, @Phase int phase,
-                LaunchParams currentParams, LaunchParams outParams,
-                @Nullable Request request);
+        int onCalculate(@Nullable Task task, @Nullable WindowLayout layout,
+                @Nullable ActivityRecord activity, @Nullable ActivityRecord source,
+                @Nullable ActivityOptions options, @Nullable Request request,
+                @Phase int phase, LaunchParams currentParams, LaunchParams outParams);
     }
 }
diff --git a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
index a7306c9..12f8611 100644
--- a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
+++ b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java
@@ -95,30 +95,22 @@
         mSupervisor = supervisor;
     }
 
-    @VisibleForTesting
-    int onCalculate(Task task, ActivityInfo.WindowLayout layout, ActivityRecord activity,
-            ActivityRecord source, ActivityOptions options, LaunchParams currentParams,
-            LaunchParams outParams) {
-        return onCalculate(task, layout, activity, source, options, PHASE_BOUNDS, currentParams,
-                outParams, null);
-    }
-
     @Override
-    public int onCalculate(@Nullable Task task, @NonNull ActivityInfo.WindowLayout layout,
-            @NonNull ActivityRecord activity, @Nullable ActivityRecord source,
-            ActivityOptions options, int phase, LaunchParams currentParams, LaunchParams outParams,
-            @Nullable Request request) {
+    public int onCalculate(@Nullable Task task, @Nullable ActivityInfo.WindowLayout layout,
+            @Nullable ActivityRecord activity, @Nullable ActivityRecord source,
+            @Nullable ActivityOptions options, @Nullable Request request, int phase,
+            LaunchParams currentParams, LaunchParams outParams) {
         initLogBuilder(task, activity);
-        final int result = calculate(task, layout, activity, source, options, phase, currentParams,
-                outParams, request);
+        final int result = calculate(task, layout, activity, source, options, request, phase,
+                currentParams, outParams);
         outputLog();
         return result;
     }
 
-    private int calculate(@Nullable Task task, @NonNull ActivityInfo.WindowLayout layout,
-            @NonNull ActivityRecord activity, @Nullable ActivityRecord source,
-            ActivityOptions options, int phase, LaunchParams currentParams, LaunchParams outParams,
-            @Nullable Request request) {
+    private int calculate(@Nullable Task task, @Nullable ActivityInfo.WindowLayout layout,
+            @Nullable ActivityRecord activity, @Nullable ActivityRecord source,
+            @Nullable ActivityOptions options, @Nullable Request request, int phase,
+            LaunchParams currentParams, LaunchParams outParams) {
         final ActivityRecord root;
         if (task != null) {
             root = task.getRootActivity() == null ? activity : task.getRootActivity();
@@ -126,10 +118,6 @@
             root = activity;
         }
 
-        // TODO: Investigate whether we can safely ignore all cases where we don't have root
-        // activity available. Note we can't know if the bounds are valid if we're not sure of the
-        // requested orientation of the root activity. Therefore if we found such a case we may need
-        // to pass the activity into this modifier in that case.
         if (root == null) {
             // There is a case that can lead us here. The caller is moving the top activity that is
             // in a task that has multiple activities to PIP mode. For that the caller is creating a
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 5695412..76e98ab 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -422,7 +422,7 @@
         // verify that values are passed to the modifier. Values are passed thrice -- two for
         // setting initial state, another when task is created.
         verify(modifier, times(3)).onCalculate(any(), eq(windowLayout), any(), any(), eq(options),
-                anyInt(), any(), any(), any());
+                any(), anyInt(), any(), any());
     }
 
     /**
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 a99e40c..089fd20 100644
--- a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java
@@ -95,10 +95,10 @@
         final ActivityOptions options = mock(ActivityOptions.class);
         final Request request = new Request();
 
-        mController.calculate(record.getTask(), layout, record, source, options, PHASE_BOUNDS,
-                new LaunchParams(), request);
+        mController.calculate(record.getTask(), layout, record, source, options, request,
+                PHASE_BOUNDS, new LaunchParams());
         verify(positioner, times(1)).onCalculate(eq(record.getTask()), eq(layout), eq(record),
-                eq(source), eq(options), anyInt(), any(), any(), eq(request));
+                eq(source), eq(options), eq(request), anyInt(), any(), any());
     }
 
     /**
@@ -121,9 +121,9 @@
         mPersister.putLaunchParams(userId, name, expected);
 
         mController.calculate(activity.getTask(), null /*layout*/, activity, null /*source*/,
-                null /*options*/, PHASE_BOUNDS, new LaunchParams(), null /* request */);
-        verify(positioner, times(1)).onCalculate(any(), any(), any(), any(), any(), anyInt(),
-                eq(expected), any(), any());
+                null /*options*/, null /*request*/, PHASE_BOUNDS, new LaunchParams());
+        verify(positioner, times(1)).onCalculate(any(), any(), any(), any(), any(), any(),
+                anyInt(), eq(expected), any());
     }
 
     /**
@@ -141,10 +141,10 @@
         mController.registerModifier(earlyExitPositioner);
 
         mController.calculate(null /*task*/, null /*layout*/, null /*activity*/,
-                null /*source*/, null /*options*/, PHASE_BOUNDS, new LaunchParams(),
-                null /* request */);
-        verify(ignoredPositioner, never()).onCalculate(any(), any(), any(), any(), any(), anyInt(),
-                any(), any(), any());
+                null /*source*/, null /*options*/, null /*request*/,
+                PHASE_BOUNDS, new LaunchParams());
+        verify(ignoredPositioner, never()).onCalculate(any(), any(), any(), any(), any(), any(),
+                anyInt(), any(), any());
     }
 
     /**
@@ -160,22 +160,22 @@
         mController.registerModifier(firstPositioner);
 
         mController.calculate(null /*task*/, null /*layout*/, null /*activity*/,
-                null /*source*/, null /*options*/, PHASE_BOUNDS, new LaunchParams(),
-                null /* request */);
-        verify(firstPositioner, times(1)).onCalculate(any(), any(), any(), any(), any(), anyInt(),
-                any(), any(), any());
+                null /*source*/, null /*options*/, null /*request*/, PHASE_BOUNDS,
+                new LaunchParams());
+        verify(firstPositioner, times(1)).onCalculate(any(), any(), any(), any(), any(), any(),
+                anyInt(), any(), any());
 
         final LaunchParamsModifier secondPositioner = spy(earlyExitPositioner);
 
         mController.registerModifier(secondPositioner);
 
         mController.calculate(null /*task*/, null /*layout*/, null /*activity*/,
-                null /*source*/, null /*options*/, PHASE_BOUNDS, new LaunchParams(),
-                null /* request */);
-        verify(firstPositioner, times(1)).onCalculate(any(), any(), any(), any(), any(), anyInt(),
-                any(), any(), any());
-        verify(secondPositioner, times(1)).onCalculate(any(), any(), any(), any(), any(), anyInt(),
-                any(), any(), any());
+                null /*source*/, null /*options*/, null /*request*/, PHASE_BOUNDS,
+                new LaunchParams());
+        verify(firstPositioner, times(1)).onCalculate(any(), any(), any(), any(), any(), any(),
+                anyInt(), any(), any());
+        verify(secondPositioner, times(1)).onCalculate(any(), any(), any(), any(), any(), any(),
+                anyInt(), any(), any());
     }
 
     /**
@@ -197,10 +197,10 @@
         mController.registerModifier(positioner2);
 
         mController.calculate(null /*task*/, null /*layout*/, null /*activity*/, null /*source*/,
-                null /*options*/, PHASE_BOUNDS, new LaunchParams(), null /* request */);
+                null /*options*/, null /*request*/, PHASE_BOUNDS, new LaunchParams());
 
-        verify(positioner1, times(1)).onCalculate(any(), any(), any(), any(), any(), anyInt(),
-                eq(positioner2.getLaunchParams()), any(), any());
+        verify(positioner1, times(1)).onCalculate(any(), any(), any(), any(), any(), any(),
+                anyInt(), eq(positioner2.getLaunchParams()), any());
     }
 
     /**
@@ -223,7 +223,7 @@
         final LaunchParams result = new LaunchParams();
 
         mController.calculate(null /*task*/, null /*layout*/, null /*activity*/, null /*source*/,
-                null /*options*/, PHASE_BOUNDS, result, null /* request */);
+                null /*options*/, null /*request*/, PHASE_BOUNDS, result);
 
         assertEquals(result, positioner2.getLaunchParams());
     }
@@ -242,17 +242,17 @@
 
         // VR activities should always land on default display.
         mController.calculate(null /*task*/, null /*layout*/, vrActivity /*activity*/,
-                null /*source*/, null /*options*/, PHASE_BOUNDS, result, null /* request */);
+                null /*source*/, null /*options*/, null/*request*/, PHASE_BOUNDS, result);
         assertEquals(mRootWindowContainer.getDefaultTaskDisplayArea(),
                 result.mPreferredTaskDisplayArea);
 
         // Otherwise, always lands on VR 2D display.
         final ActivityRecord vr2dActivity = new ActivityBuilder(mAtm).build();
         mController.calculate(null /*task*/, null /*layout*/, vr2dActivity /*activity*/,
-                null /*source*/, null /*options*/, PHASE_BOUNDS, result, null /* request */);
+                null /*source*/, null /*options*/, null /*request*/, PHASE_BOUNDS, result);
         assertEquals(vrDisplay.getDefaultTaskDisplayArea(), result.mPreferredTaskDisplayArea);
         mController.calculate(null /*task*/, null /*layout*/, null /*activity*/, null /*source*/,
-                null /*options*/, PHASE_BOUNDS, result, null /* request */);
+                null /*options*/, null /*request*/, PHASE_BOUNDS, result);
         assertEquals(vrDisplay.getDefaultTaskDisplayArea(), result.mPreferredTaskDisplayArea);
 
         mAtm.mVr2dDisplayId = INVALID_DISPLAY;
@@ -273,10 +273,10 @@
         final WindowLayout layout = new WindowLayout(0, 0, 0, 0, 0, 0, 0);
         final ActivityOptions options = mock(ActivityOptions.class);
 
-        mController.calculate(record.getTask(), layout, record, source, options, PHASE_BOUNDS,
-                new LaunchParams(), null /* request */);
+        mController.calculate(record.getTask(), layout, record, source, options, null/*request*/,
+                PHASE_BOUNDS, new LaunchParams());
         verify(positioner, times(1)).onCalculate(eq(record.getTask()), eq(layout), eq(record),
-                eq(source), eq(options), eq(PHASE_BOUNDS), any(), any(), any());
+                eq(source), eq(options), any(), eq(PHASE_BOUNDS), any(), any());
     }
 
     /**
@@ -408,9 +408,8 @@
 
         @Override
         public int onCalculate(Task task, WindowLayout layout, ActivityRecord activity,
-                ActivityRecord source, ActivityOptions options, int phase,
-                LaunchParams currentParams, LaunchParams outParams,
-                Request request) {
+                ActivityRecord source, ActivityOptions options, Request request, int phase,
+                LaunchParams currentParams, LaunchParams outParams) {
             outParams.set(mParams);
             return mReturnVal;
         }
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 269ce5d..99bdf9f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
@@ -36,6 +36,7 @@
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
 import static com.android.server.wm.ActivityStarter.Request;
+import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.PHASE_BOUNDS;
 import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.RESULT_CONTINUE;
 import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.RESULT_SKIP;
 
@@ -60,6 +61,7 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.server.wm.LaunchParamsController.LaunchParams;
+import com.android.server.wm.LaunchParamsController.LaunchParamsModifier.Result;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -108,8 +110,7 @@
     @Test
     public void testReturnsSkipWithEmptyActivity() {
         final Task task = new TaskBuilder(mSupervisor).build();
-        assertEquals(RESULT_SKIP, mTarget.onCalculate(task, /* layout */ null,
-                /* activity */ null, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_SKIP, new CalculateRequestBuilder().setActivity(null).calculate());
     }
 
     // =============================
@@ -119,8 +120,7 @@
     public void testDefaultToPrimaryDisplayArea() {
         createNewDisplayContent(WINDOWING_MODE_FREEFORM);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquals(mRootWindowContainer.getDefaultTaskDisplayArea(),
                 mResult.mPreferredTaskDisplayArea);
@@ -133,8 +133,7 @@
 
         mCurrent.mPreferredTaskDisplayArea = display.getDefaultTaskDisplayArea();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquals(display.getDefaultTaskDisplayArea(), mResult.mPreferredTaskDisplayArea);
     }
@@ -150,8 +149,7 @@
 
         ActivityRecord source = createSourceActivity(fullscreenDisplay);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, source, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().setSource(source).calculate());
 
         assertEquals(fullscreenDisplay.getDefaultTaskDisplayArea(),
                 mResult.mPreferredTaskDisplayArea);
@@ -170,8 +168,8 @@
         ActivityOptions options = ActivityOptions.makeBasic();
         options.setLaunchDisplayId(fullscreenDisplay.mDisplayId);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, source, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setSource(source).setOptions(options).calculate());
 
         assertEquals(fullscreenDisplay.getDefaultTaskDisplayArea(),
                 mResult.mPreferredTaskDisplayArea);
@@ -191,8 +189,8 @@
         options.setLaunchTaskDisplayArea(fullscreenDisplay.getDefaultTaskDisplayArea()
                 .mRemoteToken.toWindowContainerToken());
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, source, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setSource(source).setOptions(options).calculate());
 
         assertEquals(fullscreenDisplay.getDefaultTaskDisplayArea(),
                 mResult.mPreferredTaskDisplayArea);
@@ -209,8 +207,11 @@
         ActivityRecord reusableActivity = createSourceActivity(fullscreenDisplay);
         ActivityRecord source = createSourceActivity(freeformDisplay);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(reusableActivity.getTask(),
-                /* layout */ null, mActivity, source, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder()
+                        .setTask(reusableActivity.getTask())
+                        .setSource(source)
+                        .calculate());
 
         assertEquals(fullscreenDisplay.getDefaultTaskDisplayArea(),
                 mResult.mPreferredTaskDisplayArea);
@@ -222,8 +223,10 @@
                 WINDOWING_MODE_FREEFORM);
         ActivityRecord source = createSourceActivity(freeformDisplay);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(source.getTask(), null /* layout */,
-                null /* activity */, null /* source */, null /* options */, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder()
+                        .setTask(source.getTask())
+                        .calculate());
 
         assertEquals(freeformDisplay.getDefaultTaskDisplayArea(),
                 mResult.mPreferredTaskDisplayArea);
@@ -242,8 +245,11 @@
         source.mHandoverLaunchDisplayId = freeformDisplay.mDisplayId;
         source.noDisplay = true;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(reusableActivity.getTask(),
-                null /* layout */, mActivity, source, null /* options */, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder()
+                        .setTask(reusableActivity.getTask())
+                        .setSource(source)
+                        .calculate());
 
         assertEquals(freeformDisplay.getDefaultTaskDisplayArea(),
                 mResult.mPreferredTaskDisplayArea);
@@ -262,8 +268,11 @@
         source.mHandoverTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
         source.noDisplay = true;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(reusableActivity.getTask(),
-                null /* layout */, mActivity, source, null /* options */, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder()
+                        .setTask(reusableActivity.getTask())
+                        .setSource(source)
+                        .calculate());
 
         assertEquals(freeformDisplay.getDefaultTaskDisplayArea(),
                 mResult.mPreferredTaskDisplayArea);
@@ -273,7 +282,6 @@
     public void testUsesDisplayAreaFromTopMostActivityInApplicationIfAvailable() {
         final String processName = "processName";
         final int uid = 124214;
-        final TestDisplayContent firstScreen = createNewDisplayContent(WINDOWING_MODE_FULLSCREEN);
         final TestDisplayContent secondScreen = createNewDisplayContent(WINDOWING_MODE_FULLSCREEN);
         final TaskDisplayArea expectedDisplayArea = secondScreen.getDefaultTaskDisplayArea();
         final WindowProcessController controller = mock(WindowProcessController.class);
@@ -286,17 +294,7 @@
                 .when(mSupervisor.mService)
                 .getProcessController(processName, uid);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(
-                null /* task */,
-                null /* layout */,
-                mActivity /* activity */,
-                null /* source */,
-                null /* options */,
-                -1 /* phase */,
-                mCurrent,
-                mResult,
-                null /* request */
-        ));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquals(expectedDisplayArea, mResult.mPreferredTaskDisplayArea);
     }
@@ -305,7 +303,6 @@
     public void testUsesDisplayAreaFromLaunchingActivityIfApplicationLaunching() {
         final String processName = "processName";
         final int uid = 124214;
-        final TestDisplayContent firstScreen = createNewDisplayContent(WINDOWING_MODE_FULLSCREEN);
         final TestDisplayContent secondScreen = createNewDisplayContent(WINDOWING_MODE_FULLSCREEN);
         final TaskDisplayArea expectedTaskDisplayArea = secondScreen.getDefaultTaskDisplayArea();
         final WindowProcessController controller = mock(WindowProcessController.class);
@@ -322,17 +319,7 @@
                 .when(mSupervisor.mService)
                 .getProcessController(mActivity.launchedFromPid, mActivity.launchedFromUid);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(
-                null /* task */,
-                null /* layout */,
-                mActivity /* activity */,
-                null /* source */,
-                null /* options */,
-                -1 /* phase */,
-                mCurrent,
-                mResult,
-                null /* request */
-        ));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquals(expectedTaskDisplayArea, mResult.mPreferredTaskDisplayArea);
     }
@@ -363,17 +350,7 @@
                 .when(mSupervisor.mService)
                 .getProcessController(mActivity.launchedFromPid, mActivity.launchedFromUid);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(
-                null /* task */,
-                null /* layout */,
-                mActivity /* activity */,
-                null /* source */,
-                null /* options */,
-                -1 /* phase */,
-                mCurrent,
-                mResult,
-                null /* request */
-        ));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquals(expectedTaskDisplayArea, mResult.mPreferredTaskDisplayArea);
     }
@@ -403,17 +380,8 @@
                 .when(mSupervisor.mService)
                 .getProcessController(request.realCallingPid, request.realCallingUid);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(
-                null /* task */,
-                null /* layout */,
-                mActivity /* activity */,
-                null /* source */,
-                null /* options */,
-                -1 /* phase */,
-                mCurrent,
-                mResult,
-                request
-        ));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setRequest(request).calculate());
 
         assertEquals(expectedTaskDisplayArea, mResult.mPreferredTaskDisplayArea);
     }
@@ -428,17 +396,7 @@
                 .when(mSupervisor.mService)
                 .getProcessController(mActivity.launchedFromPid, mActivity.launchedFromUid);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(
-                null /* task */,
-                null /* layout */,
-                mActivity /* activity */,
-                null /* source */,
-                null /* options */,
-                -1 /* phase */,
-                mCurrent,
-                mResult,
-                null /* request */
-        ));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquals(DEFAULT_DISPLAY, mResult.mPreferredTaskDisplayArea.getDisplayId());
     }
@@ -456,8 +414,8 @@
 
         mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -470,8 +428,8 @@
 
         mCurrent.mPreferredTaskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
                 WINDOWING_MODE_FULLSCREEN);
@@ -484,8 +442,8 @@
         final ActivityRecord source = createSourceActivity(fullscreenDisplay);
         source.setWindowingMode(WINDOWING_MODE_FREEFORM);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, source, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setSource(source).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                 WINDOWING_MODE_FULLSCREEN);
@@ -501,8 +459,8 @@
 
         mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_PINNED, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -519,8 +477,8 @@
 
         mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_PINNED, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -533,8 +491,8 @@
 
         mCurrent.mPreferredTaskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
                 WINDOWING_MODE_FULLSCREEN);
@@ -550,8 +508,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setWidth(120).setHeight(80).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -567,8 +525,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setGravity(Gravity.LEFT).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -581,8 +539,8 @@
 
         mCurrent.mPreferredTaskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
                 WINDOWING_MODE_FULLSCREEN);
@@ -594,8 +552,7 @@
         mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
         mCurrent.mBounds.set(0, 0, 200, 100);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
                 WINDOWING_MODE_FULLSCREEN);
@@ -609,8 +566,7 @@
         mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
         mCurrent.mWindowingMode = WINDOWING_MODE_FULLSCREEN;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -625,8 +581,7 @@
         mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
         mCurrent.mBounds.set(0, 0, 200, 100);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -648,8 +603,8 @@
 
         mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -673,8 +628,8 @@
 
         mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(expectedLaunchBounds, mResult.mBounds);
 
@@ -694,8 +649,8 @@
 
         mActivity.info.resizeMode = RESIZE_MODE_UNRESIZEABLE;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                 WINDOWING_MODE_FULLSCREEN);
@@ -706,8 +661,8 @@
         final ActivityOptions options = ActivityOptions.makeBasic();
         options.setLaunchDisplayId(DEFAULT_DISPLAY);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
                 WINDOWING_MODE_FULLSCREEN);
@@ -722,8 +677,8 @@
         options.setLaunchDisplayId(freeformDisplay.mDisplayId);
         options.setLaunchWindowingMode(WINDOWING_MODE_FULLSCREEN);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -737,8 +692,8 @@
         final ActivityOptions options = ActivityOptions.makeBasic();
         options.setLaunchDisplayId(freeformDisplay.mDisplayId);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -754,8 +709,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode,
                 WINDOWING_MODE_FREEFORM);
@@ -768,8 +723,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquivalentWindowingMode(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode,
                 WINDOWING_MODE_FULLSCREEN);
@@ -791,8 +746,8 @@
 
         mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(expected, mResult.mBounds);
     }
@@ -808,8 +763,8 @@
         final Rect expected = new Rect(0, 0, 150, 150);
         options.setLaunchBounds(expected);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, source, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setSource(source).setOptions(options).calculate());
 
         assertEquals(expected, mResult.mBounds);
     }
@@ -824,8 +779,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setGravity(Gravity.LEFT).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(DISPLAY_STABLE_BOUNDS.left, mResult.mBounds.left);
     }
@@ -840,8 +795,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setGravity(Gravity.TOP).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(DISPLAY_STABLE_BOUNDS.top, mResult.mBounds.top);
     }
@@ -856,8 +811,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setGravity(Gravity.TOP | Gravity.LEFT).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(DISPLAY_STABLE_BOUNDS.left, mResult.mBounds.left);
         assertEquals(DISPLAY_STABLE_BOUNDS.top, mResult.mBounds.top);
@@ -873,8 +828,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setGravity(Gravity.RIGHT).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(DISPLAY_STABLE_BOUNDS.right, mResult.mBounds.right);
     }
@@ -889,8 +844,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setGravity(Gravity.BOTTOM).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(DISPLAY_STABLE_BOUNDS.bottom, mResult.mBounds.bottom);
     }
@@ -905,8 +860,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setGravity(Gravity.BOTTOM | Gravity.RIGHT).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(DISPLAY_STABLE_BOUNDS.right, mResult.mBounds.right);
         assertEquals(DISPLAY_STABLE_BOUNDS.bottom, mResult.mBounds.bottom);
@@ -922,8 +877,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setWidth(120).setHeight(80).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(new Rect(800, 400, 920, 480), mResult.mBounds);
     }
@@ -938,8 +893,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setWidth(120).setHeight(80).setGravity(Gravity.LEFT).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(new Rect(100, 400, 220, 480), mResult.mBounds);
     }
@@ -954,8 +909,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setWidth(120).setHeight(80).setGravity(Gravity.TOP).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(new Rect(800, 200, 920, 280), mResult.mBounds);
     }
@@ -970,8 +925,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setWidth(120).setHeight(80).setGravity(Gravity.TOP | Gravity.LEFT).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(new Rect(100, 200, 220, 280), mResult.mBounds);
     }
@@ -986,8 +941,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setWidth(120).setHeight(80).setGravity(Gravity.RIGHT).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(new Rect(1500, 400, 1620, 480), mResult.mBounds);
     }
@@ -1002,8 +957,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setWidth(120).setHeight(80).setGravity(Gravity.BOTTOM).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(new Rect(800, 600, 920, 680), mResult.mBounds);
     }
@@ -1018,8 +973,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setWidth(120).setHeight(80).setGravity(Gravity.BOTTOM | Gravity.RIGHT).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(new Rect(1500, 600, 1620, 680), mResult.mBounds);
     }
@@ -1034,8 +989,8 @@
         final ActivityInfo.WindowLayout layout = new WindowLayoutBuilder()
                 .setWidthFraction(0.125f).setHeightFraction(0.1f).build();
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).calculate());
 
         assertEquals(new Rect(765, 416, 955, 464), mResult.mBounds);
     }
@@ -1049,8 +1004,7 @@
         mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
         mCurrent.mBounds.set(0, 0, 200, 100);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquals(new Rect(0, 0, 200, 100), mResult.mBounds);
     }
@@ -1064,8 +1018,7 @@
         mCurrent.mWindowingMode = WINDOWING_MODE_FULLSCREEN;
         mCurrent.mBounds.set(0, 0, 200, 100);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquals(new Rect(0, 0, 200, 100), mResult.mBounds);
     }
@@ -1081,8 +1034,8 @@
 
         mActivity.info.screenOrientation = SCREEN_ORIENTATION_NOSENSOR;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         final int orientationForDisplay = orientationFromBounds(freeformDisplay.getBounds());
         final int orientationForTask = orientationFromBounds(mResult.mBounds);
@@ -1105,8 +1058,8 @@
 
         mActivity.info.screenOrientation = SCREEN_ORIENTATION_LANDSCAPE;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(SCREEN_ORIENTATION_LANDSCAPE, orientationFromBounds(mResult.mBounds));
     }
@@ -1122,8 +1075,8 @@
 
         mActivity.info.screenOrientation = SCREEN_ORIENTATION_PORTRAIT;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(SCREEN_ORIENTATION_PORTRAIT, orientationFromBounds(mResult.mBounds));
     }
@@ -1138,8 +1091,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         final int resultWidth = mResult.mBounds.width();
         final int displayWidth = freeformDisplay.getBounds().width();
@@ -1162,8 +1115,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals("Distance to left and right should be equal.",
                 mResult.mBounds.left - DISPLAY_STABLE_BOUNDS.left,
@@ -1186,8 +1139,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, source, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setSource(source).setOptions(options).calculate());
 
         final Rect displayBounds = freeformDisplay.getBounds();
         assertTrue("Left bounds should be larger than 0.", mResult.mBounds.left > 0);
@@ -1213,8 +1166,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, source, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setSource(source).setOptions(options).calculate());
 
         final Rect displayBounds = freeformDisplay.getBounds();
         assertTrue("display bounds doesn't contain result. display bounds: "
@@ -1235,8 +1188,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, source, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setSource(source).setOptions(options).calculate());
 
         final Rect displayBounds = freeformDisplay.getBounds();
         assertTrue("display bounds doesn't contain result. display bounds: "
@@ -1257,8 +1210,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertTrue("Result bounds should start from app bounds's origin, but it's "
                         + mResult.mBounds,
@@ -1284,8 +1237,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertTrue("Result bounds should start from top-right corner of app bounds, but "
                         + "it's " + mResult.mBounds,
@@ -1311,8 +1264,8 @@
 
         mActivity.info.applicationInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, layout, mActivity,
-                /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setLayout(layout).setOptions(options).calculate());
 
         assertEquals(500, mResult.mBounds.width());
         assertEquals(800, mResult.mBounds.height());
@@ -1329,8 +1282,8 @@
 
         mActivity.info.screenOrientation = SCREEN_ORIENTATION_PORTRAIT;
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(new Rect(200, 0, 400, 400), mResult.mBounds);
     }
@@ -1346,8 +1299,8 @@
         options.setLaunchDisplayId(freeformDisplay.mDisplayId);
         options.setLaunchBounds(new Rect(50, 50, 500, 300));
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(new Rect(170, 50, 620, 300), mResult.mBounds);
     }
@@ -1363,8 +1316,8 @@
         options.setLaunchDisplayId(freeformDisplay.mDisplayId);
         options.setLaunchBounds(new Rect(1720, 50, 1850, 300));
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(new Rect(1600, 50, 1730, 300), mResult.mBounds);
     }
@@ -1380,8 +1333,8 @@
         options.setLaunchDisplayId(freeformDisplay.mDisplayId);
         options.setLaunchBounds(new Rect(0, 0, 1800, 200));
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(new Rect(120, 0, 1920, 200), mResult.mBounds);
     }
@@ -1397,8 +1350,8 @@
         options.setLaunchDisplayId(freeformDisplay.mDisplayId);
         options.setLaunchBounds(new Rect(120, 0, 1860, 200));
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(new Rect(0, 0, 1740, 200), mResult.mBounds);
     }
@@ -1414,8 +1367,8 @@
         options.setLaunchDisplayId(freeformDisplay.mDisplayId);
         options.setLaunchBounds(new Rect(120, 0, 1800, 1013));
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(new Rect(240, 67, 1920, 1080), mResult.mBounds);
     }
@@ -1431,8 +1384,8 @@
         options.setLaunchDisplayId(freeformDisplay.mDisplayId);
         options.setLaunchBounds(new Rect(120, 67, 1800, 1020));
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(new Rect(0, 0, 1680, 953), mResult.mBounds);
     }
@@ -1443,8 +1396,7 @@
         mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
         mCurrent.mBounds.set(0, 0, 200, 100);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         // Returned bounds with in fullscreen mode will be set to last non-fullscreen bounds.
         assertEquals(new Rect(0, 0, 200, 100), mResult.mBounds);
@@ -1462,8 +1414,8 @@
         final ActivityOptions options = ActivityOptions.makeBasic();
         options.setLaunchDisplayId(freeformDisplay.mDisplayId);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, options, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE,
+                new CalculateRequestBuilder().setOptions(options).calculate());
 
         assertEquals(new Rect(100, 200, 400, 500), mResult.mBounds);
     }
@@ -1479,8 +1431,7 @@
         mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM;
         mCurrent.mBounds.set(0, 0, 200, 100);
 
-        assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+        assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
 
         assertEquals(new Rect(120, 0, 320, 100), mResult.mBounds);
     }
@@ -1510,8 +1461,7 @@
 
         try {
             mAtm.mSupportsMultiDisplay = false;
-            assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null,
-                    mActivity, /* source */ null, /* options */ null, mCurrent, mResult));
+            assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().calculate());
             assertEquals(mRootWindowContainer.getDefaultTaskDisplayArea(),
                     mResult.mPreferredTaskDisplayArea);
         } finally {
@@ -1592,6 +1542,53 @@
                 : SCREEN_ORIENTATION_PORTRAIT;
     }
 
+    private class CalculateRequestBuilder {
+        private Task mTask;
+        private ActivityInfo.WindowLayout mLayout;
+        private ActivityRecord mActivity = TaskLaunchParamsModifierTests.this.mActivity;
+        private ActivityRecord mSource;
+        private ActivityOptions mOptions;
+        private Request mRequest;
+        private int mPhase = PHASE_BOUNDS;
+        private LaunchParams mCurrentParams = mCurrent;
+        private LaunchParams mOutParams = mResult;
+
+        private CalculateRequestBuilder setTask(Task task) {
+            mTask = task;
+            return this;
+        }
+
+        private CalculateRequestBuilder setLayout(ActivityInfo.WindowLayout layout) {
+            mLayout = layout;
+            return this;
+        }
+
+        private CalculateRequestBuilder setActivity(ActivityRecord activity) {
+            mActivity = activity;
+            return this;
+        }
+
+        private CalculateRequestBuilder setSource(ActivityRecord source) {
+            mSource = source;
+            return this;
+        }
+
+        private CalculateRequestBuilder setOptions(ActivityOptions options) {
+            mOptions = options;
+            return this;
+        }
+
+        private CalculateRequestBuilder setRequest(Request request) {
+            mRequest = request;
+            return this;
+        }
+
+        private @Result int calculate() {
+            return mTarget.onCalculate(mTask, mLayout, mActivity, mSource, mOptions, mRequest,
+                    mPhase, mCurrentParams, mOutParams);
+        }
+    }
+
     private static class WindowLayoutBuilder {
         private int mWidth = -1;
         private int mHeight = -1;