Loading core/java/android/view/WindowManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ import android.window.InputTransferToken; import android.window.TaskFpsCallback; import android.window.TrustedPresentationThresholds; import com.android.internal.R; import com.android.window.flags.Flags; import java.lang.annotation.ElementType; Loading Loading @@ -3467,6 +3468,13 @@ public interface WindowManager extends ViewManager { */ public static final int PRIVATE_FLAG_CONSUME_IME_INSETS = 1 << 25; /** * Flag to indicate that the window has the * {@link R.styleable.Window_windowOptOutEdgeToEdgeEnforcement} flag set. * @hide */ public static final int PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE = 1 << 26; /** * Flag to indicate that the window is controlling how it fits window insets on its own. * So we don't need to adjust its attributes for fitting window insets. Loading Loading @@ -3540,6 +3548,7 @@ public interface WindowManager extends ViewManager { PRIVATE_FLAG_NOT_MAGNIFIABLE, PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC, PRIVATE_FLAG_CONSUME_IME_INSETS, PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE, PRIVATE_FLAG_FIT_INSETS_CONTROLLED, PRIVATE_FLAG_TRUSTED_OVERLAY, PRIVATE_FLAG_INSET_PARENT_FRAME_BY_IME, Loading Loading @@ -3643,6 +3652,10 @@ public interface WindowManager extends ViewManager { mask = PRIVATE_FLAG_CONSUME_IME_INSETS, equals = PRIVATE_FLAG_CONSUME_IME_INSETS, name = "CONSUME_IME_INSETS"), @ViewDebug.FlagToString( mask = PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE, equals = PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE, name = "OPTOUT_EDGE_TO_EDGE"), @ViewDebug.FlagToString( mask = PRIVATE_FLAG_FIT_INSETS_CONTROLLED, equals = PRIVATE_FLAG_FIT_INSETS_CONTROLLED, Loading core/java/android/view/WindowManagerGlobal.java +13 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.view; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import android.animation.ValueAnimator; Loading @@ -26,6 +28,7 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.HardwareRenderer; import android.os.Binder; import android.os.Build; Loading @@ -45,6 +48,7 @@ import android.window.ITrustedPresentationListener; import android.window.InputTransferToken; import android.window.TrustedPresentationThresholds; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.FastPrintWriter; Loading Loading @@ -356,12 +360,12 @@ public final class WindowManagerGlobal { } final WindowManager.LayoutParams wparams = (WindowManager.LayoutParams) params; final Context context = view.getContext(); if (parentWindow != null) { parentWindow.adjustLayoutParamsForSubWindow(wparams); } else { // If there's no parent, then hardware acceleration for this view is // set from the application's hardware acceleration setting. final Context context = view.getContext(); if (context != null && (context.getApplicationInfo().flags & ApplicationInfo.FLAG_HARDWARE_ACCELERATED) != 0) { Loading @@ -369,6 +373,14 @@ public final class WindowManagerGlobal { } } if (context != null && wparams.type > LAST_APPLICATION_WINDOW) { final TypedArray styles = context.obtainStyledAttributes(R.styleable.Window); if (styles.getBoolean(R.styleable.Window_windowOptOutEdgeToEdgeEnforcement, false)) { wparams.privateFlags |= PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE; } styles.recycle(); } ViewRootImpl root; View panelParentView = null; Loading services/core/java/com/android/server/wm/WindowState.java +20 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M import static android.view.WindowManager.LayoutParams.MATCH_PARENT; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NOT_MAGNIFIABLE; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; Loading Loading @@ -2989,6 +2990,25 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return (mAttrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0; } @Override void resolveOverrideConfiguration(Configuration newParentConfig) { super.resolveOverrideConfiguration(newParentConfig); if (mActivityRecord != null) { // Let the activity decide whether to apply the size override. return; } final Configuration resolvedConfig = getResolvedOverrideConfiguration(); resolvedConfig.seq = newParentConfig.seq; applySizeOverrideIfNeeded( getDisplayContent(), mSession.mProcess.mInfo, newParentConfig, resolvedConfig, (mAttrs.privateFlags & PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE) != 0, false /* hasFixedRotationTransform */, false /* hasCompatDisplayInsets */); } /** * @return {@code true} if this window can receive touches based on among other things, * windowing state and recents animation state. Loading Loading
core/java/android/view/WindowManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ import android.window.InputTransferToken; import android.window.TaskFpsCallback; import android.window.TrustedPresentationThresholds; import com.android.internal.R; import com.android.window.flags.Flags; import java.lang.annotation.ElementType; Loading Loading @@ -3467,6 +3468,13 @@ public interface WindowManager extends ViewManager { */ public static final int PRIVATE_FLAG_CONSUME_IME_INSETS = 1 << 25; /** * Flag to indicate that the window has the * {@link R.styleable.Window_windowOptOutEdgeToEdgeEnforcement} flag set. * @hide */ public static final int PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE = 1 << 26; /** * Flag to indicate that the window is controlling how it fits window insets on its own. * So we don't need to adjust its attributes for fitting window insets. Loading Loading @@ -3540,6 +3548,7 @@ public interface WindowManager extends ViewManager { PRIVATE_FLAG_NOT_MAGNIFIABLE, PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC, PRIVATE_FLAG_CONSUME_IME_INSETS, PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE, PRIVATE_FLAG_FIT_INSETS_CONTROLLED, PRIVATE_FLAG_TRUSTED_OVERLAY, PRIVATE_FLAG_INSET_PARENT_FRAME_BY_IME, Loading Loading @@ -3643,6 +3652,10 @@ public interface WindowManager extends ViewManager { mask = PRIVATE_FLAG_CONSUME_IME_INSETS, equals = PRIVATE_FLAG_CONSUME_IME_INSETS, name = "CONSUME_IME_INSETS"), @ViewDebug.FlagToString( mask = PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE, equals = PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE, name = "OPTOUT_EDGE_TO_EDGE"), @ViewDebug.FlagToString( mask = PRIVATE_FLAG_FIT_INSETS_CONTROLLED, equals = PRIVATE_FLAG_FIT_INSETS_CONTROLLED, Loading
core/java/android/view/WindowManagerGlobal.java +13 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.view; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import android.animation.ValueAnimator; Loading @@ -26,6 +28,7 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.HardwareRenderer; import android.os.Binder; import android.os.Build; Loading @@ -45,6 +48,7 @@ import android.window.ITrustedPresentationListener; import android.window.InputTransferToken; import android.window.TrustedPresentationThresholds; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.FastPrintWriter; Loading Loading @@ -356,12 +360,12 @@ public final class WindowManagerGlobal { } final WindowManager.LayoutParams wparams = (WindowManager.LayoutParams) params; final Context context = view.getContext(); if (parentWindow != null) { parentWindow.adjustLayoutParamsForSubWindow(wparams); } else { // If there's no parent, then hardware acceleration for this view is // set from the application's hardware acceleration setting. final Context context = view.getContext(); if (context != null && (context.getApplicationInfo().flags & ApplicationInfo.FLAG_HARDWARE_ACCELERATED) != 0) { Loading @@ -369,6 +373,14 @@ public final class WindowManagerGlobal { } } if (context != null && wparams.type > LAST_APPLICATION_WINDOW) { final TypedArray styles = context.obtainStyledAttributes(R.styleable.Window); if (styles.getBoolean(R.styleable.Window_windowOptOutEdgeToEdgeEnforcement, false)) { wparams.privateFlags |= PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE; } styles.recycle(); } ViewRootImpl root; View panelParentView = null; Loading
services/core/java/com/android/server/wm/WindowState.java +20 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M import static android.view.WindowManager.LayoutParams.MATCH_PARENT; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NOT_MAGNIFIABLE; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY; import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; Loading Loading @@ -2989,6 +2990,25 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return (mAttrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0; } @Override void resolveOverrideConfiguration(Configuration newParentConfig) { super.resolveOverrideConfiguration(newParentConfig); if (mActivityRecord != null) { // Let the activity decide whether to apply the size override. return; } final Configuration resolvedConfig = getResolvedOverrideConfiguration(); resolvedConfig.seq = newParentConfig.seq; applySizeOverrideIfNeeded( getDisplayContent(), mSession.mProcess.mInfo, newParentConfig, resolvedConfig, (mAttrs.privateFlags & PRIVATE_FLAG_OPT_OUT_EDGE_TO_EDGE) != 0, false /* hasFixedRotationTransform */, false /* hasCompatDisplayInsets */); } /** * @return {@code true} if this window can receive touches based on among other things, * windowing state and recents animation state. Loading