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

Commit 87c5c79f authored by Darrell Shi's avatar Darrell Shi
Browse files

Disable grid scroll when dragging a widget

Grid scrolling and widget dragging gestures can compete with each other
somtimes causing a widget drag to get cancelled. This change disables
user scrolling while dragging a widget. Programatic scrolling is still
allowed for dragging a widget beyond visual boundaries.

Test: manually tested that dragging a widget is more stable, and a drag
      gesture does not get canceled once initiated. Also tested that
      dragging a widget to the edges of the screen still causes the grid
      to scroll.
Fix: 382355534
Flag: EXEMPT bug fix
Change-Id: Iae452a481ff20f96b57604dafad4600f101cdd4c
parent 98d6afef
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -757,10 +757,12 @@ fun calculateWidgetSize(
private fun HorizontalGridWrapper(
    minContentPadding: PaddingValues,
    gridState: LazyGridState,
    dragDropState: GridDragDropState?,
    setContentOffset: (offset: Offset) -> Unit,
    modifier: Modifier = Modifier,
    content: LazyGridScope.(sizeInfo: SizeInfo?) -> Unit,
) {
    val isDragging = dragDropState?.draggingItemKey != null
    if (communalResponsiveGrid()) {
        val flingBehavior =
            rememberSnapFlingBehavior(lazyGridState = gridState, snapPosition = SnapPosition.Start)
@@ -773,6 +775,10 @@ private fun HorizontalGridWrapper(
            minHorizontalArrangement = Dimensions.ItemSpacing,
            minVerticalArrangement = Dimensions.ItemSpacing,
            setContentOffset = setContentOffset,
            // Temporarily disable user gesture scrolling while dragging a widget to prevent
            // conflicts between the drag and scroll gestures. Programmatic scrolling remains
            // enabled to allow dragging a widget beyond the visible boundaries.
            userScrollEnabled = !isDragging,
            content = content,
        )
    } else {
@@ -791,6 +797,10 @@ private fun HorizontalGridWrapper(
            contentPadding = minContentPadding,
            horizontalArrangement = Arrangement.spacedBy(Dimensions.ItemSpacing),
            verticalArrangement = Arrangement.spacedBy(Dimensions.ItemSpacing),
            // Temporarily disable user gesture scrolling while dragging a widget to prevent
            // conflicts between the drag and scroll gestures. Programmatic scrolling remains
            // enabled to allow dragging a widget beyond the visible boundaries.
            userScrollEnabled = !isDragging,
        ) {
            content(null)
        }
@@ -860,6 +870,7 @@ private fun BoxScope.CommunalHubLazyGrid(
    HorizontalGridWrapper(
        modifier = gridModifier,
        gridState = gridState,
        dragDropState = dragDropState,
        minContentPadding = minContentPadding,
        setContentOffset = setContentOffset,
    ) { sizeInfo ->