diff --git a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java index b2fd5e66..2fbd3ebd 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java +++ b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java @@ -6,8 +6,12 @@ import android.content.res.Resources; import android.net.Uri; import android.os.Build; import android.preference.PreferenceManager; +import android.text.TextUtils; +import java.util.Arrays; +import java.util.Collections; import java.util.Date; +import java.util.List; import java.util.Locale; import java.util.concurrent.TimeUnit; @@ -224,4 +228,18 @@ public class Preferences { public boolean isCopyOnTapEnabled() { return _prefs.getBoolean("pref_copy_on_tap", false); } + + public void setGroupFilter(List groupFilter) { + String filter = TextUtils.join(",", groupFilter); + _prefs.edit().putString("pref_group_filter", filter).apply(); + } + + public List getGroupFilter() { + String filter = _prefs.getString("pref_group_filter", null); + if (filter == null || filter.isEmpty()) { + return Collections.emptyList(); + } + + return Arrays.asList(filter.split(",")); + } } diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java index 92a2dd38..85e594c6 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -119,6 +119,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene _entryListView.setSortCategory(getPreferences().getCurrentSortCategory(), false); _entryListView.setViewMode(getPreferences().getCurrentViewMode()); _entryListView.setIsCopyOnTapEnabled(getPreferences().isCopyOnTapEnabled()); + _entryListView.setPrefGroupFilter(getPreferences().getGroupFilter()); FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(v -> { @@ -723,6 +724,11 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene @Override public void onListChange() { _fabScrollHelper.setVisible(true); } + @Override + public void onSaveGroupFilter(List groupFilter) { + getPreferences().setGroupFilter(groupFilter); + } + @Override public void onLocked(boolean userInitiated) { if (_actionMode != null) { diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java index 07b1cca0..f33916ba 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java @@ -283,10 +283,6 @@ public class EntryAdapter extends RecyclerView.Adapter implements I _viewMode = viewMode; } - public void setGroups(TreeSet groups) { - _view.setGroups(groups); - } - @Override public void onItemDismiss(int position) { diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java index 36b98fc4..1db358c7 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java @@ -67,6 +67,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { private LinearLayout _emptyStateView; private Chip _groupChip; private List _groupFilter; + private List _prefGroupFilter; private UiRefresher _refresher; @@ -130,7 +131,6 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { }); _emptyStateView = view.findViewById(R.id.vEmptyList); - return view; } @@ -269,6 +269,10 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { @Override public void onListChange() { _listener.onListChange(); } + public void setPrefGroupFilter(List groupFilter) { + _prefGroupFilter = groupFilter; + } + public void setCodeGroupSize(int codeGrouping) { _adapter.setCodeGroupSize(codeGrouping); } @@ -375,9 +379,19 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { ChipGroup chipGroup = view.findViewById(R.id.groupChipGroup); Button clearButton = view.findViewById(R.id.btnClear); + Button saveButton = view.findViewById(R.id.btnSave); clearButton.setOnClickListener(v -> { chipGroup.clearCheck(); - setGroupFilter(Collections.emptyList(), true); + List groupFilter = Collections.emptyList(); + _listener.onSaveGroupFilter(groupFilter); + setGroupFilter(groupFilter, true); + dialog.dismiss(); + }); + + saveButton.setOnClickListener(v -> { + List groupFilter = getGroupFilter(chipGroup); + _listener.onSaveGroupFilter(groupFilter); + setGroupFilter(groupFilter, true); dialog.dismiss(); }); @@ -394,9 +408,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { chip.setChipBackgroundColorResource(R.color.bg_chip_color); chip.setTextColor(colorStateList); chip.setOnCheckedChangeListener((group1, checkedId) -> { - List groupFilter = chipGroup.getCheckedChipIds().stream() - .map(i -> ((Chip) view.findViewById(i)).getText().toString()) - .collect(Collectors.toList()); + List groupFilter = getGroupFilter(chipGroup); setGroupFilter(groupFilter, true); }); @@ -407,6 +419,12 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { }); } + private static List getGroupFilter(ChipGroup chipGroup) { + return chipGroup.getCheckedChipIds().stream() + .map(i -> ((Chip) chipGroup.findViewById(i)).getText().toString()) + .collect(Collectors.toList()); + } + private void updateGroupChip() { if (_groupFilter.isEmpty()) { _groupChip.setText(R.string.groups); @@ -425,17 +443,26 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { _groupChip.setVisibility(_groups.isEmpty() ? View.GONE : View.VISIBLE); updateDividerDecoration(); - if (_groupFilter != null) { - List groupFilter = _groupFilter.stream() - .filter(g -> _groups.contains(g)) - .collect(Collectors.toList()); - + if (_prefGroupFilter != null) { + List groupFilter = cleanGroupFilter(_prefGroupFilter); + _prefGroupFilter = null; + if (!groupFilter.isEmpty()) { + setGroupFilter(groupFilter, false); + } + } else if (_groupFilter != null) { + List groupFilter = cleanGroupFilter(_groupFilter); if (!_groupFilter.equals(groupFilter)) { setGroupFilter(groupFilter, true); } } } + private List cleanGroupFilter(List groupFilter) { + return groupFilter.stream() + .filter(g -> _groups.contains(g)) + .collect(Collectors.toList()); + } + private void updateDividerDecoration() { if (_dividerDecoration != null) { _recyclerView.removeItemDecoration(_dividerDecoration); @@ -474,6 +501,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { void onSelect(VaultEntry entry); void onDeselect(VaultEntry entry); void onListChange(); + void onSaveGroupFilter(List groupFilter); } private class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration { diff --git a/app/src/main/res/layout/dialog_select_groups.xml b/app/src/main/res/layout/dialog_select_groups.xml index ea6c3cf1..41d75738 100644 --- a/app/src/main/res/layout/dialog_select_groups.xml +++ b/app/src/main/res/layout/dialog_select_groups.xml @@ -1,7 +1,6 @@ -