diff --git a/applications/build.gradle.kts b/applications/build.gradle.kts index 7a5c27e2..65eaee1e 100644 --- a/applications/build.gradle.kts +++ b/applications/build.gradle.kts @@ -42,6 +42,8 @@ dependencies { implementation(libs.koin.android) + implementation(libs.commons.text) + implementation(project(":search")) implementation(project(":base")) implementation(project(":preferences")) diff --git a/applications/src/main/java/de/mm20/launcher2/applications/AppRepository.kt b/applications/src/main/java/de/mm20/launcher2/applications/AppRepository.kt index a18f1298..8a5a8ef1 100644 --- a/applications/src/main/java/de/mm20/launcher2/applications/AppRepository.kt +++ b/applications/src/main/java/de/mm20/launcher2/applications/AppRepository.kt @@ -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> @@ -188,22 +190,17 @@ internal class AppRepositoryImpl( merge(installedApps, hiddenItems, installations).collectLatest { withContext(Dispatchers.IO) { + val fuzzyScore = FuzzyScore(Locale.getDefault()) val appResults = mutableListOf() 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 }) }