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

Commit 2b253d43 authored by Tiger's avatar Tiger Committed by Tiger Huang
Browse files

Make non-floating PhoneWindow extend into display cutout insets

The exsiting logic already enforces non-floating PhoneWindow to extends
into system bar areas by default. This CL makes it extend into the
cutout area as well if the edge-to-edge enforcement is enabled.

Bug: 309578419
Test: atest PhoneWindowTest
Change-Id: Id264ba939eb04634bb1916551b081b30112278ae
parent 3949afa6
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -118,6 +118,7 @@ import android.window.OnBackInvokedDispatcher;
import android.window.ProxyOnBackInvokedDispatcher;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.view.menu.ContextMenuBuilder;
import com.android.internal.view.menu.IconMenuPresenter;
import com.android.internal.view.menu.ListMenuPresenter;
@@ -374,7 +375,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {

    boolean mDecorFitsSystemWindows = true;

    private final boolean mDefaultEdgeToEdge;
    @VisibleForTesting
    public final boolean mDefaultEdgeToEdge;

    private final ProxyOnBackInvokedDispatcher mProxyOnBackInvokedDispatcher;

@@ -2448,6 +2450,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
        // Apply data from current theme.

        TypedArray a = getWindowStyle();
        WindowManager.LayoutParams params = getAttributes();

        if (false) {
            System.out.println("From style:");
@@ -2467,8 +2470,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
            setFlags(0, flagsToUpdate);
        } else {
            setFlags(FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR, flagsToUpdate);
            getAttributes().setFitInsetsSides(0);
            getAttributes().setFitInsetsTypes(0);
            params.setFitInsetsSides(0);
            params.setFitInsetsTypes(0);
            if (mDefaultEdgeToEdge) {
                params.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
            }
        }

        if (a.getBoolean(R.styleable.Window_windowNoTitle, false)) {
@@ -2586,8 +2592,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                    R.styleable.Window_enforceNavigationBarContrast, true);
        }

        WindowManager.LayoutParams params = getAttributes();

        // Non-floating windows on high end devices must put up decor beneath the system bars and
        // therefore must know about visibility changes of those.
        if (!mIsFloating) {
+7 −2
Original line number Diff line number Diff line
@@ -63,9 +63,14 @@ public final class PhoneWindowTest {
        createPhoneWindowWithTheme(R.style.LayoutInDisplayCutoutModeUnset);
        installDecor();

        if (mPhoneWindow.mDefaultEdgeToEdge && !mPhoneWindow.isFloating()) {
            assertThat(mPhoneWindow.getAttributes().layoutInDisplayCutoutMode,
                    is(LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS));
        } else {
            assertThat(mPhoneWindow.getAttributes().layoutInDisplayCutoutMode,
                    is(LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT));
        }
    }

    @Test
    public void layoutInDisplayCutoutMode_default() throws Exception {
+1 −1
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ public class SplashscreenContentDrawer {
        }
        params.layoutInDisplayCutoutMode = a.getInt(
                R.styleable.Window_windowLayoutInDisplayCutoutMode,
                params.layoutInDisplayCutoutMode);
                WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS);
        params.windowAnimations = a.getResourceId(R.styleable.Window_windowAnimationStyle, 0);
        a.recycle();