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

Commit 55b183e7 authored by Jorge Gil's avatar Jorge Gil Committed by Android (Google) Code Review
Browse files

Merge "Do not force-show system bars in desktop's full immersive mode" into main

parents 09a28a40 e38140fc
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.L
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.window.flags.Flags.enableFullyImmersiveInDesktop;

import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -2515,10 +2516,16 @@ public class DisplayPolicy {
                defaultTaskDisplayArea.getRootTask(task -> task.isVisible()
                        && task.getTopLeafTask().getAdjacentTask() != null)
                        != null;
        final boolean freeformRootTaskVisible =
                defaultTaskDisplayArea.isRootTaskVisible(WINDOWING_MODE_FREEFORM);

        getInsetsPolicy().updateSystemBars(win, adjacentTasksVisible, freeformRootTaskVisible);
        final Task topFreeformTask = defaultTaskDisplayArea
                .getTopRootTaskInWindowingMode(WINDOWING_MODE_FREEFORM);
        final boolean freeformRootTaskVisible = topFreeformTask != null
                && topFreeformTask.isVisible();
        final boolean inNonFullscreenFreeformMode = freeformRootTaskVisible
                && !topFreeformTask.getBounds().equals(mDisplayContent.getBounds());

        getInsetsPolicy().updateSystemBars(win, adjacentTasksVisible,
                enableFullyImmersiveInDesktop()
                        ? inNonFullscreenFreeformMode : freeformRootTaskVisible);

        final boolean topAppHidesStatusBar = topAppHidesSystemBar(Type.statusBars());
        if (getStatusBar() != null) {
+3 −2
Original line number Diff line number Diff line
@@ -628,8 +628,9 @@ class InsetsPolicy {
        return (mForcedShowingTypes & types) == types;
    }

    void updateSystemBars(WindowState win, boolean inSplitScreenMode, boolean inFreeformMode) {
        mForcedShowingTypes = (inSplitScreenMode || inFreeformMode)
    void updateSystemBars(WindowState win, boolean inSplitScreenMode,
            boolean inNonFullscreenFreeformMode) {
        mForcedShowingTypes = (inSplitScreenMode || inNonFullscreenFreeformMode)
                ? (Type.statusBars() | Type.navigationBars())
                : forceShowingNavigationBars(win)
                        ? Type.navigationBars()
+36 −0
Original line number Diff line number Diff line
@@ -41,7 +41,10 @@ import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.verify;

import android.app.StatusBarManager;
import android.graphics.Rect;
import android.os.Binder;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.view.InsetsFrameProvider;
import android.view.InsetsSource;
@@ -52,6 +55,7 @@ import android.view.WindowInsets;
import androidx.test.filters.SmallTest;

import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.window.flags.Flags;

import org.junit.Before;
import org.junit.Test;
@@ -95,6 +99,7 @@ public class InsetsPolicyTest extends WindowTestsBase {
    }

    @Test
    @DisableFlags(Flags.FLAG_ENABLE_FULLY_IMMERSIVE_IN_DESKTOP)
    public void testControlsForDispatch_freeformTaskVisible() {
        addStatusBar();
        addNavigationBar();
@@ -107,6 +112,37 @@ public class InsetsPolicyTest extends WindowTestsBase {
        assertNull(controls);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_FULLY_IMMERSIVE_IN_DESKTOP)
    public void testControlsForDispatch_fullscreenFreeformTaskVisible() {
        addStatusBar();
        addNavigationBar();

        final WindowState win = createWindow(null, WINDOWING_MODE_FREEFORM,
                ACTIVITY_TYPE_STANDARD, TYPE_APPLICATION, mDisplayContent, "app");
        win.setBounds(new Rect());
        final InsetsSourceControl[] controls = addWindowAndGetControlsForDispatch(win);

        // The freeform (w/fullscreen bounds) app window can control both system bars.
        assertNotNull(controls);
        assertEquals(2, controls.length);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_FULLY_IMMERSIVE_IN_DESKTOP)
    public void testControlsForDispatch_nonFullscreenFreeformTaskVisible() {
        addStatusBar();
        addNavigationBar();

        final WindowState win = createWindow(null, WINDOWING_MODE_FREEFORM,
                ACTIVITY_TYPE_STANDARD, TYPE_APPLICATION, mDisplayContent, "app");
        win.getTask().setBounds(new Rect(1, 1, 10, 10));
        final InsetsSourceControl[] controls = addWindowAndGetControlsForDispatch(win);

        // The freeform (but not fullscreen bounds) app window must not control any system bars.
        assertNull(controls);
    }

    @Test
    public void testControlsForDispatch_forceStatusBarVisible() {
        addStatusBar().mAttrs.forciblyShownTypes |= statusBars();