Add API to reverse search results in pull down scaffold
This commit is contained in:
parent
0c08c20fd8
commit
1d08c7a468
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user