WheelPicker: Add haptic feedback (#9322)

This commit is contained in:
Ivan Iskandar 2023-04-15 08:58:57 +07:00 committed by GitHub
parent 6662a97b2f
commit a2627d70af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -25,10 +25,13 @@ import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.padding
import java.text.DateFormatSymbols import java.text.DateFormatSymbols
@ -48,12 +51,15 @@ fun WheelPicker(
itemContent: @Composable LazyItemScope.(index: Int) -> Unit, itemContent: @Composable LazyItemScope.(index: Int) -> Unit,
) { ) {
val lazyListState = rememberLazyListState(startIndex) val lazyListState = rememberLazyListState(startIndex)
val haptic = LocalHapticFeedback.current
LaunchedEffect(lazyListState, onSelectionChanged) { LaunchedEffect(lazyListState, onSelectionChanged) {
snapshotFlow { lazyListState.firstVisibleItemScrollOffset } snapshotFlow { lazyListState.firstVisibleItemScrollOffset }
.map { calculateSnappedItemIndex(lazyListState) } .map { calculateSnappedItemIndex(lazyListState) }
.distinctUntilChanged() .distinctUntilChanged()
.drop(1)
.collectLatest { .collectLatest {
haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove)
onSelectionChanged(it) onSelectionChanged(it)
} }
} }