Reset search bar position

This commit is contained in:
MM20 2025-06-28 21:23:54 +02:00
parent 7d8ac528b7
commit a37748621f
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
3 changed files with 36 additions and 18 deletions

View File

@ -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

View File

@ -58,17 +58,22 @@ internal abstract class ScaffoldComponent {
*/
open val isAtBottom: State<Boolean?> = 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)

View File

@ -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<Boolean?> = 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
}