diff options
author | Amogh Lele <amolele@gmail.com> | 2021-04-07 11:02:41 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-07 11:02:41 +0530 |
commit | 7acbf0eda85f44ee305825de5395f4537fce999b (patch) | |
tree | 6dc3671a209f13ae32059484358fa35f33bcc04d | |
parent | 474770c5e38ac6f6519ed2ac54f0d0c52addbb0f (diff) |
Switch to sublime text's fuzzy matching (#1372)
* refactor(search): use sublime text's fuzzy matching algorithm
Signed-off-by: SphericalKat <amolele@gmail.com>
* chore(changelog): update
Signed-off-by: SphericalKat <amolele@gmail.com>
* build: fetch sublime-fuzzy from Maven Central
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* chore(changelog): update
Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | app/build.gradle.kts | 1 | ||||
-rw-r--r-- | app/src/main/java/dev/msfjarvis/aps/util/viewmodel/SearchableRepositoryViewModel.kt | 28 | ||||
-rw-r--r-- | buildSrc/src/main/java/Dependencies.kt | 1 |
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" } |