Retain text in search view when switching tabs before first search (#3540)

Fixes #3527
This commit is contained in:
UlrichKu 2023-07-19 11:40:08 +02:00 committed by GitHub
parent 1287614c2e
commit e4c2476f34
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 3 deletions

View File

@ -40,7 +40,7 @@ import dagger.android.DispatchingAndroidInjector
import dagger.android.HasAndroidInjector import dagger.android.HasAndroidInjector
import javax.inject.Inject import javax.inject.Inject
class SearchActivity : BottomSheetActivity(), HasAndroidInjector, MenuProvider { class SearchActivity : BottomSheetActivity(), HasAndroidInjector, MenuProvider, SearchView.OnQueryTextListener {
@Inject @Inject
lateinit var androidInjector: DispatchingAndroidInjector<Any> lateinit var androidInjector: DispatchingAndroidInjector<Any>
@ -91,8 +91,6 @@ class SearchActivity : BottomSheetActivity(), HasAndroidInjector, MenuProvider {
searchViewMenuItem.expandActionView() searchViewMenuItem.expandActionView()
val searchView = searchViewMenuItem.actionView as SearchView val searchView = searchViewMenuItem.actionView as SearchView
setupSearchView(searchView) setupSearchView(searchView)
searchView.setQuery(viewModel.currentQuery, false)
} }
override fun onMenuItemSelected(menuItem: MenuItem): Boolean { override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
@ -150,9 +148,23 @@ class SearchActivity : BottomSheetActivity(), HasAndroidInjector, MenuProvider {
val pxBuffer = ((48 * 2) * resources.displayMetrics.density).toInt() val pxBuffer = ((48 * 2) * resources.displayMetrics.density).toInt()
searchView.maxWidth = pxScreenWidth - pxBuffer searchView.maxWidth = pxScreenWidth - pxBuffer
// Keep text that was entered also when switching to a different tab (before the search is executed)
searchView.setOnQueryTextListener(this)
searchView.setQuery(viewModel.currentSearchFieldContent ?: "", false)
searchView.requestFocus() searchView.requestFocus()
} }
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
viewModel.currentSearchFieldContent = newText
return false
}
override fun androidInjector() = androidInjector override fun androidInjector() = androidInjector
companion object { companion object {

View File

@ -45,6 +45,7 @@ class SearchViewModel @Inject constructor(
) : ViewModel() { ) : ViewModel() {
var currentQuery: String = "" var currentQuery: String = ""
var currentSearchFieldContent: String? = null
val activeAccount: AccountEntity? val activeAccount: AccountEntity?
get() = accountManager.activeAccount get() = accountManager.activeAccount