From 7773a51f2a9dd59f77858e269f0e00ee1e2a3adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Sch=C3=A4ttgen?= Date: Mon, 27 Apr 2020 02:29:10 +0200 Subject: [PATCH] Use most frequent period to show progress --- .../aegis/ui/views/EntryAdapter.java | 40 ++++++++++++++----- .../aegis/ui/views/EntryListView.java | 2 +- 2 files changed, 30 insertions(+), 12 deletions(-) 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 5e941879..f704f934 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 @@ -20,7 +20,9 @@ import com.beemdevelopment.aegis.otp.TotpInfo; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class EntryAdapter extends RecyclerView.Adapter implements ItemTouchHelperAdapter { private EntryListView _view; @@ -312,7 +314,7 @@ public class EntryAdapter extends RecyclerView.Adapter implements I boolean hidden = _tapToReveal && entry != _focusedEntry; boolean dimmed = _highlightEntry && _focusedEntry != null && _focusedEntry != entry; - boolean showProgress = !isPeriodUniform() && entry.getInfo() instanceof TotpInfo; + boolean showProgress = entry.getInfo() instanceof TotpInfo && ((TotpInfo) entry.getInfo()).getPeriod() != getMostFrequentPeriod(); holder.setData(entry, _codeGroupSize, _showAccountName, showProgress, hidden, dimmed); holder.setFocused(_selectedEntries.contains(entry)); holder.loadIcon(_view); @@ -388,22 +390,26 @@ public class EntryAdapter extends RecyclerView.Adapter implements I } private void checkPeriodUniformity(boolean force) { - int uniformPeriod = getUniformPeriod(); + int mostFrequentPeriod = getMostFrequentPeriod(); boolean uniform = isPeriodUniform(); - if (!force && uniform == _isPeriodUniform && uniformPeriod == _uniformPeriod) { + + if (!force && uniform == _isPeriodUniform && mostFrequentPeriod == _uniformPeriod) { return; } + _isPeriodUniform = uniform; - _uniformPeriod = uniformPeriod; + _uniformPeriod = mostFrequentPeriod; for (EntryHolder holder : _holders) { - holder.setShowProgress(!_isPeriodUniform); + if ((holder.getEntry().getInfo() instanceof TotpInfo)) { + holder.setShowProgress(((TotpInfo) holder.getEntry().getInfo()).getPeriod() != mostFrequentPeriod); + } } _view.onPeriodUniformityChanged(_isPeriodUniform, _uniformPeriod); } - public int getUniformPeriod() { + public int getMostFrequentPeriod() { List infos = new ArrayList<>(); for (VaultEntry entry : _shownEntries) { OtpInfo info = entry.getInfo(); @@ -416,14 +422,26 @@ public class EntryAdapter extends RecyclerView.Adapter implements I return -1; } - int period = infos.get(0).getPeriod(); + Map occurrences = new HashMap<>(); for (TotpInfo info : infos) { - if (period != info.getPeriod()) { - return -1; + int period = info.getPeriod(); + if(occurrences.containsKey(period)) { + occurrences.put(period, occurrences.get(period) + 1); + } else { + occurrences.put(period, 1); } } - return period; + Integer maxValue = 0; + Integer maxKey = 0; + for (Map.Entry entry : occurrences.entrySet()){ + if(entry.getValue() > maxValue){ + maxValue = entry.getValue(); + maxKey = entry.getKey(); + } + } + + return maxValue > 1 ? maxKey : -1; } private void focusEntry(VaultEntry entry) { @@ -494,7 +512,7 @@ public class EntryAdapter extends RecyclerView.Adapter implements I } public boolean isPeriodUniform() { - return isPeriodUniform(getUniformPeriod()); + return isPeriodUniform(getMostFrequentPeriod()); } private static boolean isPeriodUniform(int period) { 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 4fbc3878..a9e6cab6 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 @@ -104,7 +104,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { @Override public long getMillisTillNextRefresh() { - return TotpInfo.getMillisTillNextRotation(_adapter.getUniformPeriod()); + return TotpInfo.getMillisTillNextRotation(_adapter.getMostFrequentPeriod()); } });