@@ -18,16 +18,14 @@ import android.widget.Toast
18
18
import com.github.wrdlbrnft.sortedlistadapter.SortedListAdapter
19
19
import io.neoterm.R
20
20
import io.neoterm.backend.TerminalSession
21
- import io.neoterm.component.pm.PackageComponent
22
- import io.neoterm.component.pm.Source
23
- import io.neoterm.component.pm.SourceManager
24
- import io.neoterm.component.pm.SourceHelper
21
+ import io.neoterm.component.pm.*
25
22
import io.neoterm.frontend.component.ComponentManager
26
23
import io.neoterm.frontend.config.NeoPreference
27
24
import io.neoterm.frontend.config.NeoTermPath
28
25
import io.neoterm.frontend.floating.TerminalDialog
29
26
import io.neoterm.ui.pm.adapter.PackageAdapter
30
27
import io.neoterm.ui.pm.model.PackageModel
28
+ import io.neoterm.ui.pm.utils.StringDistance
31
29
import io.neoterm.utils.PackageUtils
32
30
33
31
/* *
@@ -232,18 +230,25 @@ class PackageManagerActivity : AppCompatActivity(), SearchView.OnQueryTextListen
232
230
}.start()
233
231
}
234
232
235
- private fun filter (models : List <PackageModel >, query : String? ): List <PackageModel > {
236
- val filteredModelList = ArrayList <PackageModel >()
237
- if (query != null ) {
238
- val lowerCaseQuery = query.toLowerCase()
239
- for (model in models) {
240
- val name = model.packageInfo.packageName!! .toLowerCase()
241
- val desc = model.packageInfo.description!! .toLowerCase()
242
- if (name.contains(lowerCaseQuery) || desc.contains(lowerCaseQuery)) {
243
- filteredModelList.add(model)
244
- }
245
- }
233
+ private fun sortDistance (models : List <PackageModel >, query : String ,
234
+ mapper : (NeoPackageInfo ) -> String ): List <Pair <PackageModel , Int >> {
235
+ return models
236
+ .map({
237
+ Pair (it, StringDistance .distance(mapper(it.packageInfo).toLowerCase(), query.toLowerCase()))
238
+ })
239
+ .sortedWith(Comparator { l, r -> r.second.compareTo(l.second) })
240
+ .toList()
241
+ }
242
+
243
+ private fun filter (models : List <PackageModel >, query : String ): List <PackageModel > {
244
+ val filteredModelList = mutableListOf<PackageModel >()
245
+ val prepared = models.filter {
246
+ it.packageInfo.packageName!! .contains(query, true )
247
+ || it.packageInfo.description!! .contains(query, true )
246
248
}
249
+
250
+ sortDistance(prepared, query, { it.packageName!! }).mapTo(filteredModelList, { it.first })
251
+ sortDistance(prepared, query, { it.description!! }).mapTo(filteredModelList, { it.first })
247
252
return filteredModelList
248
253
}
249
254
@@ -252,10 +257,12 @@ class PackageManagerActivity : AppCompatActivity(), SearchView.OnQueryTextListen
252
257
}
253
258
254
259
override fun onQueryTextChange (text : String? ): Boolean {
255
- val filteredModelList = filter(models, text)
256
- adapter.edit()
257
- .replaceAll(filteredModelList)
258
- .commit()
260
+ if (text != null ) {
261
+ val filteredModelList = filter(models, text)
262
+ adapter.edit()
263
+ .replaceAll(filteredModelList)
264
+ .commit()
265
+ }
259
266
return true
260
267
}
261
268
0 commit comments