From ce9a15b7bc2177774c85cdbc77a6e14d90a7b687 Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Sun, 22 May 2022 13:05:50 +0200 Subject: [PATCH] Allow filtering by "No group" This is a continuation of #830 Close #826, #830 --- .../beemdevelopment/aegis/Preferences.java | 2 +- .../aegis/ui/views/EntryAdapter.java | 2 +- .../aegis/ui/views/EntryListView.java | 38 ++++++++++++------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java index 0dca6f49..18c2e5e9 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java +++ b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java @@ -347,7 +347,7 @@ public class Preferences { JSONArray json = new JSONArray(raw); List filter = new ArrayList<>(); for (int i = 0; i < json.length(); i++) { - filter.add(json.getString(i)); + filter.add(json.isNull(i) ? null : json.optString(i)); } return filter; } catch (JSONException e) { 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 8e1966b5..524cbdc1 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 @@ -220,7 +220,7 @@ public class EntryAdapter extends RecyclerView.Adapter implements I String name = entry.getName().toLowerCase(); if (!_groupFilter.isEmpty()) { - if (group == null || !_groupFilter.contains(group)) { + if (!_groupFilter.contains(group)) { return true; } } 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 2ed71871..7c47af0e 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 @@ -1,7 +1,6 @@ package com.beemdevelopment.aegis.ui.views; import android.annotation.SuppressLint; -import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; @@ -388,6 +387,20 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { _recyclerView.scheduleLayoutAnimation(); } + private void addChipTo(ChipGroup chipGroup, String group) { + Chip chip = (Chip) getLayoutInflater().inflate(R.layout.chip_material, null, false); + chip.setText(group == null ? getString(R.string.no_group) : group); + chip.setCheckable(true); + chip.setChecked(_groupFilter != null && _groupFilter.contains(group)); + chip.setCheckedIconVisible(true); + chip.setOnCheckedChangeListener((group1, checkedId) -> { + List groupFilter = getGroupFilter(chipGroup); + setGroupFilter(groupFilter, true); + }); + chip.setTag(group == null ? new Object() : null); + chipGroup.addView(chip); + } + private void initializeGroupChip() { View view = getLayoutInflater().inflate(R.layout.dialog_select_groups, null); BottomSheetDialog dialog = new BottomSheetDialog(requireContext()); @@ -415,18 +428,9 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { chipGroup.removeAllViews(); for (String group : _groups) { - Chip chip = (Chip) getLayoutInflater().inflate(R.layout.chip_material, null, false); - chip.setText(group); - chip.setCheckable(true); - chip.setChecked(_groupFilter != null && _groupFilter.contains(group)); - chip.setCheckedIconVisible(true); - chip.setOnCheckedChangeListener((group1, checkedId) -> { - List groupFilter = getGroupFilter(chipGroup); - setGroupFilter(groupFilter, true); - }); - - chipGroup.addView(chip); + addChipTo(chipGroup, group); } + addChipTo(chipGroup, null); Dialogs.showSecureDialog(dialog); }); @@ -434,7 +438,13 @@ 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()) + .map(i -> { + Chip chip = chipGroup.findViewById(i); + if (chip.getTag() != null) { + return null; + } + return chip. getText().toString(); + }) .collect(Collectors.toList()); } @@ -472,7 +482,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { private List cleanGroupFilter(List groupFilter) { return groupFilter.stream() - .filter(g -> _groups.contains(g)) + .filter(g -> g == null || _groups.contains(g)) .collect(Collectors.toList()); }