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

Commit 82546697 authored by Winson Chung's avatar Winson Chung Committed by Automerger Merge Worker
Browse files

Merge "Disallowing dragging to fullscreen" into sc-v2-dev am: ab6963c5 am: b320dd90

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15391836

Change-Id: Iee3e24d82c4ca5ca69ebb2f424c96f72ba22a07d
parents 287f9aad b320dd90
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -151,10 +151,8 @@ public class DragAndDropPolicy {
                final Rect rightHitRegion = new Rect();
                final Rect rightDrawRegion = bottomOrRightBounds;

                displayRegion.splitVertically(leftHitRegion, fullscreenHitRegion, rightHitRegion);
                displayRegion.splitVertically(leftHitRegion, rightHitRegion);

                mTargets.add(
                        new Target(TYPE_FULLSCREEN, fullscreenHitRegion, fullscreenDrawRegion));
                mTargets.add(new Target(TYPE_SPLIT_LEFT, leftHitRegion, leftDrawRegion));
                mTargets.add(new Target(TYPE_SPLIT_RIGHT, rightHitRegion, rightDrawRegion));

@@ -165,10 +163,8 @@ public class DragAndDropPolicy {
                final Rect bottomDrawRegion = bottomOrRightBounds;

                displayRegion.splitHorizontally(
                        topHitRegion, fullscreenHitRegion, bottomHitRegion);
                        topHitRegion, bottomHitRegion);

                mTargets.add(
                        new Target(TYPE_FULLSCREEN, fullscreenHitRegion, fullscreenDrawRegion));
                mTargets.add(new Target(TYPE_SPLIT_TOP, topHitRegion, topDrawRegion));
                mTargets.add(new Target(TYPE_SPLIT_BOTTOM, bottomHitRegion, bottomDrawRegion));
            }
@@ -269,7 +265,6 @@ public class DragAndDropPolicy {
         * Updates the session data based on the current state of the system.
         */
        void update() {

            List<ActivityManager.RunningTaskInfo> tasks =
                    mActivityTaskManager.getTasks(1, false /* filterOnlyVisibleRecents */);
            if (!tasks.isEmpty()) {
+30 −39
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.content.ClipDescription.MIMETYPE_APPLICATION_SHORTCUT;
import static android.content.ClipDescription.MIMETYPE_APPLICATION_TASK;

import static com.android.wm.shell.common.split.SplitLayout.SPLIT_POSITION_BOTTOM_OR_RIGHT;
import static com.android.wm.shell.common.split.SplitLayout.SPLIT_POSITION_TOP_OR_LEFT;
import static com.android.wm.shell.common.split.SplitLayout.SPLIT_POSITION_UNDEFINED;
import static com.android.wm.shell.draganddrop.DragAndDropPolicy.Target.TYPE_FULLSCREEN;
import static com.android.wm.shell.draganddrop.DragAndDropPolicy.Target.TYPE_SPLIT_BOTTOM;
@@ -210,15 +211,15 @@ public class DragAndDropPolicyTest {
    }

    @Test
    public void testDragAppOverFullscreenApp_expectSplitScreenAndFullscreenTargets() {
    public void testDragAppOverFullscreenApp_expectSplitScreenTargets() {
        setRunningTask(mFullscreenAppTask);
        mPolicy.start(mLandscapeDisplayLayout, mActivityClipData);
        ArrayList<Target> targets = assertExactTargetTypes(
                mPolicy.getTargets(mInsets), TYPE_FULLSCREEN, TYPE_SPLIT_LEFT, TYPE_SPLIT_RIGHT);
                mPolicy.getTargets(mInsets), TYPE_SPLIT_LEFT, TYPE_SPLIT_RIGHT);

        mPolicy.handleDrop(filterTargetByType(targets, TYPE_FULLSCREEN), mActivityClipData);
        mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_LEFT), mActivityClipData);
        verify(mSplitScreenStarter).startIntent(any(), any(),
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_UNDEFINED), any());
                eq(STAGE_TYPE_SIDE), eq(SPLIT_POSITION_TOP_OR_LEFT), any());
        reset(mSplitScreenStarter);

        mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_RIGHT), mActivityClipData);
@@ -227,15 +228,15 @@ public class DragAndDropPolicyTest {
    }

    @Test
    public void testDragAppOverFullscreenAppPhone_expectVerticalSplitScreenAndFullscreenTargets() {
    public void testDragAppOverFullscreenAppPhone_expectVerticalSplitScreenTargets() {
        setRunningTask(mFullscreenAppTask);
        mPolicy.start(mPortraitDisplayLayout, mActivityClipData);
        ArrayList<Target> targets = assertExactTargetTypes(
                mPolicy.getTargets(mInsets), TYPE_FULLSCREEN, TYPE_SPLIT_TOP, TYPE_SPLIT_BOTTOM);
                mPolicy.getTargets(mInsets), TYPE_SPLIT_TOP, TYPE_SPLIT_BOTTOM);

        mPolicy.handleDrop(filterTargetByType(targets, TYPE_FULLSCREEN), mActivityClipData);
        mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_TOP), mActivityClipData);
        verify(mSplitScreenStarter).startIntent(any(), any(),
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_UNDEFINED), any());
                eq(STAGE_TYPE_SIDE), eq(SPLIT_POSITION_TOP_OR_LEFT), any());
        reset(mSplitScreenStarter);

        mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_BOTTOM), mActivityClipData);
@@ -244,65 +245,55 @@ public class DragAndDropPolicyTest {
    }

    @Test
    public void testDragAppOverFullscreenNonResizeableApp_expectOnlyFullscreenTargets() {
        setRunningTask(mNonResizeableFullscreenAppTask);
    public void testDragAppOverSplitApp_expectSplitTargets_DropLeft() {
        setInSplitScreen(true);
        setRunningTask(mSplitPrimaryAppTask);
        mPolicy.start(mLandscapeDisplayLayout, mActivityClipData);
        ArrayList<Target> targets = assertExactTargetTypes(
                mPolicy.getTargets(mInsets), TYPE_FULLSCREEN, TYPE_SPLIT_LEFT, TYPE_SPLIT_RIGHT);
                mPolicy.getTargets(mInsets), TYPE_SPLIT_LEFT, TYPE_SPLIT_RIGHT);

        mPolicy.handleDrop(filterTargetByType(targets, TYPE_FULLSCREEN), mActivityClipData);
        mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_LEFT), mActivityClipData);
        verify(mSplitScreenStarter).startIntent(any(), any(),
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_UNDEFINED), any());
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_TOP_OR_LEFT), any());
    }

    @Test
    public void testDragNonResizeableAppOverFullscreenApp_expectOnlyFullscreenTargets() {
        setRunningTask(mFullscreenAppTask);
        mPolicy.start(mLandscapeDisplayLayout, mNonResizeableActivityClipData);
    public void testDragAppOverSplitApp_expectSplitTargets_DropRight() {
        setInSplitScreen(true);
        setRunningTask(mSplitPrimaryAppTask);
        mPolicy.start(mLandscapeDisplayLayout, mActivityClipData);
        ArrayList<Target> targets = assertExactTargetTypes(
                mPolicy.getTargets(mInsets), TYPE_FULLSCREEN, TYPE_SPLIT_LEFT, TYPE_SPLIT_RIGHT);
                mPolicy.getTargets(mInsets), TYPE_SPLIT_LEFT, TYPE_SPLIT_RIGHT);

        mPolicy.handleDrop(filterTargetByType(targets, TYPE_FULLSCREEN), mActivityClipData);
        mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_RIGHT), mActivityClipData);
        verify(mSplitScreenStarter).startIntent(any(), any(),
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_UNDEFINED), any());
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_BOTTOM_OR_RIGHT), any());
    }

    @Test
    public void testDragAppOverSplitApp_expectFullscreenAndSplitTargets() {
    public void testDragAppOverSplitAppPhone_expectVerticalSplitTargets_DropTop() {
        setInSplitScreen(true);
        setRunningTask(mSplitPrimaryAppTask);
        mPolicy.start(mLandscapeDisplayLayout, mActivityClipData);
        mPolicy.start(mPortraitDisplayLayout, mActivityClipData);
        ArrayList<Target> targets = assertExactTargetTypes(
                mPolicy.getTargets(mInsets), TYPE_FULLSCREEN, TYPE_SPLIT_LEFT, TYPE_SPLIT_RIGHT);

        mPolicy.handleDrop(filterTargetByType(targets, TYPE_FULLSCREEN), mActivityClipData);
        verify(mSplitScreenStarter).startIntent(any(), any(),
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_UNDEFINED), any());
        reset(mSplitScreenStarter);
                mPolicy.getTargets(mInsets), TYPE_SPLIT_TOP, TYPE_SPLIT_BOTTOM);

        // TODO(b/169894807): Just verify starting for the non-docked task until we have app pairs
        mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_RIGHT), mActivityClipData);
        mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_TOP), mActivityClipData);
        verify(mSplitScreenStarter).startIntent(any(), any(),
                eq(STAGE_TYPE_SIDE), eq(SPLIT_POSITION_BOTTOM_OR_RIGHT), any());
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_TOP_OR_LEFT), any());
    }

    @Test
    public void testDragAppOverSplitAppPhone_expectFullscreenAndVerticalSplitTargets() {
    public void testDragAppOverSplitAppPhone_expectVerticalSplitTargets_DropBottom() {
        setInSplitScreen(true);
        setRunningTask(mSplitPrimaryAppTask);
        mPolicy.start(mPortraitDisplayLayout, mActivityClipData);
        ArrayList<Target> targets = assertExactTargetTypes(
                mPolicy.getTargets(mInsets), TYPE_FULLSCREEN, TYPE_SPLIT_TOP, TYPE_SPLIT_BOTTOM);
                mPolicy.getTargets(mInsets), TYPE_SPLIT_TOP, TYPE_SPLIT_BOTTOM);

        mPolicy.handleDrop(filterTargetByType(targets, TYPE_FULLSCREEN), mActivityClipData);
        verify(mSplitScreenStarter).startIntent(any(), any(),
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_UNDEFINED), any());
        reset(mSplitScreenStarter);

        // TODO(b/169894807): Just verify starting for the non-docked task until we have app pairs
        mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_BOTTOM), mActivityClipData);
        verify(mSplitScreenStarter).startIntent(any(), any(),
                eq(STAGE_TYPE_SIDE), eq(SPLIT_POSITION_BOTTOM_OR_RIGHT), any());
                eq(STAGE_TYPE_UNDEFINED), eq(SPLIT_POSITION_BOTTOM_OR_RIGHT), any());
    }

    @Test