mirror of
https://github.com/beemdevelopment/Aegis.git
synced 2025-04-19 13:29:13 +00:00
Improve search feature for better UX
This commit is contained in:
parent
3e3df919b2
commit
503ce87c91
2 changed files with 18 additions and 8 deletions
|
@ -930,6 +930,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
_searchView.setOnCloseListener(() -> {
|
_searchView.setOnCloseListener(() -> {
|
||||||
boolean enabled = _submittedSearchQuery != null;
|
boolean enabled = _submittedSearchQuery != null;
|
||||||
_searchViewBackPressHandler.setEnabled(enabled);
|
_searchViewBackPressHandler.setEnabled(enabled);
|
||||||
|
_groupChip.setVisibility(_groups.isEmpty() ? View.GONE : View.VISIBLE);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -963,6 +964,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
});
|
});
|
||||||
_searchView.setOnSearchClickListener(v -> {
|
_searchView.setOnSearchClickListener(v -> {
|
||||||
String query = _submittedSearchQuery != null ? _submittedSearchQuery : _pendingSearchQuery;
|
String query = _submittedSearchQuery != null ? _submittedSearchQuery : _pendingSearchQuery;
|
||||||
|
_groupChip.setVisibility(View.GONE);
|
||||||
_searchView.setQuery(query, false);
|
_searchView.setQuery(query, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1028,6 +1030,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
}
|
}
|
||||||
|
|
||||||
private void collapseSearchView() {
|
private void collapseSearchView() {
|
||||||
|
_groupChip.setVisibility(_groups.isEmpty() ? View.GONE : View.VISIBLE);
|
||||||
_searchView.setQuery(null, false);
|
_searchView.setQuery(null, false);
|
||||||
_searchView.setIconified(true);
|
_searchView.setIconified(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ import com.beemdevelopment.aegis.vault.VaultEntry;
|
||||||
import com.beemdevelopment.aegis.vault.VaultGroup;
|
import com.beemdevelopment.aegis.vault.VaultGroup;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
@ -196,6 +197,19 @@ public class EntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
||||||
String name = entry.getName().toLowerCase();
|
String name = entry.getName().toLowerCase();
|
||||||
String note = entry.getNote().toLowerCase();
|
String note = entry.getNote().toLowerCase();
|
||||||
|
|
||||||
|
if (_searchFilter != null) {
|
||||||
|
String[] tokens = _searchFilter.toLowerCase().split("\\s+");
|
||||||
|
|
||||||
|
// Return true if not all tokens match at least one of the relevant fields
|
||||||
|
return !Arrays.stream(tokens)
|
||||||
|
.allMatch(token ->
|
||||||
|
((_searchBehaviorMask & Preferences.SEARCH_IN_ISSUER) != 0 && issuer.contains(token)) ||
|
||||||
|
((_searchBehaviorMask & Preferences.SEARCH_IN_NAME) != 0 && name.contains(token)) ||
|
||||||
|
((_searchBehaviorMask & Preferences.SEARCH_IN_NOTE) != 0 && note.contains(token)) ||
|
||||||
|
((_searchBehaviorMask & Preferences.SEARCH_IN_GROUPS) != 0 && doesAnyGroupMatchSearchFilter(groups, token))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (!_groupFilter.isEmpty()) {
|
if (!_groupFilter.isEmpty()) {
|
||||||
if (groups.isEmpty() && !_groupFilter.contains(null)) {
|
if (groups.isEmpty() && !_groupFilter.contains(null)) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -205,14 +219,7 @@ public class EntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_searchFilter == null) {
|
return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((_searchBehaviorMask & Preferences.SEARCH_IN_ISSUER) == 0 || !issuer.contains(_searchFilter))
|
|
||||||
&& ((_searchBehaviorMask & Preferences.SEARCH_IN_NAME) == 0 || !name.contains(_searchFilter))
|
|
||||||
&& ((_searchBehaviorMask & Preferences.SEARCH_IN_NOTE) == 0 || !note.contains(_searchFilter))
|
|
||||||
&& ((_searchBehaviorMask & Preferences.SEARCH_IN_GROUPS) == 0 || !doesAnyGroupMatchSearchFilter(entry.getGroups(), _searchFilter));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean doesAnyGroupMatchSearchFilter(Set<UUID> entryGroupUUIDs, String searchFilter) {
|
private boolean doesAnyGroupMatchSearchFilter(Set<UUID> entryGroupUUIDs, String searchFilter) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue