Commit 76158975 authored by Mygod's avatar Mygod Committed by Max Lv

Prevent creating excessive filters

parent 9c1da29b
...@@ -146,19 +146,15 @@ class AppManager : AppCompatActivity() { ...@@ -146,19 +146,15 @@ class AppManager : AppCompatActivity() {
AppViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_apps_item, parent, false)) AppViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_apps_item, parent, false))
override fun getItemCount(): Int = filteredApps.size override fun getItemCount(): Int = filteredApps.size
override fun getFilter(): Filter { private val filterImpl = object : Filter() {
return object : Filter() { override fun performFiltering(constraint: CharSequence) = FilterResults().apply {
override fun performFiltering(constraint: CharSequence): FilterResults {
val filteredApps = if (constraint.isEmpty()) apps else apps.filter { val filteredApps = if (constraint.isEmpty()) apps else apps.filter {
it.name.contains(constraint, true) || it.name.contains(constraint, true) ||
it.packageName.contains(constraint, true) || it.packageName.contains(constraint, true) ||
it.uid.toString().contains(constraint) it.uid.toString().contains(constraint)
} }
count = filteredApps.size
return FilterResults().also { values = filteredApps
it.count = filteredApps.size
it.values = filteredApps
}
} }
override fun publishResults(constraint: CharSequence, results: FilterResults) { override fun publishResults(constraint: CharSequence, results: FilterResults) {
...@@ -167,7 +163,7 @@ class AppManager : AppCompatActivity() { ...@@ -167,7 +163,7 @@ class AppManager : AppCompatActivity() {
notifyDataSetChanged() notifyDataSetChanged()
} }
} }
} override fun getFilter(): Filter = filterImpl
} }
private val proxiedUids = SparseBooleanArray() private val proxiedUids = SparseBooleanArray()
...@@ -206,14 +202,7 @@ class AppManager : AppCompatActivity() { ...@@ -206,14 +202,7 @@ class AppManager : AppCompatActivity() {
loading.crossFadeFrom(list) loading.crossFadeFrom(list)
val adapter = list.adapter as AppsAdapter val adapter = list.adapter as AppsAdapter
withContext(Dispatchers.IO) { adapter.reload() } withContext(Dispatchers.IO) { adapter.reload() }
adapter.filter.filter(search.query)
val queryText = search.query
if (queryText.isNullOrEmpty()) {
adapter.notifyDataSetChanged()
} else {
adapter.filter.filter(queryText)
}
list.crossFadeFrom(loading) list.crossFadeFrom(loading)
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment