aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/zeapo/pwdstore/SearchableRepositoryViewModel.kt
diff options
context:
space:
mode:
authorFabian Henneke <FabianHenneke@users.noreply.github.com>2020-04-14 21:27:51 +0200
committerGitHub <noreply@github.com>2020-04-15 00:57:51 +0530
commit75a70543b3def38d3e89fce489c2c99c1bb45d5f (patch)
tree9db9c37111bcb6ee76dfb6c8cc3097f6d8bb4480 /app/src/main/java/com/zeapo/pwdstore/SearchableRepositoryViewModel.kt
parentec8bcae8fafa638e9e2e76ee041fa2db5bd292e6 (diff)
downloadHardenedPass-75a70543b3def38d3e89fce489c2c99c1bb45d5f.tar.gz
HardenedPass-75a70543b3def38d3e89fce489c2c99c1bb45d5f.zip
Improve search logic and UI (#703)
* Don't list the current directory in search results * Scroll to top result when search term is changed * Match relative path in StrictDomain filter mode * Improve and document DirectoryStructure null handling Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/SearchableRepositoryViewModel.kt')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/SearchableRepositoryViewModel.kt14
1 files changed, 9 insertions, 5 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/SearchableRepositoryViewModel.kt b/app/src/main/java/com/zeapo/pwdstore/SearchableRepositoryViewModel.kt
index 3e0dddd6..992a5f79 100644
--- a/app/src/main/java/com/zeapo/pwdstore/SearchableRepositoryViewModel.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/SearchableRepositoryViewModel.kt
@@ -39,6 +39,7 @@ import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
@@ -94,11 +95,11 @@ private fun PasswordItem.Companion.makeComparator(
PasswordRepository.PasswordSortOrder.FILE_FIRST -> compareByDescending { it.type }
}
.then(compareBy(nullsLast(CaseInsensitiveComparator)) {
- directoryStructure.getIdentifierFor(
- it.file
- )
+ directoryStructure.getIdentifierFor(it.file)
+ })
+ .then(compareBy(CaseInsensitiveComparator) {
+ directoryStructure.getUsernameFor(it.file)
})
- .then(compareBy(CaseInsensitiveComparator) { directoryStructure.getUsernameFor(it.file) })
}
val PasswordItem.stableId: String
@@ -219,7 +220,8 @@ class SearchableRepositoryViewModel(application: Application) : AndroidViewModel
FilterMode.StrictDomain -> {
check(searchAction.listMode == ListMode.FilesOnly) { "Searches with StrictDomain search mode can only list files" }
prefilteredResultFlow
- .filter { file ->
+ .filter { absoluteFile ->
+ val file = absoluteFile.relativeTo(root)
val toMatch =
directoryStructure.getIdentifierFor(file) ?: return@filter false
// In strict domain mode, we match
@@ -268,6 +270,8 @@ class SearchableRepositoryViewModel(application: Application) : AndroidViewModel
return dir
.walkTopDown().onEnter { file -> shouldTake(file) }
.asFlow()
+ // Skip the root directory
+ .drop(1)
.map {
yield()
it