Fuzzy match search queries in app search
This commit is contained in:
parent
5e9719afa7
commit
05f64ea238
@ -42,6 +42,8 @@ dependencies {
|
||||
|
||||
implementation(libs.koin.android)
|
||||
|
||||
implementation(libs.commons.text)
|
||||
|
||||
implementation(project(":search"))
|
||||
implementation(project(":base"))
|
||||
implementation(project(":preferences"))
|
||||
|
||||
@ -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
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user