Optimized search

This commit is contained in:
2dust
2024-08-17 14:58:48 +08:00
parent f040fa5c08
commit fee0a016d8
3 changed files with 13 additions and 10 deletions

View File

@@ -236,12 +236,12 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
if (searchItem != null) {
val searchView = searchItem.actionView as SearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
mainViewModel.filterConfig(query.orEmpty())
override fun onQueryTextSubmit(query: String?): Boolean = false
override fun onQueryTextChange(newText: String?): Boolean {
mainViewModel.filterConfig(newText.orEmpty())
return false
}
override fun onQueryTextChange(newText: String?): Boolean = false
})
searchView.setOnCloseListener {

View File

@@ -46,7 +46,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
var subscriptionId: String = MmkvManager.settingsStorage.decodeString(AppConfig.CACHE_SUBSCRIPTION_ID, "").orEmpty()
//var keywordFilter: String = MmkvManager.settingsStorage.decodeString(AppConfig.CACHE_KEYWORD_FILTER, "")?:""
private var keywordFilter = ""
var keywordFilter = ""
val serversCache = mutableListOf<ServersCache>()
val isRunning by lazy { MutableLiveData<Boolean>() }
val updateListAction by lazy { MutableLiveData<Int>() }
@@ -170,7 +170,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
fun exportAllServer(): Int {
val serverListCopy =
if (subscriptionId.isNullOrEmpty()) {
if (subscriptionId.isNullOrEmpty() && keywordFilter.isNullOrEmpty()) {
serverList
} else {
serversCache.map { it.guid }.toList()
@@ -295,7 +295,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
}
fun removeAllServer() {
if (subscriptionId.isNullOrEmpty()) {
if (subscriptionId.isNullOrEmpty() && keywordFilter.isNullOrEmpty()) {
MmkvManager.removeAllServer()
} else {
val serversCopy = serversCache.toList()
@@ -306,7 +306,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
}
fun removeInvalidServer() {
if (subscriptionId.isNullOrEmpty()) {
if (subscriptionId.isNullOrEmpty() && keywordFilter.isNullOrEmpty()) {
MmkvManager.removeInvalidServer("")
} else {
val serversCopy = serversCache.toList()
@@ -348,6 +348,9 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
}
fun filterConfig(keyword: String) {
if (keyword == keywordFilter) {
return
}
keywordFilter = keyword
MmkvManager.settingsStorage.encode(AppConfig.CACHE_KEYWORD_FILTER, keywordFilter)
reloadServerList()

View File

@@ -3,10 +3,10 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search_view"
android:icon="@drawable/ic_description_24dp"
android:icon="@drawable/ic_outline_filter_alt_24"
android:title="@string/menu_item_search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always" />
app:showAsAction="always|collapseActionView"/>
<item
android:icon="@drawable/ic_add_24dp"
android:title="@string/menu_item_add_config"