From 34718a7b8946ed90be5c4100c01d95fe64f47674 Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Sun, 24 May 2020 20:24:04 +0200 Subject: [PATCH] Don't add new entries to the view if restoring from instance state Also addresses other potential issues with the same cause. Fixes #363. --- .../aegis/ui/MainActivity.java | 73 +++++++++++-------- .../aegis/ui/views/EntryAdapter.java | 3 +- .../aegis/ui/views/EntryListView.java | 3 +- 3 files changed, 45 insertions(+), 34 deletions(-) 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 46aff94a..bb29bae5 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -215,24 +215,26 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene private void onPreferencesResult(Intent data) { // refresh the entire entry list if needed - if (data.getBooleanExtra("needsRecreate", false)) { - recreate(); - } else if (data.getBooleanExtra("needsRefresh", false)) { - boolean showAccountName = getPreferences().isAccountNameVisible(); - int codeGroupSize = getPreferences().getCodeGroupSize(); - boolean searchAccountName = getPreferences().isSearchAccountNameEnabled(); - boolean highlightEntry = getPreferences().isEntryHighlightEnabled(); - boolean tapToReveal = getPreferences().isTapToRevealEnabled(); - int tapToRevealTime = getPreferences().getTapToRevealTime(); - ViewMode viewMode = getPreferences().getCurrentViewMode(); - _entryListView.setShowAccountName(showAccountName); - _entryListView.setCodeGroupSize(codeGroupSize); - _entryListView.setSearchAccountName(searchAccountName); - _entryListView.setHighlightEntry(highlightEntry); - _entryListView.setTapToReveal(tapToReveal); - _entryListView.setTapToRevealTime(tapToRevealTime); - _entryListView.setViewMode(viewMode); - _entryListView.refresh(true); + if (_loaded) { + if (data.getBooleanExtra("needsRecreate", false)) { + recreate(); + } else if (data.getBooleanExtra("needsRefresh", false)) { + boolean showAccountName = getPreferences().isAccountNameVisible(); + int codeGroupSize = getPreferences().getCodeGroupSize(); + boolean searchAccountName = getPreferences().isSearchAccountNameEnabled(); + boolean highlightEntry = getPreferences().isEntryHighlightEnabled(); + boolean tapToReveal = getPreferences().isTapToRevealEnabled(); + int tapToRevealTime = getPreferences().getTapToRevealTime(); + ViewMode viewMode = getPreferences().getCurrentViewMode(); + _entryListView.setShowAccountName(showAccountName); + _entryListView.setCodeGroupSize(codeGroupSize); + _entryListView.setSearchAccountName(searchAccountName); + _entryListView.setHighlightEntry(highlightEntry); + _entryListView.setTapToReveal(tapToReveal); + _entryListView.setTapToRevealTime(tapToRevealTime); + _entryListView.setViewMode(viewMode); + _entryListView.refresh(true); + } } } @@ -254,7 +256,9 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene } else { for (VaultEntry entry : entries) { _vault.addEntry(entry); - _entryListView.addEntry(entry); + if (_loaded) { + _entryListView.addEntry(entry); + } } saveVault(); @@ -262,19 +266,23 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene } private void onAddEntryResult(Intent data) { - UUID entryUUID = (UUID) data.getSerializableExtra("entryUUID"); - VaultEntry entry = _vault.getEntryByUUID(entryUUID); - _entryListView.addEntry(entry); + if (_loaded) { + UUID entryUUID = (UUID) data.getSerializableExtra("entryUUID"); + VaultEntry entry = _vault.getEntryByUUID(entryUUID); + _entryListView.addEntry(entry); + } } private void onEditEntryResult(Intent data) { - UUID entryUUID = (UUID) data.getSerializableExtra("entryUUID"); + if (_loaded) { + UUID entryUUID = (UUID) data.getSerializableExtra("entryUUID"); - if (data.getBooleanExtra("delete", false)) { - _entryListView.removeEntry(entryUUID); - } else { - VaultEntry entry = _vault.getEntryByUUID(entryUUID); - _entryListView.replaceEntry(entryUUID, entry); + if (data.getBooleanExtra("delete", false)) { + _entryListView.removeEntry(entryUUID); + } else { + VaultEntry entry = _vault.getEntryByUUID(entryUUID); + _entryListView.replaceEntry(entryUUID, entry); + } } } @@ -615,10 +623,11 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene } private void loadEntries() { - List entries = new ArrayList<>(_vault.getEntries()); - _entryListView.addEntries(entries); - _entryListView.runEntriesAnimation(); - _loaded = true; + if (!_loaded) { + _entryListView.addEntries(_vault.getEntries()); + _entryListView.runEntriesAnimation(); + _loaded = true; + } } private void startAuthActivity() { 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 5edd546e..1e548be9 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 @@ -18,6 +18,7 @@ import com.beemdevelopment.aegis.otp.TotpInfo; import com.beemdevelopment.aegis.vault.VaultEntry; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -127,7 +128,7 @@ public class EntryAdapter extends RecyclerView.Adapter implements I checkPeriodUniformity(); } - public void addEntries(List entries) { + public void addEntries(Collection entries) { _entries.addAll(entries); updateShownEntries(); checkPeriodUniformity(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 31bc4fcc..e5c1b6b5 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 @@ -33,6 +33,7 @@ import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.util.ViewPreloadSizeProvider; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.UUID; @@ -253,7 +254,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { updateEmptyState(); } - public void addEntries(List entries) { + public void addEntries(Collection entries) { _adapter.addEntries(entries); updateEmptyState(); }