🌈 Create new beautiful Compose Gradients with our new wesite ->
Object

ComposeFoundationFlags

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.

Source set: Common
public object ComposeFoundationFlags

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() { ComposeFoundationFlags.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.foundation.ComposeFoundationFlags { public static boolean SomeFeatureEnabled return false }

Properties

isNewContextMenuEnabled

Source set: Common
public var isNewContextMenuEnabled: Boolean = isNewContextMenuInitiallyEnabled

Whether to use the new context menu API and default implementations in SelectionContainer, and all BasicTextFields. If false, the previous context menu that has no public APIs will be used instead.

isSmartSelectionEnabled

Source set: Common
@field:Suppress("MutableBareField") @JvmField public var isSmartSelectionEnabled: Boolean = true

Whether to use the new smart selection feature in androidx.compose.foundation.text.selection.SelectionContainer and all androidx.compose.foundation.text.BasicTextFields.

isInheritedTextStyleEnabled

Source set: Common
public var isInheritedTextStyleEnabled: Boolean = false

Whether to support inherited text styles. If enabled, text styles set by the styles API will be inherited by text composables contained in a style box.

isPausableCompositionInPrefetchEnabled

Source set: Common
public var isPausableCompositionInPrefetchEnabled: Boolean = true

Selecting flag to enable the use of new PausableComposition in lazy layout prefetch. This change allows us to distribute work we need to do during the prefetch better, for example we can only perform the composition for parts of the LazyColumn's next item during one ui frame, and then continue composing the rest of it in the next frames.

isCacheWindowForPagerEnabled

Source set: Common
public var isCacheWindowForPagerEnabled: Boolean = true

With this flag on, Pager will use androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow as the default prefetching strategy, instead of 1 item in the direction of the scroll. The window used will be 1 view port AFTER the currently composed items, this includes visible and items composed through beyond bounds.

isMultiLaneCacheWindowEnabled

Source set: Common
public var isMultiLaneCacheWindowEnabled: Boolean = true

With this flag on, androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow will support multi-lane configurations.

isUsingCacheWindowInStaggeredGrids

Source set: Common
public var isUsingCacheWindowInStaggeredGrids: Boolean = true

With this flag enabled, androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGrid layouts will make use of a cache window, either a default cache window or the cache window provided by the user via the composable function arguments.

isAnchoredDraggableTargetValueCalculationFixEnabled

Source set: Common
public var isAnchoredDraggableTargetValueCalculationFixEnabled: Boolean = true

With this flag enabled, androidx.compose.foundation.gestures.AnchoredDraggableState.targetValue correctly returns the androidx.compose.foundation.gestures.AnchoredDraggableState.currentValue when no androidx.compose.foundation.gestures.AnchoredDraggableState.anchoredDrag is in progress. Previously, androidx.compose.foundation.gestures.AnchoredDraggableState.targetValue incorrectly returned the last-inserted anchor when there were two or more anchors with the same offset, for example: DraggableAnchors { Expanded at 100f; HalfExpanded at 0f; Hidden at 0f;} Disabling the flag restores this previous behavior.

isBasicTextFieldMinSizeOptimizationEnabled

Source set: Common
public var isBasicTextFieldMinSizeOptimizationEnabled: Boolean = true

This flag controls performance optimizations related to androidx.compose.foundation.text.BasicTextField's internal min height calculations.

isBasicTextFieldHeightInLinesOptimizationEnabled

Source set: Common
public var isBasicTextFieldHeightInLinesOptimizationEnabled: Boolean = true

This flag controls performance optimizations related to androidx.compose.foundation.text.BasicTextField's internal calculations of the minimum and maximum height.

isBasicTextFieldSizeOptimizationEnabled

Source set: Common
public var isBasicTextFieldSizeOptimizationEnabled: Boolean = true

This flag controls performance optimizations related to squashing multiple modifiers responsible for providing default measurement of the androidx.compose.foundation.text.BasicTextField into one.

isReverseLayoutNestedScrollConnectionInPagerFixEnabled

Source set: Common
public var isReverseLayoutNestedScrollConnectionInPagerFixEnabled: Boolean = true

This flag controls the fix where we correctly dispatch deltas in pager's default pageNestedScrollConnection by considering the role of reverse layout.

isBasicTextFieldStyledTextEnabled

Source set: Common
public var isBasicTextFieldStyledTextEnabled: Boolean = true

This flag controls whether androidx.compose.foundation.text.BasicTextField's formatted text features are enabled.

isDragNodeOffsetDoubleCountingFixEnabled

Source set: Common
public var isDragNodeOffsetDoubleCountingFixEnabled: Boolean = true

This flag controls whether the legacy nodeOffset logic in DragGestureNode and IndirectPointerInputDragCycleDetector is disabled. Previously, VelocityTracker used local coordinates, necessitating manual point adjustment tracking.

isDraggableInitialPassConsumptionFixEnabled

Source set: Common
public var isDraggableInitialPassConsumptionFixEnabled: Boolean = true

This flag controls the fix where we prioritize consumption on initial pass in Draggable. If a drag gesture started immediately, it should block subsequent nested gestures because the initial down was consumed.

isSelectionAutoScrollEnabled

Source set: Common
public var isSelectionAutoScrollEnabled: Boolean = true

This flag controls whether selecting text in androidx.compose.foundation.text.selection.SelectionContainer causes scrollable ancestors of the text to be scrolled when the selecting pointer is dragged outside the scrollable's viewport.

isDraggableVelocityTrackerFixEnabled

Source set: Common
public var isDraggableVelocityTrackerFixEnabled: Boolean = false

This flag controls whether the fix for velocity tracker usage in Draggable and related classes is enabled to a) properly track velocity per pointer and b) make sure to also take the pointer events into account that don't move at the beginning of the gesture in order to increase the stability of the computed velocity.

isMouseSelectionBetweenTextEnabled

Source set: Common
public var isMouseSelectionBetweenTextEnabled: Boolean = true

This flag controls whether it's possible to start selecting (via the mouse) text in a androidx.compose.foundation.text.selection.SelectionContainer by dragging from the areas between the text selectables.

isLinkMinimumTouchTargetSizeZeroEnabled

Source set: Common
public var isLinkMinimumTouchTargetSizeZeroEnabled: Boolean = false

Disable minimum touch target expansion for inline links. Touch target expansion for multi-line links causes incorrect clicks on plain text on the same lines because it uses layout bounds (bounding box of multi-line path) instead of clipped shape.

isDraggableZeroDeltaConsumptionEnabled

Source set: Common
public var isDraggableZeroDeltaConsumptionEnabled: Boolean = true

This flag controls the fix where draggable was ignoring and not consuming zero delta events. This caused issues with the gesture pickup feature. When this flag is enabled, zero delta events will be consumed (after a drag gesture has started).

isCacheWindowLookaheadCheckEnabled

Source set: Common
public var isCacheWindowLookaheadCheckEnabled: Boolean = true

This flag controls whether androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow checks if the number of visible items has changed across iterations without scroll deltas (such as when changing lookahead window sizes) and refills the cache window if needed.

isKeepAroundDuringLookaheadDisabled

Source set: Common
public var isKeepAroundDuringLookaheadDisabled: Boolean = true

This flag controls whether androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow only executes keepAroundItems during non-lookahead (approach) measure passes in androidx.compose.foundation.lazy.LazyList, androidx.compose.foundation.lazy.grid.LazyGrid, and androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGrid.

isPreferDefaultCacheWindowOverPrefetchStrategy

Source set: Common
public var isPreferDefaultCacheWindowOverPrefetchStrategy: Boolean = true

This flag controls whether androidx.compose.foundation.lazy.grid.LazyGrid prefers using the default androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow over androidx.compose.foundation.lazy.grid.LazyGridPrefetchStrategy.

isLazyListItemAnimatorVisibleBoundsFixEnabled

Source set: Common
public var isLazyListItemAnimatorVisibleBoundsFixEnabled: Boolean = true

This flag controls whether lazy list measure passes calculate firstVisibleIndex and lastVisibleIndex from layout visible items before item placement animations run, preventing moving-away items added by androidx.compose.foundation.lazy.layout.LazyLayoutItemAnimator from corrupting visible item bounds and causing unwanted composition in prefetch or cache window strategies.

Content updated: