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

Commit dd88afd0 authored by Maryam Dehaini's avatar Maryam Dehaini
Browse files

Clear "restore" mode when setting windowing mode

Whenever Task#setWindowingMode is called,
mMultiwindowRestoreWindowingMode is cleared.
Activity#requestMultiwindowFullscreen will now set the task's
mMultiwindowRestoreWindowingMode after setting the new windowing mode
when requesting to enter freefrom. That way, the request fullscreen api
can only restore the windowing mode if no windowing mode change occurs
between the time a task requests to enter and exit fullscreen.

Bug: 331649648
Test: Enter fullscreen using api, exit and re-enter fullscreen using the
caption handle, attemt to exit fullscreen using the api. App should stay
in fullscreen.

Change-Id: Ia379d8dc4b9a57352a35b0504815a88f1c9fdbd6
parent 021ecf5c
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -1254,14 +1254,16 @@ class ActivityClientController extends IActivityClientController.Stub {
    private static void executeMultiWindowFullscreenRequest(int fullscreenRequest, Task requester) {
        final int targetWindowingMode;
        if (fullscreenRequest == FULLSCREEN_MODE_REQUEST_ENTER) {
            requester.mMultiWindowRestoreWindowingMode =
                    requester.getRequestedOverrideWindowingMode();
            final int restoreWindowingMode = requester.getRequestedOverrideWindowingMode();
            targetWindowingMode = WINDOWING_MODE_FULLSCREEN;
            requester.setWindowingMode(targetWindowingMode);
            // The restore windowing mode must be set after the windowing mode is set since
            // Task#setWindowingMode resets the restore windowing mode to WINDOWING_MODE_INVALID.
            requester.mMultiWindowRestoreWindowingMode = restoreWindowingMode;
        } else {
            targetWindowingMode = requester.mMultiWindowRestoreWindowingMode;
            requester.mMultiWindowRestoreWindowingMode = INVALID_WINDOWING_MODE;
        }
            requester.setWindowingMode(targetWindowingMode);
        }
        if (targetWindowingMode == WINDOWING_MODE_FULLSCREEN) {
            requester.setBounds(null);
        }
+5 −1
Original line number Diff line number Diff line
@@ -4681,9 +4681,10 @@ class Task extends TaskFragment {

    @Override
    public void setWindowingMode(int windowingMode) {
        // Calling Task#setWindowingMode() for leaf task since this is the a specialization of
        // Calling Task#setWindowingMode() for leaf task since this is a specialization of
        // {@link #setWindowingMode(int)} for root task.
        if (!isRootTask()) {
            mMultiWindowRestoreWindowingMode = INVALID_WINDOWING_MODE;
            super.setWindowingMode(windowingMode);
            return;
        }
@@ -4727,6 +4728,9 @@ class Task extends TaskFragment {
            return;
        }

        // Reset multi-window restore windowing mode.
        mMultiWindowRestoreWindowingMode = INVALID_WINDOWING_MODE;

        final ActivityRecord topActivity = getTopNonFinishingActivity();

        // For now, assume that the root task's windowing mode is what will actually be used