Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e64f2b0 authored by Garfield Tan's avatar Garfield Tan
Browse files

Some cleanup around LaunchParamsModifier.

1. Move parameter requst before parameter phase so that it's closer to
other in-params.
2. Change the way of dispatching calculate calls in
TaskLaunchParamsModifierTests so that we don't have change all tests
after changing the signature.

Bug: 175627594
Test: atest WmTests:com.android.server.wm.TaskLaunchParamsModifierTests
Test: atest WmTests:com.android.server.wm.ActivityStarterTests
Test: atest WmTests:com.android.server.wm.LaunchParamsControllerTests
Change-Id: I483bfde489bec2d99ee4ec6721779142dda52fcb
parent f9e4f713
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1883,7 +1883,7 @@ class ActivityStarter {
        }

        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 @@ class ActivityStarter {
        // 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();
+12 −11
Original line number Diff line number Diff line
@@ -73,11 +73,12 @@ class LaunchParamsController {
     * @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 @@ class LaunchParamsController {
            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 @@ class LaunchParamsController {

    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 @@ class LaunchParamsController {
         *                      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);
    }
}
+10 −18
Original line number Diff line number Diff line
@@ -95,30 +95,22 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier {
        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();
+1 −1
Original line number Diff line number Diff line
@@ -422,7 +422,7 @@ public class ActivityStarterTests extends WindowTestsBase {
        // 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());
    }

    /**
+32 −33
Original line number Diff line number Diff line
@@ -95,10 +95,10 @@ public class LaunchParamsControllerTests extends WindowTestsBase {
        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 @@ public class LaunchParamsControllerTests extends WindowTestsBase {
        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 @@ public class LaunchParamsControllerTests extends WindowTestsBase {
        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 @@ public class LaunchParamsControllerTests extends WindowTestsBase {
        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 @@ public class LaunchParamsControllerTests extends WindowTestsBase {
        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 @@ public class LaunchParamsControllerTests extends WindowTestsBase {
        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 @@ public class LaunchParamsControllerTests extends WindowTestsBase {

        // 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 @@ public class LaunchParamsControllerTests extends WindowTestsBase {
        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 @@ public class LaunchParamsControllerTests extends WindowTestsBase {

        @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;
        }
Loading