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

Commit 27470e7f authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Port desktop-first policy’s top-fullscreen check to LPM" into main

parents 3c2580fc 83f15c35
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.wm;

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_UNDEFINED;
@@ -416,6 +417,22 @@ class DesktopModeLaunchParamsModifier implements LaunchParamsModifier {
            return WINDOWING_MODE_FULLSCREEN;
        }

        if (DesktopExperienceFlags.ENABLE_DESKTOP_FIRST_TOP_FULLSCREEN_BUGFIX.isTrue()) {
            final Task launchRootCandidate = taskDisplayArea.getLaunchRootTask(
                    WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD,
                    /* options= */ null, /* sourceTask= */ null, /* launchFlags= */ 0
            );
            final boolean isAnyDeskActive = launchRootCandidate != null
                    && launchRootCandidate.mCreatedByOrganizer
                    && launchRootCandidate.getWindowingMode() == WINDOWING_MODE_FREEFORM;
            final boolean isHomeVisible = taskDisplayArea.getDisplayContent()
                    .getTask(t -> t.isActivityTypeHome() && t.isVisibleRequested()) != null;
            if (!isAnyDeskActive && !isHomeVisible) {
                appendLog("desktop-first-but-fullscreen-visible");
                return WINDOWING_MODE_FULLSCREEN;
            }
        }

        appendLog("forced-freeform-in-desktop-first");
        return WINDOWING_MODE_FREEFORM;
    }
+99 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.wm;

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.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
@@ -1991,6 +1992,11 @@ public class DesktopModeLaunchParamsModifierTests extends

        final DisplayContent dc = createDisplayContent(ORIENTATION_LANDSCAPE,
                LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM);
        // Make home visible to trigger desktop-first policy.
        final Task homeTask = new TaskBuilder(mSupervisor).setActivityType(
                ACTIVITY_TYPE_HOME).setWindowingMode(WINDOWING_MODE_FULLSCREEN).setDisplay(
                dc).build();
        homeTask.setVisibleRequested(true);
        final Task launchingTask = new TaskBuilder(mSupervisor)
                .setWindowingMode(WINDOWING_MODE_FULLSCREEN)
                .setDisplay(dc)
@@ -2004,6 +2010,7 @@ public class DesktopModeLaunchParamsModifierTests extends
    @Test
    @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_FIRST_POLICY_IN_LPM,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS})
    @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_FIRST_TOP_FULLSCREEN_BUGFIX)
    public void testCalculate_desktopFirstPolicy_taskNull_forcesFreeform() {
        setupDesktopModeLaunchParamsModifier();

@@ -2020,6 +2027,95 @@ public class DesktopModeLaunchParamsModifierTests extends
        assertEquals(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_FIRST_POLICY_IN_LPM,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS,
            Flags.FLAG_ENABLE_DESKTOP_FIRST_TOP_FULLSCREEN_BUGFIX})
    public void testCalculate_desktopFirstPolicy_taskNull_activeDeskInvisibleHome_forceFreeform() {
        setupDesktopModeLaunchParamsModifier();
        when(mTarget.isEnteringDesktopMode(any(), any(), any(), any(), any())).thenCallRealMethod();
        final DisplayContent dc = createDisplayContent(ORIENTATION_LANDSCAPE,
                LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM);
        final Task deskRoot = new TaskBuilder(mSupervisor).setActivityType(ACTIVITY_TYPE_STANDARD)
                .setWindowingMode(WINDOWING_MODE_FREEFORM).setDisplay(dc)
                .setCreatedByOrganizer(true).build();

        // Activate a desk.
        dc.getDefaultTaskDisplayArea().setLaunchRootTask(deskRoot,
                new int[]{WINDOWING_MODE_FREEFORM}, new int[]{ACTIVITY_TYPE_STANDARD});

        assertEquals(RESULT_DONE,
                new CalculateRequestBuilder().setTask(null).setOptions(
                        ActivityOptions.makeBasic().setLaunchDisplayId(
                                dc.getDisplayId())).calculate());
        assertEquals(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_FIRST_POLICY_IN_LPM,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS,
            Flags.FLAG_ENABLE_DESKTOP_FIRST_TOP_FULLSCREEN_BUGFIX})
    public void testCalculate_desktopFirstPolicy_taskNull_activeDeskVisibleHome_forceFreeform() {
        setupDesktopModeLaunchParamsModifier();
        when(mTarget.isEnteringDesktopMode(any(), any(), any(), any(), any())).thenCallRealMethod();
        final DisplayContent dc = createDisplayContent(ORIENTATION_LANDSCAPE,
                LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM);
        final Task deskRoot = new TaskBuilder(mSupervisor).setActivityType(ACTIVITY_TYPE_STANDARD)
                .setWindowingMode(WINDOWING_MODE_FREEFORM).setDisplay(dc)
                .setCreatedByOrganizer(true).build();
        final Task homeTask = new TaskBuilder(mSupervisor).setActivityType(
                ACTIVITY_TYPE_HOME).setWindowingMode(WINDOWING_MODE_FULLSCREEN).setDisplay(
                dc).build();
        homeTask.setVisibleRequested(true);

        // Activate a desk.
        dc.getDefaultTaskDisplayArea().setLaunchRootTask(deskRoot,
                new int[]{WINDOWING_MODE_FREEFORM}, new int[]{ACTIVITY_TYPE_STANDARD});

        assertEquals(RESULT_DONE,
                new CalculateRequestBuilder().setTask(null).setOptions(
                        ActivityOptions.makeBasic().setLaunchDisplayId(
                                dc.getDisplayId())).calculate());
        assertEquals(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_FIRST_POLICY_IN_LPM,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS,
            Flags.FLAG_ENABLE_DESKTOP_FIRST_TOP_FULLSCREEN_BUGFIX})
    public void testCalculate_desktopFirstPolicy_taskNull_inactiveDeskVisibleHome_forceFreeform() {
        setupDesktopModeLaunchParamsModifier();
        when(mTarget.isEnteringDesktopMode(any(), any(), any(), any(), any())).thenCallRealMethod();
        final DisplayContent dc = createDisplayContent(ORIENTATION_LANDSCAPE,
                LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM);
        final Task homeTask = new TaskBuilder(mSupervisor).setActivityType(ACTIVITY_TYPE_HOME)
                .setWindowingMode(WINDOWING_MODE_FULLSCREEN).setDisplay(dc).build();
        homeTask.setVisibleRequested(true);

        assertEquals(RESULT_DONE,
                new CalculateRequestBuilder().setTask(null).setOptions(
                        ActivityOptions.makeBasic().setLaunchDisplayId(
                                dc.getDisplayId())).calculate());
        assertEquals(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_FIRST_POLICY_IN_LPM,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS,
            Flags.FLAG_ENABLE_DESKTOP_FIRST_TOP_FULLSCREEN_BUGFIX})
    public void testCalculate_desktopFirstPolicy_taskNull_inactiveDeskInvisibleHome_fullscreen() {
        setupDesktopModeLaunchParamsModifier();
        when(mTarget.isEnteringDesktopMode(any(), any(), any(), any(), any())).thenCallRealMethod();
        final DisplayContent dc = createDisplayContent(ORIENTATION_LANDSCAPE,
                LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM);

        assertEquals(RESULT_DONE,
                new CalculateRequestBuilder().setTask(null).setOptions(
                        ActivityOptions.makeBasic().setLaunchDisplayId(
                                dc.getDisplayId())).calculate());
        assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode);
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_FIRST_POLICY_IN_LPM,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS})
@@ -2043,6 +2139,7 @@ public class DesktopModeLaunchParamsModifierTests extends
    @Test
    @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_FIRST_POLICY_IN_LPM,
            Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS})
    @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_FIRST_TOP_FULLSCREEN_BUGFIX)
    public void testCalculate_desktopFirstPolicy_fullscreenSourceTask_forcesFreeform() {
        setupDesktopModeLaunchParamsModifier();
        when(mTarget.isEnteringDesktopMode(any(), any(), any(), any(), any())).thenCallRealMethod();