summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt27
-rw-r--r--core/java/android/view/Window.java63
-rw-r--r--core/java/com/android/internal/policy/PhoneWindow.java33
-rw-r--r--core/res/res/values/attrs.xml62
-rw-r--r--core/res/res/values/public-staging.xml2
-rw-r--r--core/tests/coretests/src/com/android/internal/policy/PhoneWindowTest.java4
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java2
7 files changed, 155 insertions, 38 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index 4eb73836741a..5bd736fee2f4 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -765,7 +765,7 @@ package android {
field public static final int endY = 16844051; // 0x1010513
field @Deprecated public static final int endYear = 16843133; // 0x101017d
field public static final int enforceNavigationBarContrast = 16844293; // 0x1010605
- field public static final int enforceStatusBarContrast = 16844292; // 0x1010604
+ field @Deprecated public static final int enforceStatusBarContrast = 16844292; // 0x1010604
field public static final int enterFadeDuration = 16843532; // 0x101030c
field public static final int entries = 16842930; // 0x10100b2
field public static final int entryValues = 16843256; // 0x10101f8
@@ -1196,8 +1196,8 @@ package android {
field public static final int multiprocess = 16842771; // 0x1010013
field public static final int name = 16842755; // 0x1010003
field public static final int nativeHeapZeroInitialized = 16844325; // 0x1010625
- field public static final int navigationBarColor = 16843858; // 0x1010452
- field public static final int navigationBarDividerColor = 16844141; // 0x101056d
+ field @Deprecated public static final int navigationBarColor = 16843858; // 0x1010452
+ field @Deprecated public static final int navigationBarDividerColor = 16844141; // 0x101056d
field public static final int navigationContentDescription = 16843969; // 0x10104c1
field public static final int navigationIcon = 16843968; // 0x10104c0
field public static final int navigationMode = 16843471; // 0x10102cf
@@ -1568,7 +1568,7 @@ package android {
field public static final int state_single = 16842915; // 0x10100a3
field public static final int state_window_focused = 16842909; // 0x101009d
field public static final int staticWallpaperPreview = 16843569; // 0x1010331
- field public static final int statusBarColor = 16843857; // 0x1010451
+ field @Deprecated public static final int statusBarColor = 16843857; // 0x1010451
field public static final int stepSize = 16843078; // 0x1010146
field public static final int stopWithTask = 16843626; // 0x101036a
field public static final int streamType = 16843273; // 0x1010209
@@ -1890,6 +1890,7 @@ package android {
field public static final int windowNoDisplay = 16843294; // 0x101021e
field public static final int windowNoMoveAnimation = 16844421; // 0x1010685
field public static final int windowNoTitle = 16842838; // 0x1010056
+ field @FlaggedApi("com.android.window.flags.enforce_edge_to_edge") public static final int windowOptOutEdgeToEdgeEnforcement;
field @Deprecated public static final int windowOverscan = 16843727; // 0x10103cf
field public static final int windowReenterTransition = 16843951; // 0x10104af
field public static final int windowReturnTransition = 16843950; // 0x10104ae
@@ -53619,8 +53620,8 @@ package android.view {
method @NonNull public abstract android.view.LayoutInflater getLayoutInflater();
method protected final int getLocalFeatures();
method public android.media.session.MediaController getMediaController();
- method @ColorInt public abstract int getNavigationBarColor();
- method @ColorInt public int getNavigationBarDividerColor();
+ method @Deprecated @ColorInt public abstract int getNavigationBarColor();
+ method @Deprecated @ColorInt public int getNavigationBarDividerColor();
method @NonNull public android.window.OnBackInvokedDispatcher getOnBackInvokedDispatcher();
method public android.transition.Transition getReenterTransition();
method public android.transition.Transition getReturnTransition();
@@ -53630,7 +53631,7 @@ package android.view {
method public android.transition.Transition getSharedElementReenterTransition();
method public android.transition.Transition getSharedElementReturnTransition();
method public boolean getSharedElementsUseOverlay();
- method @ColorInt public abstract int getStatusBarColor();
+ method @Deprecated @ColorInt public abstract int getStatusBarColor();
method @NonNull public java.util.List<android.graphics.Rect> getSystemGestureExclusionRects();
method public long getTransitionBackgroundFadeDuration();
method public android.transition.TransitionManager getTransitionManager();
@@ -53646,7 +53647,7 @@ package android.view {
method public abstract boolean isFloating();
method public boolean isNavigationBarContrastEnforced();
method public abstract boolean isShortcutKey(int, android.view.KeyEvent);
- method public boolean isStatusBarContrastEnforced();
+ method @Deprecated public boolean isStatusBarContrastEnforced();
method public boolean isWideColorGamut();
method public final void makeActive();
method protected abstract void onActive();
@@ -53678,7 +53679,7 @@ package android.view {
method public abstract void setContentView(android.view.View);
method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
method public abstract void setDecorCaptionShade(int);
- method public void setDecorFitsSystemWindows(boolean);
+ method @Deprecated public void setDecorFitsSystemWindows(boolean);
method protected void setDefaultWindowFormat(int);
method @FlaggedApi("com.android.graphics.hwui.flags.limited_hdr") public void setDesiredHdrHeadroom(@FloatRange(from=0.0f, to=10000.0) float);
method public void setDimAmount(float);
@@ -53700,9 +53701,9 @@ package android.view {
method public void setLocalFocus(boolean, boolean);
method public void setLogo(@DrawableRes int);
method public void setMediaController(android.media.session.MediaController);
- method public abstract void setNavigationBarColor(@ColorInt int);
+ method @Deprecated public abstract void setNavigationBarColor(@ColorInt int);
method public void setNavigationBarContrastEnforced(boolean);
- method public void setNavigationBarDividerColor(@ColorInt int);
+ method @Deprecated public void setNavigationBarDividerColor(@ColorInt int);
method public void setPreferMinimalPostProcessing(boolean);
method public void setReenterTransition(android.transition.Transition);
method public abstract void setResizingCaptionDrawable(android.graphics.drawable.Drawable);
@@ -53714,8 +53715,8 @@ package android.view {
method public void setSharedElementReturnTransition(android.transition.Transition);
method public void setSharedElementsUseOverlay(boolean);
method public void setSoftInputMode(int);
- method public abstract void setStatusBarColor(@ColorInt int);
- method public void setStatusBarContrastEnforced(boolean);
+ method @Deprecated public abstract void setStatusBarColor(@ColorInt int);
+ method @Deprecated public void setStatusBarContrastEnforced(boolean);
method public void setSustainedPerformanceMode(boolean);
method public void setSystemGestureExclusionRects(@NonNull java.util.List<android.graphics.Rect>);
method public abstract void setTitle(CharSequence);
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 7bae7ec6559c..4ba4ee3ffff7 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -1497,13 +1497,21 @@ public abstract class Window {
* {@link View#SYSTEM_UI_LAYOUT_FLAGS} as well the
* {@link WindowManager.LayoutParams#SOFT_INPUT_ADJUST_RESIZE} flag and fits content according
* to these flags.
- * </p>
+ *
* <p>
* If set to {@code false}, the framework will not fit the content view to the insets and will
* just pass through the {@link WindowInsets} to the content view.
- * </p>
+ *
+ * <p>
+ * If the app targets
+ * {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM VANILLA_ICE_CREAM} or above,
+ * the behavior will be like setting this to {@code false}, and cannot be changed.
+ *
* @param decorFitsSystemWindows Whether the decor view should fit root-level content views for
* insets.
+ * @deprecated Make space in the container views to prevent the critical elements from getting
+ * obscured by {@link WindowInsets.Type#systemBars()} or
+ * {@link WindowInsets.Type#displayCutout()} instead.
*/
public void setDecorFitsSystemWindows(boolean decorFitsSystemWindows) {
}
@@ -2597,7 +2605,9 @@ public abstract class Window {
/**
* @return the color of the status bar.
+ * @deprecated This is no longer needed since the setter is deprecated.
*/
+ @Deprecated
@ColorInt
public abstract int getStatusBarColor();
@@ -2614,13 +2624,29 @@ public abstract class Window {
* {@link android.view.View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}.
* <p>
* The transitionName for the view background will be "android:status:background".
- * </p>
+ *
+ * <p>
+ * If the color is transparent and the window enforces the status bar contrast, the system
+ * will determine whether a scrim is necessary and draw one on behalf of the app to ensure
+ * that the status bar has enough contrast with the contents of this app, and set an appropriate
+ * effective bar background accordingly.
+ *
+ * <p>
+ * If the app targets
+ * {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM VANILLA_ICE_CREAM} or above,
+ * the color will be transparent and cannot be changed.
+ *
+ * @see #setNavigationBarContrastEnforced
+ * @deprecated Draw proper background behind {@link WindowInsets.Type#statusBars()}} instead.
*/
+ @Deprecated
public abstract void setStatusBarColor(@ColorInt int color);
/**
* @return the color of the navigation bar.
+ * @deprecated This is no longer needed since the setter is deprecated.
*/
+ @Deprecated
@ColorInt
public abstract int getNavigationBarColor();
@@ -2637,9 +2663,24 @@ public abstract class Window {
* {@link android.view.View#SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION}.
* <p>
* The transitionName for the view background will be "android:navigation:background".
- * </p>
+ *
+ * <p>
+ * If the color is transparent and the window enforces the navigation bar contrast, the system
+ * will determine whether a scrim is necessary and draw one on behalf of the app to ensure that
+ * the navigation bar has enough contrast with the contents of this app, and set an appropriate
+ * effective bar background accordingly.
+ *
+ * <p>
+ * If the app targets
+ * {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM VANILLA_ICE_CREAM} or above,
+ * the color will be transparent and cannot be changed.
+ *
* @attr ref android.R.styleable#Window_navigationBarColor
+ * @see #setNavigationBarContrastEnforced
+ * @deprecated Draw proper background behind {@link WindowInsets.Type#navigationBars()} or
+ * {@link WindowInsets.Type#tappableElement()} instead.
*/
+ @Deprecated
public abstract void setNavigationBarColor(@ColorInt int color);
/**
@@ -2651,9 +2692,17 @@ public abstract class Window {
* {@link android.view.WindowManager.LayoutParams#FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS} and
* {@link android.view.WindowManager.LayoutParams#FLAG_TRANSLUCENT_NAVIGATION} must not be set.
*
+ * <p>
+ * If the app targets
+ * {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM VANILLA_ICE_CREAM} or above,
+ * the color will be transparent and cannot be changed.
+ *
* @param dividerColor The color of the thin line.
* @attr ref android.R.styleable#Window_navigationBarDividerColor
+ * @deprecated Draw proper background behind {@link WindowInsets.Type#navigationBars()} or
+ * {@link WindowInsets.Type#tappableElement()} instead.
*/
+ @Deprecated
public void setNavigationBarDividerColor(@ColorInt int dividerColor) {
}
@@ -2663,7 +2712,9 @@ public abstract class Window {
* @return The color of the navigation bar divider color.
* @see #setNavigationBarColor(int)
* @attr ref android.R.styleable#Window_navigationBarDividerColor
+ * @deprecated This is no longer needed since the setter is deprecated.
*/
+ @Deprecated
public @ColorInt int getNavigationBarDividerColor() {
return 0;
}
@@ -2682,7 +2733,9 @@ public abstract class Window {
* @see android.R.attr#enforceStatusBarContrast
* @see #isStatusBarContrastEnforced
* @see #setStatusBarColor
+ * @deprecated Draw proper background behind {@link WindowInsets.Type#statusBars()}} instead.
*/
+ @Deprecated
public void setStatusBarContrastEnforced(boolean ensureContrast) {
}
@@ -2697,7 +2750,9 @@ public abstract class Window {
* @see android.R.attr#enforceStatusBarContrast
* @see #setStatusBarContrastEnforced
* @see #setStatusBarColor
+ * @deprecated This is not needed since the setter is deprecated.
*/
+ @Deprecated
public boolean isStatusBarContrastEnforced() {
return false;
}
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index b4f9ee3b0b74..523924566dd7 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -120,7 +120,6 @@ 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;
@@ -369,8 +368,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
boolean mDecorFitsSystemWindows = true;
- @VisibleForTesting
- public final boolean mEdgeToEdgeEnforced;
+ private boolean mEdgeToEdgeEnforced;
private final ProxyOnBackInvokedDispatcher mProxyOnBackInvokedDispatcher;
@@ -390,11 +388,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
mProxyOnBackInvokedDispatcher = new ProxyOnBackInvokedDispatcher(context);
mAllowFloatingWindowsFillScreen = context.getResources().getBoolean(
com.android.internal.R.bool.config_allowFloatingWindowsFillScreen);
- mEdgeToEdgeEnforced = isEdgeToEdgeEnforced(context.getApplicationInfo(), true /* local */);
- if (mEdgeToEdgeEnforced) {
- getAttributes().privateFlags |= PRIVATE_FLAG_EDGE_TO_EDGE_ENFORCED;
- mDecorFitsSystemWindows = false;
- }
}
/**
@@ -436,15 +429,18 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
*
* @param info The application to query.
* @param local Whether this is called from the process of the given application.
+ * @param windowStyle The style of the window.
* @return {@code true} if edge-to-edge is enforced. Otherwise, {@code false}.
*/
- public static boolean isEdgeToEdgeEnforced(ApplicationInfo info, boolean local) {
- return info.targetSdkVersion >= ENFORCE_EDGE_TO_EDGE_SDK_VERSION
- || (Flags.enforceEdgeToEdge() && (local
- // Calling this doesn't require a permission.
- ? CompatChanges.isChangeEnabled(ENFORCE_EDGE_TO_EDGE)
- // Calling this requires permissions.
- : info.isChangeEnabled(ENFORCE_EDGE_TO_EDGE)));
+ public static boolean isEdgeToEdgeEnforced(ApplicationInfo info, boolean local,
+ TypedArray windowStyle) {
+ return !windowStyle.getBoolean(R.styleable.Window_windowOptOutEdgeToEdgeEnforcement, false)
+ && (info.targetSdkVersion >= ENFORCE_EDGE_TO_EDGE_SDK_VERSION
+ || (Flags.enforceEdgeToEdge() && (local
+ // Calling this doesn't require a permission.
+ ? CompatChanges.isChangeEnabled(ENFORCE_EDGE_TO_EDGE)
+ // Calling this requires permissions.
+ : info.isChangeEnabled(ENFORCE_EDGE_TO_EDGE))));
}
@Override
@@ -2470,6 +2466,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
System.out.println(s);
}
+ mEdgeToEdgeEnforced = isEdgeToEdgeEnforced(
+ getContext().getApplicationInfo(), true /* local */, a);
+ if (mEdgeToEdgeEnforced) {
+ getAttributes().privateFlags |= PRIVATE_FLAG_EDGE_TO_EDGE_ENFORCED;
+ mDecorFitsSystemWindows = false;
+ }
+
mIsFloating = a.getBoolean(R.styleable.Window_windowIsFloating, false);
int flagsToUpdate = (FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR)
& (~getForcedWindowFlags());
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index e7b1d09d6ab0..908eeeb9d7fd 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2292,7 +2292,17 @@
{@link android.R.attr#windowDrawsSystemBarBackgrounds} and the status bar must not
have been requested to be translucent with
{@link android.R.attr#windowTranslucentStatus}.
- Corresponds to {@link android.view.Window#setStatusBarColor(int)}. -->
+ Corresponds to {@link android.view.Window#setStatusBarColor(int)}.
+ <p>If the color is transparent and the window enforces the status bar contrast, the
+ system will determine whether a scrim is necessary and draw one on behalf of the app to
+ ensure that the status bar has enough contrast with the contents of this app, and set
+ an appropriate effective bar background accordingly.
+ See: {@link android.R.attr#enforceStatusBarContrast}
+ <p>If the app targets
+ {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM VANILLA_ICE_CREAM} or above,
+ this attribute is ignored.
+ @deprecated Draw proper background behind
+ {@link android.view.WindowInsets.Type#statusBars()}} instead. -->
<attr name="statusBarColor" format="color" />
<!-- The color for the navigation bar. If the color is not opaque, consider setting
@@ -2302,7 +2312,18 @@
{@link android.R.attr#windowDrawsSystemBarBackgrounds} and the navigation bar must not
have been requested to be translucent with
{@link android.R.attr#windowTranslucentNavigation}.
- Corresponds to {@link android.view.Window#setNavigationBarColor(int)}. -->
+ Corresponds to {@link android.view.Window#setNavigationBarColor(int)}.
+ <p>If the color is transparent and the window enforces the navigation bar contrast, the
+ system will determine whether a scrim is necessary and draw one on behalf of the app to
+ ensure that the navigation bar has enough contrast with the contents of this app, and
+ set an appropriate effective bar background accordingly.
+ See: {@link android.R.attr#enforceNavigationBarContrast}
+ <p>If the app targets
+ {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM VANILLA_ICE_CREAM} or above,
+ this attribute is ignored.
+ @deprecated Draw proper background behind
+ {@link android.view.WindowInsets.Type#navigationBars()} or
+ {@link android.view.WindowInsets.Type#tappableElement()} instead. -->
<attr name="navigationBarColor" format="color" />
<!-- Shows a thin line of the specified color between the navigation bar and the app
@@ -2311,7 +2332,13 @@
{@link android.R.attr#windowDrawsSystemBarBackgrounds} and the navigation bar must not
have been requested to be translucent with
{@link android.R.attr#windowTranslucentNavigation}.
- Corresponds to {@link android.view.Window#setNavigationBarDividerColor(int)}. -->
+ Corresponds to {@link android.view.Window#setNavigationBarDividerColor(int)}.
+ <p>If the app targets
+ {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM VANILLA_ICE_CREAM} or above,
+ this attribute is ignored.
+ @deprecated Draw proper background behind
+ {@link android.view.WindowInsets.Type#navigationBars()} or
+ {@link android.view.WindowInsets.Type#tappableElement()} instead. -->
<attr name="navigationBarDividerColor" format="color" />
<!-- Sets whether the system should ensure that the status bar has enough
@@ -2327,7 +2354,9 @@
<p>If the app does not target at least {@link android.os.Build.VERSION_CODES#Q Q},
this attribute is ignored.
- @see android.view.Window#setStatusBarContrastEnforced -->
+ @see android.view.Window#setStatusBarContrastEnforced
+ @deprecated Draw proper background behind
+ {@link android.view.WindowInsets.Type#statusBars()}} instead. -->
<attr name="enforceStatusBarContrast" format="boolean" />
<!-- Sets whether the system should ensure that the navigation bar has enough
@@ -2483,6 +2512,31 @@
<!-- The icon is shown unless the launching app specified SPLASH_SCREEN_STYLE_EMPTY -->
<enum name="icon_preferred" value="1" />
</attr>
+
+ <!-- Flag indicating whether this window would opt-out the edge-to-edge enforcement.
+
+ <p>If this is false, the edge-to-edge enforcement will be applied to the window if its
+ app targets
+ {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM VANILLA_ICE_CREAM} or above.
+ The affected behaviors are:
+ <ul>
+ <li>The framework will not fit the content view to the insets and will just pass
+ through the {@link android.view.WindowInsets} to the content view, as if calling
+ {@link android.view.Window#setDecorFitsSystemWindows(boolean)} with false.
+ <li>{@link android.view.WindowManager.LayoutParams#layoutInDisplayCutoutMode} of
+ the non-floating windows will be set to {@link
+ android.view.WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS}.
+ Changing it to other values will cause {@link lang.IllegalArgumentException}.
+ <li>The framework will set {@link android.R.attr#statusBarColor},
+ {@link android.R.attr#navigationBarColor}, and
+ {@link android.R.attr#navigationBarDividerColor} to transparent.
+ </ul>
+
+ <p>If this is true, the edge-to-edge enforcement won't be applied. However, this
+ attribute will be deprecated and disabled in a future SDK level.
+
+ <p>This is false by default. -->
+ <attr name="windowOptOutEdgeToEdgeEnforcement" format="boolean"/>
</declare-styleable>
<!-- The set of attributes that describe a AlertDialog's theme. -->
diff --git a/core/res/res/values/public-staging.xml b/core/res/res/values/public-staging.xml
index 81a8908b37df..4799c3769b0f 100644
--- a/core/res/res/values/public-staging.xml
+++ b/core/res/res/values/public-staging.xml
@@ -147,6 +147,8 @@
<public name="useBoundsForWidth"/>
<!-- @FlaggedApi("android.nfc.Flags.FLAG_NFC_READ_POLLING_LOOP") -->
<public name="autoTransact"/>
+ <!-- @FlaggedApi("com.android.window.flags.enforce_edge_to_edge") -->
+ <public name="windowOptOutEdgeToEdgeEnforcement"/>
</staging-public-group>
<staging-public-group type="id" first-id="0x01bc0000">
diff --git a/core/tests/coretests/src/com/android/internal/policy/PhoneWindowTest.java b/core/tests/coretests/src/com/android/internal/policy/PhoneWindowTest.java
index de55b0759edd..3df3b9d2c555 100644
--- a/core/tests/coretests/src/com/android/internal/policy/PhoneWindowTest.java
+++ b/core/tests/coretests/src/com/android/internal/policy/PhoneWindowTest.java
@@ -20,6 +20,7 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_EDGE_TO_EDGE_ENFORCED;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
@@ -63,7 +64,8 @@ public final class PhoneWindowTest {
createPhoneWindowWithTheme(R.style.LayoutInDisplayCutoutModeUnset);
installDecor();
- if (mPhoneWindow.mEdgeToEdgeEnforced && !mPhoneWindow.isFloating()) {
+ if ((mPhoneWindow.getAttributes().privateFlags & PRIVATE_FLAG_EDGE_TO_EDGE_ENFORCED) != 0
+ && !mPhoneWindow.isFloating()) {
assertThat(mPhoneWindow.getAttributes().layoutInDisplayCutoutMode,
is(LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS));
} else {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java
index a666e208a1b9..bfb60c0f4fc8 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java
@@ -253,7 +253,7 @@ public class SplashscreenContentDrawer {
: taskInfo.topActivityInfo;
params.layoutInDisplayCutoutMode = a.getInt(
R.styleable.Window_windowLayoutInDisplayCutoutMode,
- PhoneWindow.isEdgeToEdgeEnforced(activityInfo.applicationInfo, false /* local */)
+ PhoneWindow.isEdgeToEdgeEnforced(activityInfo.applicationInfo, false /* local */, a)
? WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
: params.layoutInDisplayCutoutMode);
params.windowAnimations = a.getResourceId(R.styleable.Window_windowAnimationStyle, 0);