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.koin.android)
|
||||||
|
|
||||||
|
implementation(libs.commons.text)
|
||||||
|
|
||||||
implementation(project(":search"))
|
implementation(project(":search"))
|
||||||
implementation(project(":base"))
|
implementation(project(":base"))
|
||||||
implementation(project(":preferences"))
|
implementation(project(":preferences"))
|
||||||
|
|||||||
@ -18,6 +18,8 @@ import de.mm20.launcher2.search.data.LauncherApp
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.*
|
import kotlinx.coroutines.flow.*
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import org.apache.commons.text.similarity.FuzzyScore
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
interface AppRepository {
|
interface AppRepository {
|
||||||
fun search(query: String): Flow<List<Application>>
|
fun search(query: String): Flow<List<Application>>
|
||||||
@ -188,22 +190,17 @@ internal class AppRepositoryImpl(
|
|||||||
|
|
||||||
merge(installedApps, hiddenItems, installations).collectLatest {
|
merge(installedApps, hiddenItems, installations).collectLatest {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
|
val fuzzyScore = FuzzyScore(Locale.getDefault())
|
||||||
val appResults = mutableListOf<Application>()
|
val appResults = mutableListOf<Application>()
|
||||||
if (query.isEmpty()) {
|
if (query.isEmpty()) {
|
||||||
appResults.addAll(installedApps.value)
|
appResults.addAll(installedApps.value)
|
||||||
appResults.addAll(installations.value)
|
appResults.addAll(installations.value)
|
||||||
} else {
|
} else {
|
||||||
appResults.addAll(installedApps.value.filter {
|
appResults.addAll(installedApps.value.filter {
|
||||||
it.label.contains(
|
fuzzyScore.fuzzyScore(it.label, query) >= query.length * 1.5
|
||||||
query,
|
|
||||||
ignoreCase = true
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
appResults.addAll(installations.value.filter {
|
appResults.addAll(installations.value.filter {
|
||||||
it.label.contains(
|
fuzzyScore.fuzzyScore(it.label, query) >= query.length * 1.5
|
||||||
query,
|
|
||||||
ignoreCase = true
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user