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

Commit 7a4d6c7d authored by Alina Zaidi's avatar Alina Zaidi Committed by Android (Google) Code Review
Browse files

Merge "[dev_option] Override caption bar inset flags via dev options" into main

parents 3dd4ba12 dd900a02
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
import static android.window.flags.DesktopModeFlags.ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS;

import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -55,7 +56,6 @@ import android.view.WindowInsets.Type.InsetsType;
import android.view.WindowManager.LayoutParams.SoftInputModeFlags;

import com.android.internal.annotations.VisibleForTesting;
import com.android.window.flags.Flags;

import java.io.PrintWriter;
import java.util.Objects;
@@ -146,7 +146,7 @@ public class InsetsState implements Parcelable {
                forceConsumingTypes |= type;
            }

            if (Flags.enableCaptionCompatInsetForceConsumptionAlways()
            if (ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS.isEnabled()
                    && (flags & FLAG_FORCE_CONSUMING_OPAQUE_CAPTION_BAR) != 0) {
                forceConsumingOpaqueCaptionBar = true;
            }
+3 −3
Original line number Diff line number Diff line
@@ -125,11 +125,11 @@ import static android.view.flags.Flags.toolkitMetricsForFrameRateDecision;
import static android.view.flags.Flags.toolkitSetFrameRateReadOnly;
import static android.view.inputmethod.InputMethodEditorTraceProto.InputMethodClientsTraceProto.ClientSideProto.IME_FOCUS_CONTROLLER;
import static android.view.inputmethod.InputMethodEditorTraceProto.InputMethodClientsTraceProto.ClientSideProto.INSETS_CONTROLLER;
import static android.window.flags.DesktopModeFlags.ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION;
import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE;
import static com.android.text.flags.Flags.disableHandwritingInitiatorForIme;
import static com.android.window.flags.Flags.enableBufferTransformHintFromDisplay;
import static com.android.window.flags.Flags.enableCaptionCompatInsetForceConsumption;
import static com.android.window.flags.Flags.insetsControlChangedItem;
import static com.android.window.flags.Flags.insetsControlSeq;
import static com.android.window.flags.Flags.setScPropertiesInClient;
@@ -3214,10 +3214,10 @@ public final class ViewRootImpl implements ViewParent,
            typesToShow |= Type.navigationBars();
        }
        if (captionIsHiddenByFlags && !captionWasHiddenByFlags
                && enableCaptionCompatInsetForceConsumption()) {
                && ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isEnabled()) {
            typesToHide |= Type.captionBar();
        } else if (!captionIsHiddenByFlags && captionWasHiddenByFlags
                && enableCaptionCompatInsetForceConsumption()) {
                && ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isEnabled()) {
            typesToShow |= Type.captionBar();
        }
        if (typesToHide != 0) {
+17 −10
Original line number Diff line number Diff line
@@ -17,7 +17,9 @@
package android.window.flags;

import android.annotation.Nullable;
import android.content.Context;
import android.app.ActivityThread;
import android.app.Application;
import android.content.ContentResolver;
import android.provider.Settings;
import android.util.Log;

@@ -39,9 +41,13 @@ import java.util.function.Supplier;
 */
public enum DesktopModeFlags {
    // All desktop mode related flags to be overridden by developer option toggle will be added here
    DESKTOP_WINDOWING_MODE(
    ENABLE_DESKTOP_WINDOWING_MODE(
            Flags::enableDesktopWindowingMode, /* shouldOverrideByDevOption= */ true),
    DYNAMIC_INITIAL_BOUNDS(Flags::enableWindowingDynamicInitialBounds, false);
    ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS(Flags::enableWindowingDynamicInitialBounds, false),
    ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION(
            Flags::enableCaptionCompatInsetForceConsumption, true),
    ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS(
            Flags::enableCaptionCompatInsetForceConsumptionAlways, true);

    private static final String TAG = "DesktopModeFlagsUtil";
    // Function called to obtain aconfig flag value.
@@ -62,14 +68,15 @@ public enum DesktopModeFlags {
     * Determines state of flag based on the actual flag and desktop mode developer option
     * overrides.
     */
    public boolean isEnabled(Context context) {
    public boolean isEnabled() {
        Application application = ActivityThread.currentApplication();
        if (!Flags.showDesktopWindowingDevOption()
                || !mShouldOverrideByDevOption
                || context.getContentResolver() == null) {
                || application == null) {
            return mFlagFunction.get();
        } else {
            boolean shouldToggleBeEnabledByDefault = Flags.enableDesktopWindowingMode();
            return switch (getToggleOverride(context)) {
            return switch (getToggleOverride(application.getContentResolver())) {
                case OVERRIDE_UNSET -> mFlagFunction.get();
                // When toggle override matches its default state, don't override flags. This
                // helps users reset their feature overrides.
@@ -79,14 +86,14 @@ public enum DesktopModeFlags {
        }
    }

    private ToggleOverride getToggleOverride(Context context) {
    private ToggleOverride getToggleOverride(ContentResolver contentResolver) {
        // If cached, return it
        if (sCachedToggleOverride != null) {
            return sCachedToggleOverride;
        }

        // Otherwise, fetch and cache it
        ToggleOverride override = getToggleOverrideFromSystem(context);
        ToggleOverride override = getToggleOverrideFromSystem(contentResolver);
        sCachedToggleOverride = override;
        Log.d(TAG, "Toggle override initialized to: " + override);
        return override;
@@ -95,9 +102,9 @@ public enum DesktopModeFlags {
    /**
     *  Returns {@link ToggleOverride} from Settings.Global set by toggle.
     */
    private ToggleOverride getToggleOverrideFromSystem(Context context) {
    private ToggleOverride getToggleOverrideFromSystem(ContentResolver contentResolver) {
        int settingValue = Settings.Global.getInt(
                context.getContentResolver(),
                contentResolver,
                Settings.Global.DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES,
                ToggleOverride.OVERRIDE_UNSET.getSetting()
        );
+6 −4
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATIO
import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.flags.Flags.customizableWindowHeaders;
import static android.window.flags.DesktopModeFlags.ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION;
import static android.window.flags.DesktopModeFlags.ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS;

import static com.android.internal.policy.PhoneWindow.FEATURE_OPTIONS_PANEL;

@@ -114,7 +116,6 @@ import com.android.internal.view.menu.MenuHelper;
import com.android.internal.widget.ActionBarContextView;
import com.android.internal.widget.BackgroundFallback;
import com.android.internal.widget.floatingtoolbar.FloatingToolbar;
import com.android.window.flags.Flags;

import java.util.List;
import java.util.concurrent.Executor;
@@ -1217,14 +1218,15 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind

        final boolean hideCaptionBar = fullscreen
                || (requestedVisibleTypes & WindowInsets.Type.captionBar()) == 0;
        final boolean consumingCaptionBar = Flags.enableCaptionCompatInsetForceConsumption()
        final boolean consumingCaptionBar =
                ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isEnabled()
                        && ((mLastForceConsumingTypes & WindowInsets.Type.captionBar()) != 0
                        && hideCaptionBar);

        final boolean isOpaqueCaptionBar = customizableWindowHeaders()
                && (appearance & APPEARANCE_TRANSPARENT_CAPTION_BAR_BACKGROUND) == 0;
        final boolean consumingOpaqueCaptionBar =
                Flags.enableCaptionCompatInsetForceConsumptionAlways()
                ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS.isEnabled()
                        && mLastForceConsumingOpaqueCaptionBar
                        && isOpaqueCaptionBar;

+27 −27
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package android.window.flags;

import static android.window.flags.DesktopModeFlags.DESKTOP_WINDOWING_MODE;
import static android.window.flags.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE;

import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE;
import static com.android.window.flags.Flags.FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS;
@@ -75,7 +75,7 @@ public class DesktopModeFlagsTest {
    public void isEnabled_devOptionFlagDisabled_overrideOff_featureFlagOn_returnsTrue() {
        setOverride(OVERRIDE_OFF_SETTING);
        // In absence of dev options, follow flag
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue();
    }


@@ -84,7 +84,7 @@ public class DesktopModeFlagsTest {
    public void isEnabled_devOptionFlagDisabled_overrideOn_featureFlagOff_returnsFalse() {
        setOverride(OVERRIDE_ON_SETTING);

        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse();
    }

    @Test
@@ -93,7 +93,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_UNSET_SETTING);

        // For overridableFlag, for unset overrides, follow flag
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue();
    }

    @Test
@@ -103,7 +103,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_UNSET_SETTING);

        // For overridableFlag, for unset overrides, follow flag
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse();
    }

    @Test
@@ -112,7 +112,7 @@ public class DesktopModeFlagsTest {
        setOverride(null);

        // For overridableFlag, in absence of overrides, follow flag
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue();
    }

    @Test
@@ -122,7 +122,7 @@ public class DesktopModeFlagsTest {
        setOverride(null);

        // For overridableFlag, in absence of overrides, follow flag
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse();
    }

    @Test
@@ -131,7 +131,7 @@ public class DesktopModeFlagsTest {
        setOverride(-2);

        // For overridableFlag, for unrecognized overrides, follow flag
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue();
    }

    @Test
@@ -141,7 +141,7 @@ public class DesktopModeFlagsTest {
        setOverride(-2);

        // For overridableFlag, for unrecognizable overrides, follow flag
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse();
    }

    @Test
@@ -150,7 +150,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_OFF_SETTING);

        // For overridableFlag, follow override if they exist
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse();
    }

    @Test
@@ -160,7 +160,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_ON_SETTING);

        // For overridableFlag, follow override if they exist
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue();
    }

    @Test
@@ -169,12 +169,12 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_OFF_SETTING);

        // For overridableFlag, follow override if they exist
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse();

        setOverride(OVERRIDE_ON_SETTING);

        // Keep overrides constant through the process
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse();
    }

    @Test
@@ -184,12 +184,12 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_ON_SETTING);

        // For overridableFlag, follow override if they exist
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue();

        setOverride(OVERRIDE_OFF_SETTING);

        // Keep overrides constant through the process
        assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue();
        assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue();
    }

    @Test
@@ -199,7 +199,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_UNSET_SETTING);

        // For unset overrides, follow flag
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isTrue();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue();
    }

    @Test
@@ -208,7 +208,7 @@ public class DesktopModeFlagsTest {
    public void isEnabled_dwFlagOn_overrideUnset_featureFlagOff_returnsFalse() {
        setOverride(OVERRIDE_UNSET_SETTING);
        // For unset overrides, follow flag
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isFalse();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse();
    }

    @Test
@@ -221,7 +221,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_ON_SETTING);

        // When toggle override matches its default state (dw flag), don't override flags
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isTrue();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue();
    }

    @Test
@@ -231,7 +231,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_ON_SETTING);

        // When toggle override matches its default state (dw flag), don't override flags
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isFalse();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse();
    }

    @Test
@@ -244,7 +244,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_OFF_SETTING);

        // Follow override if they exist, and is not equal to default toggle state (dw flag)
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isTrue();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue();
    }

    @Test
@@ -254,7 +254,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_OFF_SETTING);

        // Follow override if they exist, and is not equal to default toggle state (dw flag)
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isFalse();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse();
    }

    @Test
@@ -267,7 +267,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_UNSET_SETTING);

        // For unset overrides, follow flag
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isTrue();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue();
    }

    @Test
@@ -280,7 +280,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_UNSET_SETTING);

        // For unset overrides, follow flag
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isFalse();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse();
    }

    @Test
@@ -293,7 +293,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_ON_SETTING);

        // Follow override if they exist, and is not equal to default toggle state (dw flag)
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isTrue();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue();
    }

    @Test
@@ -306,7 +306,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_ON_SETTING);

        // Follow override if they exist, and is not equal to default toggle state (dw flag)
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isFalse();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse();
    }

    @Test
@@ -319,7 +319,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_OFF_SETTING);

        // When toggle override matches its default state (dw flag), don't override flags
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isTrue();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue();
    }

    @Test
@@ -332,7 +332,7 @@ public class DesktopModeFlagsTest {
        setOverride(OVERRIDE_OFF_SETTING);

        // When toggle override matches its default state (dw flag), don't override flags
        assertThat(DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)).isFalse();
        assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse();
    }

    private void setOverride(Integer setting) {
Loading