ComposeUiFlags


This is a collection of flags which are used to guard against regressions in some of the "riskier" refactors or new feature support that is added to this module. These flags are always "on" in the published artifact of this module, however these flags allow end consumers of this module to toggle them "off" in case this new path is causing a regression.

These flags are considered temporary, and there should be no expectation for these flags be around for an extended period of time. If you have a regression that one of these flags fixes, it is strongly encouraged for you to file a bug ASAP.

Usage:

In order to turn a feature off in a debug environment, it is recommended to set this to false in as close to the initial loading of the application as possible. Changing this value after compose library code has already been loaded can result in undefined behavior.

class MyApplication : Application() {
    override fun onCreate() {
        ComposeUiFlags.SomeFeatureEnabled = false
        super.onCreate()
    }
}

In order to turn this off in a release environment, it is recommended to additionally utilize R8 rules which force a single value for the entire build artifact. This can result in the new code paths being completely removed from the artifact, which can often have nontrivial positive performance impact.

-assumevalues class androidx.compose.runtime.ComposeUiFlags {
    public static int isRectTrackingEnabled return false
}

Summary

Public properties

Boolean

Enable WindowInsets rulers:

Cmn
Boolean

With this flag on, the adaptive refresh rate (ARR) feature will be enabled.

Cmn
Boolean

This flag enables an alternate approach to fixing the issues addressed by the isViewFocusFixEnabled flag.

Cmn
Boolean

This flag enables clearing focus on pointer down by default.

Cmn
Boolean

This property is deprecated. This flag is no longer needed.

Cmn
Boolean

Flag for enabling the performance optimization for content capture.

Cmn
Boolean

This property is deprecated. This flag is no longer needed.

Cmn
Boolean

This flag enables setting the shape semantics property in the graphicsLayer modifiers.

Cmn
Boolean

This flag enables a fix for b/388590015.

Cmn
Boolean

Flag for enabling indirect touch event navigation gestures in Compose.

Cmn
Boolean

Flag for enabling nested scroll interop fix for propagating integers, this fixes an issue with interop between compose and views nested scroll where small deltas with the wrong sign were being scaled up due to the rounding used.

Cmn
Boolean

This property is deprecated. This flag is no longer needed.

Cmn
Boolean

With this flag on, SubcomposeLayout will deactivate not used content slots outside of the frame, not as part of a regular recomposition phase.

Cmn
Boolean

This flag enables a fix for b/378570682.

Cmn
Boolean

With this flag on, during layout we will do some additional work to store the minimum bounding rectangles for all Layout Nodes.

Cmn
Boolean

This property is deprecated. This flag is no longer needed.

Cmn
Boolean

With this flag on, the new semantic version of Autofill APIs will be enabled.

Cmn
Boolean

This enables fixes for View focus.

Cmn

Public properties

areWindowInsetsRulersEnabled

var areWindowInsetsRulersEnabledBoolean

Enable WindowInsets rulers:

  • SystemBarsRulers

  • ImeRulers

  • StatusBarsRulers

  • NavigationBarsRulers

  • CaptionBarRulers

  • MandatorySystemGesturesRulers

  • TappableElementRulers

  • WaterfallRulers

  • SafeDrawingRulers

  • SafeGesturesRulers

  • SafeContentRulers

isAdaptiveRefreshRateEnabled

var isAdaptiveRefreshRateEnabledBoolean

With this flag on, the adaptive refresh rate (ARR) feature will be enabled. A preferred frame rate can be set on a Composable through frame rate modifier: Modifier.preferredFrameRate

isBypassUnfocusableComposeViewEnabled

var isBypassUnfocusableComposeViewEnabledBoolean

This flag enables an alternate approach to fixing the issues addressed by the isViewFocusFixEnabled flag.

isClearFocusOnPointerDownEnabled

var isClearFocusOnPointerDownEnabledBoolean

This flag enables clearing focus on pointer down by default.

isClearFocusOnResetEnabled

var isClearFocusOnResetEnabledBoolean

Enable clearing focus when a focused item is removed from a lazyList.

isContentCaptureOptimizationEnabled

var isContentCaptureOptimizationEnabledBoolean

Flag for enabling the performance optimization for content capture.

isFocusActionExitsTouchModeEnabled

var isFocusActionExitsTouchModeEnabledBoolean

With this flag on, when an AccessibilityService performs ACTION_FOCUS on a Composable node, if it is in touch mode, it will exit touch mode first, then try to request focus on the node.

isGraphicsLayerShapeSemanticsEnabled

var isGraphicsLayerShapeSemanticsEnabledBoolean

This flag enables setting the shape semantics property in the graphicsLayer modifiers.

isIgnoreInvalidPrevFocusRectEnabled

var isIgnoreInvalidPrevFocusRectEnabledBoolean

This flag enables a fix for b/388590015. The view system ignores an invalid prevFocusRect when requestFocus is called, so we support this behavior in Compose too.

isIndirectTouchNavigationGestureDetectorEnabled

var isIndirectTouchNavigationGestureDetectorEnabledBoolean

Flag for enabling indirect touch event navigation gestures in Compose.

isNestedScrollInteropIntegerPropagationEnabled

var isNestedScrollInteropIntegerPropagationEnabledBoolean

Flag for enabling nested scroll interop fix for propagating integers, this fixes an issue with interop between compose and views nested scroll where small deltas with the wrong sign were being scaled up due to the rounding used.

isNoPinningInFocusRestorationEnabled

var isNoPinningInFocusRestorationEnabledBoolean

With this flag on, Modifier.focusRestorer() will not pin the item that needs to be restored. Users are responsible for providing a key for the item that needs to be restored b/330696779.

isOutOfFrameDeactivationEnabled

var isOutOfFrameDeactivationEnabledBoolean

With this flag on, SubcomposeLayout will deactivate not used content slots outside of the frame, not as part of a regular recomposition phase. It allows to not block the drawing phase, improving the scrolling performance for lazy layouts.

isPre26FocusFinderFixEnabled

var isPre26FocusFinderFixEnabledBoolean

This flag enables a fix for b/378570682. For API >=26. We attempt to manually find the next focusable item for 1-D focus search cases when Compose does not have any focusable content.

isRectTrackingEnabled

var isRectTrackingEnabledBoolean

With this flag on, during layout we will do some additional work to store the minimum bounding rectangles for all Layout Nodes. This introduces some additional maintenance burden, but will be used in the future to enable certain features that are not possible to do efficiently at this point, as well as speed up some other areas of the system such as semantics, focus, pointer input, etc. If significant performance overhead is noticed during layout phases, it is possible that the addition of this tracking is the culprit.

isRemoveFocusedViewFixEnabled

var isRemoveFocusedViewFixEnabledBoolean

When an embedded view that is focused is removed from the hierarchy, it triggers a requestFocus() which tries to re-assign focus before the previous composition is complete. This flag enables a fix for this issue.

isSemanticAutofillEnabled

var isSemanticAutofillEnabledBoolean

With this flag on, the new semantic version of Autofill APIs will be enabled. Turning this flag off will disable the new Semantic Autofill APIs, and the new refactored semantics.

isViewFocusFixEnabled

var isViewFocusFixEnabledBoolean

This enables fixes for View focus. The changes are large enough to require a flag to allow disabling them.