Add API to reverse search results in pull down scaffold

This commit is contained in:
MM20 2023-01-14 18:56:57 +01:00
parent 0c08c20fd8
commit 1d08c7a468
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -80,7 +80,8 @@ fun PullDownScaffold(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
darkStatusBarIcons: Boolean = false, darkStatusBarIcons: Boolean = false,
darkNavBarIcons: Boolean = false, darkNavBarIcons: Boolean = false,
bottomSearchBar: Boolean = true, bottomSearchBar: Boolean = false,
reverseSearchResults: Boolean = false,
) { ) {
val viewModel: LauncherScaffoldVM = viewModel() val viewModel: LauncherScaffoldVM = viewModel()
val searchVM: SearchVM = viewModel() val searchVM: SearchVM = viewModel()
@ -97,15 +98,25 @@ fun PullDownScaffold(
val isSearchAtStart by remember { val isSearchAtStart by remember {
derivedStateOf { derivedStateOf {
searchState.firstVisibleItemIndex == 0 && searchState.firstVisibleItemScrollOffset == 0 if (reverseSearchResults) {
val lastItem =
searchState.layoutInfo.visibleItemsInfo.lastOrNull() ?: return@derivedStateOf true
lastItem.offset + lastItem.size <= searchState.layoutInfo.viewportEndOffset - searchState.layoutInfo.afterContentPadding
} else {
searchState.firstVisibleItemIndex == 0 && searchState.firstVisibleItemScrollOffset == 0
}
} }
} }
val isSearchAtEnd by remember { val isSearchAtEnd by remember {
derivedStateOf { derivedStateOf {
val lastItem = if (reverseSearchResults) {
searchState.layoutInfo.visibleItemsInfo.lastOrNull() ?: return@derivedStateOf true searchState.firstVisibleItemIndex == 0 && searchState.firstVisibleItemScrollOffset == 0
lastItem.offset + lastItem.size <= searchState.layoutInfo.viewportEndOffset - searchState.layoutInfo.afterContentPadding } else {
val lastItem =
searchState.layoutInfo.visibleItemsInfo.lastOrNull() ?: return@derivedStateOf true
lastItem.offset + lastItem.size <= searchState.layoutInfo.viewportEndOffset - searchState.layoutInfo.afterContentPadding
}
} }
} }
@ -261,8 +272,10 @@ fun PullDownScaffold(
else -> 0f else -> 0f
} }
val deltaSearchBarOffset = (available.y - consumed) * if (reverseSearchResults && isSearchOpen) -1f else 1f
searchBarOffset.value = searchBarOffset.value =
(searchBarOffset.value + (available.y - consumed)).coerceIn( (searchBarOffset.value + deltaSearchBarOffset).coerceIn(
-maxSearchBarOffset, -maxSearchBarOffset,
0f 0f
) )
@ -336,7 +349,7 @@ fun PullDownScaffold(
bottom = windowInsets.calculateBottomPadding() + if (bottomSearchBar) 60.dp + webSearchPadding else 4.dp bottom = windowInsets.calculateBottomPadding() + if (bottomSearchBar) 60.dp + webSearchPadding else 4.dp
), ),
state = searchState, state = searchState,
reverse = reverseSearchResults,
) )
val clockPadding by animateDpAsState( val clockPadding by animateDpAsState(
if (isWidgetsAtStart && fillClockHeight) if (isWidgetsAtStart && fillClockHeight)