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

Commit e4ad7458 authored by Bryce Lee's avatar Bryce Lee
Browse files

Add source activity to values passed to LaunchingBoundsPositioner.

Bug: 64144308
Test: bit FrameworksServicesTests:com.android.server.am.LaunchingBoundsControllerTests
Test: bit FrameworksServicesTests:com.android.server.am.LaunchingTaskPositionerTests
Test: bit FrameworksServicesTests:com.android.server.am.LaunchingActivityPositionerTests
Change-Id: I8a9d2a41e923e972c11db0b79854ff4a6a742d1c
parent 75dcc4f0
Loading
Loading
Loading
Loading
+1 −13
Original line number Diff line number Diff line
@@ -26,9 +26,6 @@ import static android.app.ActivityManager.START_RETURN_INTENT_TO_CALLER;
import static android.app.ActivityManager.START_RETURN_LOCK_TASK_MODE_VIOLATION;
import static android.app.ActivityManager.START_SUCCESS;
import static android.app.ActivityManager.START_TASK_TO_FRONT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
@@ -1249,7 +1246,7 @@ class ActivityStarter {
        mLaunchBounds.setEmpty();

        mSupervisor.getLaunchingBoundsController().calculateBounds(inTask, null /*layout*/, r,
                options, mLaunchBounds);
                sourceRecord, options, mLaunchBounds);

        mLaunchMode = r.launchMode;

@@ -2170,15 +2167,6 @@ class ActivityStarter {
        }
    }

    private Rect getOverrideBounds(ActivityRecord r, ActivityOptions options, TaskRecord inTask) {
        Rect newBounds = null;
        if (mSupervisor.canUseActivityOptionsLaunchBounds(options)
                && (r.isResizeable() || (inTask != null && inTask.isResizeable()))) {
            newBounds = TaskRecord.validateBounds(options.getLaunchBounds());
        }
        return newBounds;
    }

    private boolean isLaunchModeOneOf(int mode1, int mode2) {
        return mode1 == mLaunchMode || mode2 == mLaunchMode;
    }
+2 −1
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@ public class LaunchingActivityPositioner implements LaunchingBoundsPositioner {

    @Override
    public int onCalculateBounds(TaskRecord task, ActivityInfo.WindowLayout layout,
            ActivityRecord activity, ActivityOptions options,  Rect current, Rect result) {
            ActivityRecord activity, ActivityRecord source,
            ActivityOptions options, Rect current, Rect result) {
        // We only care about figuring out bounds for activities.
        if (activity == null) {
            return RESULT_SKIP;
+10 −7
Original line number Diff line number Diff line
@@ -62,12 +62,13 @@ class LaunchingBoundsController {
     * @param task      The {@link TaskRecord} currently being positioned.
     * @param layout    The specified {@link WindowLayout}.
     * @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 bounds. If no bounds are set, {@link Rect#isEmpty()} will be
     *                  true.
     *                  {@code true}.
     */
    void calculateBounds(TaskRecord task, WindowLayout layout, ActivityRecord activity,
            ActivityOptions options, Rect result) {
            ActivityRecord source, ActivityOptions options, Rect result) {
        result.setEmpty();

        // We start at the last registered {@link LaunchingBoundsPositioner} as this represents
@@ -78,8 +79,8 @@ class LaunchingBoundsController {
            mTmpCurrent.set(result);
            final LaunchingBoundsPositioner positioner = mPositioners.get(i);

            switch(positioner.onCalculateBounds(task, layout, activity, options, mTmpCurrent,
                    mTmpResult)) {
            switch(positioner.onCalculateBounds(task, layout, activity, source, options,
                    mTmpCurrent, mTmpResult)) {
                case RESULT_SKIP:
                    // Do not apply any results when we are told to skip
                    continue;
@@ -100,7 +101,8 @@ class LaunchingBoundsController {
     * @return {@code true} if bounds were set on the task. {@code false} otherwise.
     */
    boolean layoutTask(TaskRecord task, WindowLayout layout) {
        calculateBounds(task, layout, null /*activity*/, null /*options*/, mTmpRect);
        calculateBounds(task, layout, null /*activity*/, null /*source*/, null /*options*/,
                mTmpRect);

        if (mTmpRect.isEmpty()) {
            return false;
@@ -145,6 +147,7 @@ class LaunchingBoundsController {
         * @param task      The {@link TaskRecord} currently being positioned.
         * @param layout    The specified {@link WindowLayout}.
         * @param activity  The {@link ActivityRecord} currently being positioned.
         * @param source    The {@link ActivityRecord} activity was started from.
         * @param options   The {@link ActivityOptions} specified for the activity.
         * @param current   The current bounds. This can differ from the initial bounds as it
         *                  represents the modified bounds up to this point.
@@ -155,6 +158,6 @@ class LaunchingBoundsController {
         */
        @Result
        int onCalculateBounds(TaskRecord task, WindowLayout layout, ActivityRecord activity,
                ActivityOptions options, Rect current, Rect result);
                ActivityRecord source, ActivityOptions options, Rect current, Rect result);
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -79,7 +79,8 @@ class LaunchingTaskPositioner implements LaunchingBoundsController.LaunchingBoun
     */
    @Override
    public int onCalculateBounds(TaskRecord task, ActivityInfo.WindowLayout layout,
            ActivityRecord activity, ActivityOptions options, Rect current, Rect result) {
            ActivityRecord activity, ActivityRecord source,
            ActivityOptions options, Rect current, Rect result) {
        // We can only apply positioning if we're in a freeform stack.
        if (task == null || task.getStack() == null || !task.inFreeformWindowingMode()) {
            return RESULT_SKIP;
+10 −10
Original line number Diff line number Diff line
@@ -79,35 +79,35 @@ public class LaunchingActivityPositionerTests extends ActivityTestsBase {
    public void testSkippedInvocations() throws Exception {
        // No specified activity should be ignored
        assertEquals(RESULT_SKIP, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                null /*activity*/, null /*options*/, mCurrent, mResult));
                null /*activity*/, null /*source*/, null /*options*/, mCurrent, mResult));

        // No specified activity options should be ignored
        assertEquals(RESULT_SKIP, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                mActivity, null /*options*/, mCurrent, mResult));
                mActivity, null /*source*/, null /*options*/, mCurrent, mResult));

        // launch bounds specified should be ignored.
        final ActivityOptions options = ActivityOptions.makeBasic();
        assertEquals(RESULT_SKIP, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                mActivity, options /*options*/, mCurrent, mResult));
                mActivity, null /*source*/, options /*options*/, mCurrent, mResult));

        // Non-resizeable records should be ignored
        mActivity.info.resizeMode = ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
        assertFalse(mActivity.isResizeable());
        assertEquals(RESULT_SKIP, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                mActivity, options /*options*/, mCurrent, mResult));
                mActivity, null /*source*/, options /*options*/, mCurrent, mResult));

        // make record resizeable
        mActivity.info.resizeMode = ActivityInfo.RESIZE_MODE_RESIZEABLE;
        assertTrue(mActivity.isResizeable());

        assertEquals(RESULT_SKIP, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                mActivity, options /*options*/, mCurrent, mResult));
                mActivity, null /*source*/, options /*options*/, mCurrent, mResult));

        // Does not support freeform
        mService.mSupportsFreeformWindowManagement = false;
        assertFalse(mService.mStackSupervisor.canUseActivityOptionsLaunchBounds(options));
        assertEquals(RESULT_SKIP, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                mActivity, options /*options*/, mCurrent, mResult));
                mActivity, null /*source*/, options /*options*/, mCurrent, mResult));

        mService.mSupportsFreeformWindowManagement = true;
        options.setLaunchBounds(new Rect());
@@ -115,15 +115,15 @@ public class LaunchingActivityPositionerTests extends ActivityTestsBase {

        // Invalid bounds
        assertEquals(RESULT_SKIP, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                mActivity, options /*options*/, mCurrent, mResult));
                mActivity, null /*source*/, options /*options*/, mCurrent, mResult));
        options.setLaunchBounds(new Rect(0, 0, -1, -1));
        assertEquals(RESULT_SKIP, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                mActivity, options /*options*/, mCurrent, mResult));
                mActivity, null /*source*/, options /*options*/, mCurrent, mResult));

        // Valid bounds should cause the positioner to be applied.
        options.setLaunchBounds(new Rect(0, 0, 100, 100));
        assertEquals(RESULT_DONE, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                mActivity, options /*options*/, mCurrent, mResult));
                mActivity, null /*source*/, options /*options*/, mCurrent, mResult));
    }

    @Test
@@ -137,7 +137,7 @@ public class LaunchingActivityPositionerTests extends ActivityTestsBase {
        options.setLaunchBounds(proposedBounds);

        assertEquals(RESULT_DONE, mPositioner.onCalculateBounds(null /*task*/, null /*layout*/,
                mActivity, options /*options*/, mCurrent, mResult));
                mActivity, null /*source*/, options /*options*/, mCurrent, mResult));
        assertEquals(mResult, proposedBounds);
    }
}
Loading