From 5261d054d486ff84c56346ab28a876c5f478571d Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 19 Apr 2023 13:01:22 +0800 Subject: [PATCH] Start to separate typeahead search from the view model --- .../omnivore/ui/library/LibraryView.kt | 1 - .../omnivore/ui/library/LibraryViewModel.kt | 18 +++++++----------- .../omnivore/omnivore/ui/library/SearchBar.kt | 9 ++++----- .../omnivore/omnivore/ui/library/SearchView.kt | 4 ++++ 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryView.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryView.kt index 91e81f4a2..20fb83f8a 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryView.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryView.kt @@ -66,7 +66,6 @@ fun LibraryViewContent(libraryViewModel: LibraryViewModel, modifier: Modifier) { ) val cardsData: List by libraryViewModel.itemsLiveData.observeAsState(listOf()) - val searchedCardsData: List by libraryViewModel.searchItemsLiveData.observeAsState(listOf()) Box( modifier = Modifier diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt index d562fa63d..c09469b2c 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt @@ -97,7 +97,9 @@ class LibraryViewModel @Inject constructor( if (text == "") { searchItemsLiveData.value = listOf() } else { - load(clearPreviousSearch = true) + viewModelScope.launch { + performTypeaheadSearch(true) + } } } @@ -133,12 +135,8 @@ class LibraryViewModel @Inject constructor( loadInitialFilterValues() viewModelScope.launch { - if (searchTextLiveData.value != "") { - performSearch(clearPreviousSearch) - } else { - syncItems() - loadUsingSearchAPI() - } + syncItems() + loadUsingSearchAPI() } } @@ -189,9 +187,7 @@ class LibraryViewModel @Inject constructor( } suspend fun handleFilterChanges() { - if (searchTextLiveData.value != "") { - performSearch(true) - } else if (appliedSortFilterLiveData.value != null && appliedFilterLiveData.value != null) { + if (appliedSortFilterLiveData.value != null && appliedFilterLiveData.value != null) { itemsLiveDataInternal = dataService.libraryLiveData(appliedFilterLiveData.value!!, appliedSortFilterLiveData.value!!, activeLabelsLiveData.value ?: listOf()) itemsLiveData.removeSource(itemsLiveDataInternal) itemsLiveData.addSource(itemsLiveDataInternal, itemsLiveData::setValue) @@ -237,7 +233,7 @@ class LibraryViewModel @Inject constructor( } } - private suspend fun performSearch(clearPreviousSearch: Boolean) { + private suspend fun performTypeaheadSearch(clearPreviousSearch: Boolean) { if (clearPreviousSearch) { cursor = null } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SearchBar.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SearchBar.kt index 20be1f3dd..cb3d0a149 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SearchBar.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SearchBar.kt @@ -66,17 +66,16 @@ fun SearchBar( @Composable fun SearchField( searchText: String, + onSearch: () -> Unit, onSearchTextChanged: (String) -> Unit, navController: NavHostController, ) { var showClearButton by remember { mutableStateOf(false) } - val keyboardController = LocalSoftwareKeyboardController.current val focusRequester = remember { FocusRequester() } TextField( modifier = Modifier .fillMaxWidth() - // .padding(vertical = 2.dp) .onFocusChanged { focusState -> showClearButton = (focusState.isFocused) } @@ -115,9 +114,9 @@ fun SearchField( }, maxLines = 1, singleLine = true, - keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Done), - keyboardActions = KeyboardActions(onDone = { - keyboardController?.hide() + keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Search), + keyboardActions = KeyboardActions(onSearch = { + onSearch() }), ) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SearchView.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SearchView.kt index fb2263480..570ce6b7a 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SearchView.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/SearchView.kt @@ -49,6 +49,10 @@ fun SearchView( Row { SearchField( searchText, + onSearch = { + libraryViewModel.loadUsingSearchAPI() + navController.popBackStack() + }, onSearchTextChanged = { libraryViewModel.updateSearchText(it) }, navController = navController )