Fuzzy match search queries in app search

This commit is contained in:
MM20 2022-02-19 21:08:26 +01:00
parent 5e9719afa7
commit 05f64ea238
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
2 changed files with 7 additions and 8 deletions

View File

@ -42,6 +42,8 @@ dependencies {
implementation(libs.koin.android)
implementation(libs.commons.text)
implementation(project(":search"))
implementation(project(":base"))
implementation(project(":preferences"))

View File

@ -18,6 +18,8 @@ import de.mm20.launcher2.search.data.LauncherApp
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.withContext
import org.apache.commons.text.similarity.FuzzyScore
import java.util.*
interface AppRepository {
fun search(query: String): Flow<List<Application>>
@ -188,22 +190,17 @@ internal class AppRepositoryImpl(
merge(installedApps, hiddenItems, installations).collectLatest {
withContext(Dispatchers.IO) {
val fuzzyScore = FuzzyScore(Locale.getDefault())
val appResults = mutableListOf<Application>()
if (query.isEmpty()) {
appResults.addAll(installedApps.value)
appResults.addAll(installations.value)
} else {
appResults.addAll(installedApps.value.filter {
it.label.contains(
query,
ignoreCase = true
)
fuzzyScore.fuzzyScore(it.label, query) >= query.length * 1.5
})
appResults.addAll(installations.value.filter {
it.label.contains(
query,
ignoreCase = true
)
fuzzyScore.fuzzyScore(it.label, query) >= query.length * 1.5
})
}