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

Commit 21eaf54d authored by Maryam Dehaini's avatar Maryam Dehaini
Browse files

Handle move to fullscreen from split screen from request fullscreen API

The Activity#requestFullscreenMode API sets the windowing mode to fullscreen,
but the shell needs to handle the rest. This change intercepts the
transition in StageCoordinator#handleRequest and adds the changes to
have the trigger task exit split screen and go to the top if it is in
split screen and is in WINDOWING_MODE_FULLSCREEN.

Bug: 315352482
Test: Test using multiwindow fullscreen api test app (ag/20460053)
Change-Id: Ic05e7a49b84147a1f5ea03b880df3d2d14d82d5c
parent 8e28c69b
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
    public static final int EXIT_REASON_RECREATE_SPLIT = 10;
    public static final int EXIT_REASON_FULLSCREEN_SHORTCUT = 11;
    public static final int EXIT_REASON_DESKTOP_MODE = 12;
    public static final int EXIT_REASON_FULLSCREEN_REQUEST = 13;
    @IntDef(value = {
            EXIT_REASON_UNKNOWN,
            EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW,
@@ -151,7 +152,8 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
            EXIT_REASON_CHILD_TASK_ENTER_PIP,
            EXIT_REASON_RECREATE_SPLIT,
            EXIT_REASON_FULLSCREEN_SHORTCUT,
            EXIT_REASON_DESKTOP_MODE
            EXIT_REASON_DESKTOP_MODE,
            EXIT_REASON_FULLSCREEN_REQUEST
    })
    @Retention(RetentionPolicy.SOURCE)
    @interface ExitReason{}
@@ -1044,6 +1046,8 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
                return "RECREATE_SPLIT";
            case EXIT_REASON_DESKTOP_MODE:
                return "DESKTOP_MODE";
            case EXIT_REASON_FULLSCREEN_REQUEST:
                return "FULLSCREEN_REQUEST";
            default:
                return "unknown reason, reason int = " + exitReason;
        }
+8 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DESKTOP_MODE;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DEVICE_FOLDED;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DRAG_DIVIDER;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_FULLSCREEN_REQUEST;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_FULLSCREEN_SHORTCUT;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_RECREATE_SPLIT;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_RETURN_HOME;
@@ -2591,6 +2592,13 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
                    prepareEnterSplitScreen(out);
                    mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
                            TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);
                } else if (inFullscreen && isSplitScreenVisible()) {
                    // If the trigger task is in fullscreen and in split, exit split and place
                    // task on top
                    final int stageType = getStageOfTask(triggerTask.taskId);
                    prepareExitSplitScreen(stageType, out);
                    mSplitTransitions.setDismissTransition(transition, stageType,
                            EXIT_REASON_FULLSCREEN_REQUEST);
                }
            } else if (isOpening && inFullscreen) {
                final int activityType = triggerTask.getActivityType();