From a37748621fd680f0c79e0ec37e6673380efcf837 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sat, 28 Jun 2025 21:23:54 +0200 Subject: [PATCH] Reset search bar position --- .../ui/launcher/scaffold/LauncherScaffold.kt | 32 +++++++++++++------ .../ui/launcher/scaffold/ScaffoldComponent.kt | 11 +++++-- .../ui/launcher/scaffold/SearchComponent.kt | 11 ++++--- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/LauncherScaffold.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/LauncherScaffold.kt index aaa318c0..793fa848 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/LauncherScaffold.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/LauncherScaffold.kt @@ -1068,16 +1068,20 @@ internal class LauncherScaffoldState( isLocked = false if (isSearchBarHidden) { isSearchBarHidden = false - searchBarAnimatable.snapTo(currentSearchBarOffset) - searchBarAnimatable.animateTo( - 0f, - tween(500) - ) { - if (isSettledOnSecondaryPage) { - secondaryPageSearchBarOffset = this.value - } else { - homePageSearchBarOffset = this.value - } + resetSearchBarOffset() + } + } + + suspend fun resetSearchBarOffset() { + searchBarAnimatable.snapTo(currentSearchBarOffset) + searchBarAnimatable.animateTo( + 0f, + tween(500) + ) { + if (isSettledOnSecondaryPage) { + secondaryPageSearchBarOffset = this.value + } else { + homePageSearchBarOffset = this.value } } } @@ -1171,6 +1175,14 @@ internal fun LauncherScaffold( ) } + LaunchedEffect(state.isAtTop, state.isAtBottom) { + when(state.currentComponent?.reverseScrolling) { + true -> if (state.isAtBottom) state.resetSearchBarOffset() + false -> if (state.isAtTop) state.resetSearchBarOffset() + else -> {} + } + } + val searchBarHeight by animateDpAsState( if (state.isSearchBarHidden) 0.dp else if (searchActions.isEmpty()) 56.dp diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/ScaffoldComponent.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/ScaffoldComponent.kt index 1807c456..d69ee39e 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/ScaffoldComponent.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/ScaffoldComponent.kt @@ -58,17 +58,22 @@ internal abstract class ScaffoldComponent { */ open val isAtBottom: State = mutableStateOf(null) - @Composable abstract fun Component( + open val reverseScrolling: Boolean = false + + @Composable + abstract fun Component( modifier: Modifier, insets: PaddingValues, state: LauncherScaffoldState, ) @SuppressLint("ModifierFactoryExtensionFunction") - open fun homePageModifier(state: LauncherScaffoldState, defaultModifier: Modifier): Modifier = defaultModifier + open fun homePageModifier(state: LauncherScaffoldState, defaultModifier: Modifier): Modifier = + defaultModifier @SuppressLint("ModifierFactoryExtensionFunction") - open fun searchBarModifier(state: LauncherScaffoldState, defaultModifier: Modifier): Modifier = defaultModifier + open fun searchBarModifier(state: LauncherScaffoldState, defaultModifier: Modifier): Modifier = + defaultModifier protected var isActive by mutableStateOf(false) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/SearchComponent.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/SearchComponent.kt index b9dec55d..5e632f16 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/SearchComponent.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/SearchComponent.kt @@ -1,13 +1,10 @@ package de.mm20.launcher2.ui.launcher.scaffold import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState -import androidx.compose.runtime.State -import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier @@ -28,6 +25,8 @@ internal class SearchComponent( override val isAtBottom: MutableState = mutableStateOf(true) + override val reverseScrolling: Boolean = reverse + override val hasIme: Boolean = true @@ -52,8 +51,10 @@ internal class SearchComponent( } LaunchedEffect(lazyListState.canScrollForward, lazyListState.canScrollBackward) { - isAtBottom.value = !lazyListState.canScrollForward && !reverse || !lazyListState.canScrollBackward && reverse - isAtTop.value = !lazyListState.canScrollForward && reverse || !lazyListState.canScrollBackward && !reverse + isAtBottom.value = + !lazyListState.canScrollForward && !reverse || !lazyListState.canScrollBackward && reverse + isAtTop.value = + !lazyListState.canScrollForward && reverse || !lazyListState.canScrollBackward && !reverse }