diff options
| author | Fabian Henneke <FabianHenneke@users.noreply.github.com> | 2020-04-14 21:27:51 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-15 00:57:51 +0530 |
| commit | 75a70543b3def38d3e89fce489c2c99c1bb45d5f (patch) | |
| tree | 9db9c37111bcb6ee76dfb6c8cc3097f6d8bb4480 /app/src/main/java/com/zeapo/pwdstore/SearchableRepositoryViewModel.kt | |
| parent | ec8bcae8fafa638e9e2e76ee041fa2db5bd292e6 (diff) | |
| download | HardenedPass-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.kt | 14 |
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 |
