Skip to content

Commit

Permalink
[Compose] #440 #445 Fix: Calendar uses decayed snapping in compose 1.4
Browse files Browse the repository at this point in the history
  • Loading branch information
kizitonwose committed Mar 4, 2023
1 parent 8248d86 commit d6c5614
Showing 1 changed file with 15 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.unit.Density

internal object CalendarDefaults {

Expand All @@ -22,7 +23,8 @@ internal object CalendarDefaults {
@Composable
private fun pagedFlingBehavior(state: LazyListState): FlingBehavior {
val snappingLayout = remember(state) {
SnapLayoutInfoProvider(state) { _, _ -> 0f }
val provider = SnapLayoutInfoProvider(state) { _, _ -> 0f }
CalendarSnapLayoutInfoProvider(provider)
}
return rememberSnapFlingBehavior(snappingLayout)
}
Expand All @@ -35,3 +37,15 @@ internal object CalendarDefaults {
return if (isPaged) pagedFlingBehavior(state) else continuousFlingBehavior()
}
}

@ExperimentalFoundationApi
@Suppress("FunctionName")
private fun CalendarSnapLayoutInfoProvider(snapLayoutInfoProvider: SnapLayoutInfoProvider):
SnapLayoutInfoProvider = object : SnapLayoutInfoProvider by snapLayoutInfoProvider {

/**
* In compose 1.3, the default was single page snapping (zero), but this changed
* in compose 1.4 to decayed page snapping which is not great for calendar usage.
*/
override fun Density.calculateApproachOffset(initialVelocity: Float): Float = 0f
}

0 comments on commit d6c5614

Please sign in to comment.