Add haptic feedback to pull down gesture

This commit is contained in:
MM20 2023-10-06 17:41:44 +02:00
parent b8261f047e
commit 12f88dcb36
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -1,5 +1,6 @@
package de.mm20.launcher2.ui.launcher package de.mm20.launcher2.ui.launcher
import android.view.HapticFeedbackConstants
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.Spring import androidx.compose.animation.core.Spring
@ -52,6 +53,7 @@ import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.TransformOrigin import androidx.compose.ui.graphics.TransformOrigin
import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.NestedScrollSource
import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.nestedscroll.nestedScroll
@ -109,6 +111,10 @@ fun PullDownScaffold(
val pagerState = rememberPagerState { 2 } val pagerState = rememberPagerState { 2 }
val offsetY = remember { mutableStateOf(0f) }
val maxOffset = with(density) { 64.dp.toPx() }
val toggleSearchThreshold = with(density) { 48.dp.toPx() }
val isSearchAtTop by remember { val isSearchAtTop by remember {
derivedStateOf { derivedStateOf {
if (reverseSearchResults) { if (reverseSearchResults) {
@ -135,6 +141,12 @@ fun PullDownScaffold(
} }
} }
val isOverThreshold by remember {
derivedStateOf {
offsetY.value.absoluteValue > toggleSearchThreshold
}
}
val systemUiController = rememberSystemUiController() val systemUiController = rememberSystemUiController()
val isWidgetsAtStart by remember { val isWidgetsAtStart by remember {
@ -202,11 +214,6 @@ fun PullDownScaffold(
} }
} }
val offsetY = remember { mutableStateOf(0f) }
val maxOffset = with(density) { 64.dp.toPx() }
val toggleSearchThreshold = with(density) { 48.dp.toPx() }
val searchBarOffset = remember { mutableStateOf(0f) } val searchBarOffset = remember { mutableStateOf(0f) }
val maxSearchBarOffset = with(density) { 128.dp.toPx() } val maxSearchBarOffset = with(density) { 128.dp.toPx() }
@ -216,7 +223,7 @@ fun PullDownScaffold(
val blurWallpaper by remember { val blurWallpaper by remember {
derivedStateOf { derivedStateOf {
blurEnabled && (isSearchOpen || offsetY.value > toggleSearchThreshold || widgetsScrollState.value > 0) blurEnabled && (isSearchOpen || isOverThreshold || widgetsScrollState.value > 0)
} }
} }
@ -289,6 +296,14 @@ fun PullDownScaffold(
val gestureManager = LocalGestureDetector.current val gestureManager = LocalGestureDetector.current
val hapticFeedback = LocalHapticFeedback.current val hapticFeedback = LocalHapticFeedback.current
LaunchedEffect(isOverThreshold) {
if (isOverThreshold) {
hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress)
} else {
hapticFeedback.performHapticFeedback(HapticFeedbackType.TextHandleMove)
}
}
val nestedScrollConnection = remember { val nestedScrollConnection = remember {
object : NestedScrollConnection { object : NestedScrollConnection {
override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {