summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--app/build.gradle.kts1
-rw-r--r--app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt28
-rw-r--r--buildSrc/src/main/java/Dependencies.kt1
4 files changed, 6 insertions, 25 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 245170e4..0304d949 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file.
- Allow doing a merge instead of a rebase when pulling or syncing
- Add support for manually providing TOTP parameters
- Parse extra content as individual fields
+- Improve search result filtering logic
### Fixed
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 2b271563..401b29a5 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -66,6 +66,7 @@ dependencies {
implementation(Dependencies.Kotlin.Coroutines.android)
implementation(Dependencies.Kotlin.Coroutines.core)
+ implementation(Dependencies.FirstParty.sublime_fuzzy)
implementation(Dependencies.FirstParty.zxing_android_embedded)
implementation(Dependencies.ThirdParty.bouncycastle)
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt b/app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt
index c3998d2a..881f98f4 100644
--- a/app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt
+++ b/app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt
@@ -31,6 +31,7 @@ import dev.msfjarvis.aps.util.autofill.DirectoryStructure
import dev.msfjarvis.aps.util.extensions.sharedPrefs
import dev.msfjarvis.aps.util.settings.PasswordSortOrder
import dev.msfjarvis.aps.util.settings.PreferenceKeys
+import dev.sphericalkat.sublimefuzzy.Fuzzy
import java.io.File
import java.text.Collator
import java.util.Locale
@@ -55,31 +56,8 @@ private fun File.toPasswordItem() =
else PasswordItem.newCategory(name, this, PasswordRepository.getRepositoryDirectory())
private fun PasswordItem.fuzzyMatch(filter: String): Int {
- var i = 0
- var j = 0
- var score = 0
- var bonus = 0
- var bonusIncrement = 0
-
- val toMatch = longName
-
- while (i < filter.length && j < toMatch.length) {
- when {
- filter[i].isWhitespace() -> i++
- filter[i].toLowerCase() == toMatch[j].toLowerCase() -> {
- i++
- bonusIncrement += 1
- bonus += bonusIncrement
- score += bonus
- }
- else -> {
- bonus = 0
- bonusIncrement = 0
- }
- }
- j++
- }
- return if (i == filter.length) score else 0
+ val (_, score) = Fuzzy.fuzzyMatch(filter, longName)
+ return score
}
private val CaseInsensitiveComparator = Collator.getInstance().apply { strength = Collator.PRIMARY }
diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt
index 73d34126..e86e381c 100644
--- a/buildSrc/src/main/java/Dependencies.kt
+++ b/buildSrc/src/main/java/Dependencies.kt
@@ -52,6 +52,7 @@ object Dependencies {
object FirstParty {
+ const val sublime_fuzzy = "com.github.android-password-store:sublime-fuzzy:1.0.0-alpha01"
const val zxing_android_embedded = "com.github.android-password-store:zxing-android-embedded:4.1.0-aps"
}