diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt index 478ca55f..a80957d4 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.LayoutDirection @@ -47,6 +48,7 @@ import de.mm20.launcher2.ui.launcher.widgets.WidgetColumn import de.mm20.launcher2.ui.launcher.widgets.clock.ClockWidget import de.mm20.launcher2.ui.utils.rememberNotificationShadeController import kotlinx.coroutines.launch +import kotlin.math.absoluteValue import kotlin.math.roundToInt @Composable @@ -191,6 +193,8 @@ fun PagerScaffold( val notificationDragThreshold = with(LocalDensity.current) { 200.dp.toPx() } val notificationShadeController = rememberNotificationShadeController() + val keyboardController = LocalSoftwareKeyboardController.current + val nestedScrollConnection = remember { object : NestedScrollConnection { private var pullDownTotalY: Float? = 0f @@ -222,6 +226,15 @@ fun PagerScaffold( } } + val searchNestedScrollConnection = remember { object: NestedScrollConnection { + override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { + if (source == NestedScrollSource.Drag && available.y.absoluteValue > available.x.absoluteValue * 2) { + keyboardController?.hide() + } + return super.onPreScroll(available, source) + } + }} + val insets = WindowInsets.safeDrawing.asPaddingValues() Box( @@ -335,6 +348,7 @@ fun PagerScaffold( modifier = Modifier .requiredWidth(width) .fillMaxHeight() + .nestedScroll(searchNestedScrollConnection) .padding( start = windowInsets.calculateStartPadding(LocalLayoutDirection.current), end = windowInsets.calculateStartPadding(LocalLayoutDirection.current), diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt index 4e529f92..21f211f5 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.Velocity @@ -43,6 +44,7 @@ import de.mm20.launcher2.ui.launcher.search.SearchVM import de.mm20.launcher2.ui.launcher.widgets.WidgetColumn import de.mm20.launcher2.ui.launcher.widgets.clock.ClockWidget import kotlinx.coroutines.launch +import kotlin.math.absoluteValue import kotlin.math.roundToInt @Composable @@ -193,10 +195,15 @@ fun PullDownScaffold( } } + val keyboardController = LocalSoftwareKeyboardController.current + val nestedScrollConnection = remember { object : NestedScrollConnection { override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { if (isWidgetEditMode) return Offset.Zero + if (source == NestedScrollSource.Drag && available.y.absoluteValue > available.x.absoluteValue * 2) { + keyboardController?.hide() + } val canPullDown = if (isSearchOpen) { isSearchAtStart } else {