From c206d4bee87aaaef3e5aa5f7eb5d93799ce3f7db Mon Sep 17 00:00:00 2001 From: elena Date: Wed, 31 Aug 2022 05:47:10 +0100 Subject: [PATCH] Additional code grouping options --- .../beemdevelopment/aegis/Preferences.java | 29 +++++++++++++++---- .../aegis/ui/MainActivity.java | 3 +- .../AppearancePreferencesFragment.java | 2 +- .../aegis/ui/views/EntryAdapter.java | 7 +++-- .../aegis/ui/views/EntryHolder.java | 29 ++++++++++++++----- .../aegis/ui/views/EntryListView.java | 3 +- app/src/main/res/values/arrays.xml | 16 ++++++++++ app/src/main/res/values/strings.xml | 8 ++++- .../main/res/xml/preferences_appearance.xml | 8 +++-- 9 files changed, 81 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java index 73d23418..5acc140d 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java +++ b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java @@ -7,6 +7,8 @@ import android.net.Uri; import android.os.Build; import android.preference.PreferenceManager; +import com.beemdevelopment.aegis.ui.views.EntryHolder; + import androidx.annotation.Nullable; import com.beemdevelopment.aegis.util.JsonUtils; @@ -118,12 +120,10 @@ public class Preferences { return _prefs.getBoolean("pref_account_name", true); } - public int getCodeGroupSize() { - if (_prefs.getBoolean("pref_code_group_size", false)) { - return 2; - } else { - return 3; - } + public CodeGrouping getCodeGroupSize() { + String value = _prefs.getString("pref_code_group_size_string", "GROUPING_THREES"); + + return CodeGrouping.valueOf(value); } public boolean isIntroDone() { @@ -500,4 +500,21 @@ public class Preferences { return new BackupResult(new Date(time), error); } } + + public enum CodeGrouping { + HALVES(-1), + NO_GROUPING(-2), + GROUPING_TWOS(2), + GROUPING_THREES(3), + GROUPING_FOURS(4); + + private final int _value; + CodeGrouping(int value) { + _value = value; + } + + public int getValue() { + return _value; + } + } } 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 76b50a0c..2f343f5e 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -47,6 +47,7 @@ import com.beemdevelopment.aegis.ui.dialogs.Dialogs; import com.beemdevelopment.aegis.ui.fragments.preferences.BackupsPreferencesFragment; import com.beemdevelopment.aegis.ui.fragments.preferences.PreferencesFragment; import com.beemdevelopment.aegis.ui.tasks.QrDecodeTask; +import com.beemdevelopment.aegis.ui.views.EntryHolder; import com.beemdevelopment.aegis.ui.views.EntryListView; import com.beemdevelopment.aegis.vault.VaultEntry; import com.google.android.material.bottomsheet.BottomSheetDialog; @@ -263,7 +264,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene recreate(); } else if (data.getBooleanExtra("needsRefresh", false)) { boolean showAccountName = _prefs.isAccountNameVisible(); - int codeGroupSize = _prefs.getCodeGroupSize(); + Preferences.CodeGrouping codeGroupSize = _prefs.getCodeGroupSize(); boolean highlightEntry = _prefs.isEntryHighlightEnabled(); boolean pauseFocused = _prefs.isPauseFocusedEnabled(); boolean tapToReveal = _prefs.isTapToRevealEnabled(); diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/AppearancePreferencesFragment.java b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/AppearancePreferencesFragment.java index c175864a..20140d88 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/AppearancePreferencesFragment.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/AppearancePreferencesFragment.java @@ -102,7 +102,7 @@ public class AppearancePreferencesFragment extends PreferencesFragment { return true; }); - Preference codeDigitGroupingPreference = requirePreference("pref_code_group_size"); + Preference codeDigitGroupingPreference = requirePreference("pref_code_group_size_string"); codeDigitGroupingPreference.setOnPreferenceChangeListener((preference, newValue) -> { getResult().putExtra("needsRefresh", true); return true; 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 fc363169..265e5a2b 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 @@ -15,6 +15,7 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.beemdevelopment.aegis.R; +import com.beemdevelopment.aegis.Preferences; import com.beemdevelopment.aegis.SortCategory; import com.beemdevelopment.aegis.ViewMode; import com.beemdevelopment.aegis.helpers.ItemTouchHelperAdapter; @@ -41,7 +42,7 @@ public class EntryAdapter extends RecyclerView.Adapter private List _selectedEntries; private Map _usageCounts; private VaultEntry _focusedEntry; - private int _codeGroupSize; + private Preferences.CodeGrouping _codeGroupSize; private boolean _showAccountName; private boolean _highlightEntry; private boolean _tempHighlightEntry; @@ -78,8 +79,8 @@ public class EntryAdapter extends RecyclerView.Adapter _view = null; } - public void setCodeGroupSize(int codeGroupeSize) { - _codeGroupSize = codeGroupeSize; + public void setCodeGroupSize(Preferences.CodeGrouping codeGroupSize) { + _codeGroupSize = codeGroupSize; } public void setShowAccountName(boolean showAccountName) { diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java index 0ca82e7c..88b40ac0 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java @@ -13,6 +13,7 @@ import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.RecyclerView; import com.amulyakhare.textdrawable.TextDrawable; +import com.beemdevelopment.aegis.Preferences; import com.beemdevelopment.aegis.R; import com.beemdevelopment.aegis.helpers.IconViewHelper; import com.beemdevelopment.aegis.helpers.TextDrawableHelper; @@ -47,7 +48,7 @@ public class EntryHolder extends RecyclerView.ViewHolder { private final ImageView _selected; private final Handler _selectedHandler; - private int _codeGroupSize = 6; + private Preferences.CodeGrouping _codeGrouping = Preferences.CodeGrouping.NO_GROUPING; private boolean _hidden; private boolean _paused; @@ -102,15 +103,11 @@ public class EntryHolder extends RecyclerView.ViewHolder { }); } - public void setData(VaultEntry entry, int codeGroupSize, boolean showAccountName, boolean showProgress, boolean hidden, boolean paused, boolean dimmed) { + public void setData(VaultEntry entry, Preferences.CodeGrouping groupSize, boolean showAccountName, boolean showProgress, boolean hidden, boolean paused, boolean dimmed) { _entry = entry; _hidden = hidden; _paused = paused; - - if (codeGroupSize <= 0) - throw new IllegalArgumentException("Code group size cannot be zero or negative"); - - _codeGroupSize = codeGroupSize; + _codeGrouping = groupSize; _selected.clearAnimation(); _selected.setVisibility(View.GONE); @@ -257,9 +254,25 @@ public class EntryHolder extends RecyclerView.ViewHolder { } private String formatCode(String code) { + int groupSize; StringBuilder sb = new StringBuilder(); + + switch (_codeGrouping) { + case NO_GROUPING: + groupSize = code.length(); + break; + case HALVES: + groupSize = (code.length() / 2) + (code.length() % 2); + break; + default: + groupSize = _codeGrouping.getValue(); + if (groupSize <= 0) { + throw new IllegalArgumentException("Code group size cannot be zero or negative"); + } + } + for (int i = 0; i < code.length(); i++) { - if (i != 0 && i % _codeGroupSize == 0) { + if (i != 0 && i % groupSize == 0) { sb.append(" "); } sb.append(code.charAt(i)); 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 cddc5738..5176154d 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 @@ -22,6 +22,7 @@ import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.beemdevelopment.aegis.Preferences; import com.beemdevelopment.aegis.R; import com.beemdevelopment.aegis.SortCategory; import com.beemdevelopment.aegis.ViewMode; @@ -285,7 +286,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { _prefGroupFilter = groupFilter; } - public void setCodeGroupSize(int codeGrouping) { + public void setCodeGroupSize(Preferences.CodeGrouping codeGrouping) { _adapter.setCodeGroupSize(codeGrouping); } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 23f79438..365bc57b 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -124,4 +124,20 @@ @string/export_format_aegis @string/export_format_google_auth_uri + + + @string/pref_grouping_halves + @string/pref_grouping_none + @string/pref_grouping_size_two + @string/pref_grouping_size_three + @string/pref_grouping_size_four + + + + HALVES + NO_GROUPING + GROUPING_TWOS + GROUPING_THREES + GROUPING_FOURS + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0816bc76..ccb3a7bb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -39,7 +39,7 @@ View mode Language Code digit grouping - Show code in 2-digit grouping instead of 3-digit grouping + Select number of digits to group codes by Show the account name Enable this to show the account name next to the issuer Import from file @@ -445,4 +445,10 @@ Groups Focus search on app start Focus the search immediately after opening the app. + + Halves + No grouping + Groups of 2 + Groups of 3 + Groups of 4 diff --git a/app/src/main/res/xml/preferences_appearance.xml b/app/src/main/res/xml/preferences_appearance.xml index 1c87755e..81f3362e 100644 --- a/app/src/main/res/xml/preferences_appearance.xml +++ b/app/src/main/res/xml/preferences_appearance.xml @@ -30,11 +30,13 @@ android:title="@string/pref_view_mode_title" app:iconSpaceReserved="false"/> -