Skip to content

Commit

Permalink
improve search
Browse files Browse the repository at this point in the history
  • Loading branch information
Friendly-Banana committed Feb 28, 2025
1 parent fad2822 commit 9599def
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,7 @@ fun FeedScreen(
},
onShowFilterMenu = viewModel::setFilterMenuVisible,
filterCallback = viewModel.filterCallback,
onShowSearchBar = viewModel::setSearchBarVisible,
feedListState = feedListState,
feedGridState = feedGridState,
pagedFeedItems = pagedFeedItems,
Expand Down Expand Up @@ -467,6 +468,7 @@ fun FeedScreen(
onSetBookmark: (Long, Boolean) -> Unit,
onShowFilterMenu: (Boolean) -> Unit,
filterCallback: FeedListFilterCallback,
onShowSearchBar: (Boolean) -> Unit,
feedListState: LazyListState,
feedGridState: LazyStaggeredGridState,
pagedFeedItems: LazyPagingItems<FeedListItem>,
Expand All @@ -475,12 +477,10 @@ fun FeedScreen(
val coroutineScope = rememberCoroutineScope()
val context = LocalContext.current
val closeMenuText = stringResource(id = R.string.close_menu)
var textFieldState by rememberSaveable { mutableStateOf("") }
var searching by rememberSaveable { mutableStateOf(false) }
val focusRequester = remember { FocusRequester() }

LaunchedEffect(searching) {
if (searching) {
LaunchedEffect(viewState.searchBarVisible) {
if (viewState.searchBarVisible) {
focusRequester.requestFocus()
}
}
Expand Down Expand Up @@ -509,29 +509,31 @@ fun FeedScreen(
onDelete = onDeleteFeeds,
onEditFeed = onEditFeed,
toolbarActions = {
if (searching) {
if (viewState.searchBarVisible) {
SearchBar(
expanded = true,
onExpandedChange = { onShowSearchBar(it) },
inputField = {
SearchBarDefaults.InputField(
query = textFieldState,
onQueryChange = { textFieldState = it; filterCallback.searchFor(it) },
onSearch = { searching = false; filterCallback.searchFor(it) },
query = viewState.filter.search,
onQueryChange = { filterCallback.searchFor(it) },
onSearch = { onShowSearchBar(false); filterCallback.searchFor(it) },
expanded = true,
onExpandedChange = { searching = it },
placeholder = { Text("search") },
leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) },
onExpandedChange = { onShowSearchBar(it) },
placeholder = { Text("query") },
leadingIcon = { Icon(Icons.Default.Search, contentDescription = "search") },
trailingIcon = {
IconButton(
onClick = { filterCallback.searchFor(""); searching = false },
onClick = { onShowSearchBar(false); filterCallback.searchFor("") },
) {
Icon(Icons.Default.Close, contentDescription = "close search")
Icon(Icons.Default.Close, contentDescription = "cancel search")
}
},
modifier = Modifier.focusRequester(focusRequester)
modifier = Modifier
.focusRequester(focusRequester)
.onKeyEventLikeEscape { onShowSearchBar(false); filterCallback.searchFor("") }
)
},
expanded = true,
onExpandedChange = { searching = it },
) {
}
} else {
Expand Down Expand Up @@ -692,11 +694,12 @@ fun FeedScreen(
PlainTooltipBox(tooltip = { Text(stringResource(R.string.search_noun)) }) {
Box {
IconButton(
onClick = { searching = true },
onClick = { onShowSearchBar(true) },
) {
Icon(
Icons.Default.Search,
contentDescription = stringResource(R.string.search_noun),
tint = if (viewState.filter.search.isEmpty()) androidx.compose.material3.LocalContentColor.current else MaterialTheme.colorScheme.primary,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,14 @@ class FeedViewModel(

fun toggleTagExpansion(tag: String) = repository.toggleTagExpansion(tag)

private val searchBarVisible: MutableStateFlow<Boolean> =
MutableStateFlow(state["searchBarVisible"] ?: false)

fun setSearchBarVisible(visible: Boolean) {
state["searchBarVisible"] = visible
searchBarVisible.update { visible }
}

private val editDialogVisible = MutableStateFlow(false)

fun setShowEditDialog(visible: Boolean) {
Expand Down Expand Up @@ -260,6 +268,7 @@ class FeedViewModel(
repository.syncWorkerRunning,
// 25
repository.isOpenDrawerOnFab,
searchBarVisible,
) { params: Array<Any> ->
val haveVisibleFeedItems = (params[7] as Int) > 0
val currentFeedOrTag = params[13] as FeedOrTag
Expand Down Expand Up @@ -293,6 +302,7 @@ class FeedViewModel(
maxLines = params[18] as Int,
showFilterMenu = params[19] as Boolean,
filter = params[20] as FeedListFilter,
searchBarVisible = params[26] as Boolean,
showOnlyTitle = params[21] as Boolean,
showReadingTime = params[22] as Boolean,
showTitleUnreadCount = params[23] as Boolean,
Expand Down Expand Up @@ -430,7 +440,7 @@ data class FeedState(
override val showFilterMenu: Boolean = false,
override val filter: FeedListFilter = emptyFeedListFilter,
val isArticleOpen: Boolean = false,
override val searching: Boolean = false,
override val searchBarVisible: Boolean = false,
override val showTitleUnreadCount: Boolean = false,
override val isOpenDrawerOnFab: Boolean = false,
) : FeedScreenViewState
Expand Down Expand Up @@ -460,7 +470,7 @@ interface FeedScreenViewState {
val showReadingTime: Boolean
val filter: FeedListFilter
val showFilterMenu: Boolean
val searching: Boolean
val searchBarVisible: Boolean
val showTitleUnreadCount: Boolean
val isOpenDrawerOnFab: Boolean
}
Expand Down

0 comments on commit 9599def

Please sign in to comment.