From 12f88dcb3614be0e8150cdd6a5934d1968ecbf94 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Fri, 6 Oct 2023 17:41:44 +0200 Subject: [PATCH] Add haptic feedback to pull down gesture --- .../launcher2/ui/launcher/PullDownScaffold.kt | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt index 03b3fc4a..cc3e3620 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt @@ -1,5 +1,6 @@ package de.mm20.launcher2.ui.launcher +import android.view.HapticFeedbackConstants import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedVisibility 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.TransformOrigin 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.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll @@ -109,6 +111,10 @@ fun PullDownScaffold( 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 { derivedStateOf { if (reverseSearchResults) { @@ -135,6 +141,12 @@ fun PullDownScaffold( } } + val isOverThreshold by remember { + derivedStateOf { + offsetY.value.absoluteValue > toggleSearchThreshold + } + } + val systemUiController = rememberSystemUiController() 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 maxSearchBarOffset = with(density) { 128.dp.toPx() } @@ -216,7 +223,7 @@ fun PullDownScaffold( val blurWallpaper by remember { 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 hapticFeedback = LocalHapticFeedback.current + LaunchedEffect(isOverThreshold) { + if (isOverThreshold) { + hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) + } else { + hapticFeedback.performHapticFeedback(HapticFeedbackType.TextHandleMove) + } + } + val nestedScrollConnection = remember { object : NestedScrollConnection { override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {