Don't add new entries to the view if restoring from instance state

Also addresses other potential issues with the same cause. Fixes #363.
This commit is contained in:
Alexander Bakker 2020-05-24 20:24:04 +02:00
parent 6a2992530e
commit 34718a7b89
3 changed files with 45 additions and 34 deletions

View file

@ -215,24 +215,26 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
private void onPreferencesResult(Intent data) { private void onPreferencesResult(Intent data) {
// refresh the entire entry list if needed // refresh the entire entry list if needed
if (data.getBooleanExtra("needsRecreate", false)) { if (_loaded) {
recreate(); if (data.getBooleanExtra("needsRecreate", false)) {
} else if (data.getBooleanExtra("needsRefresh", false)) { recreate();
boolean showAccountName = getPreferences().isAccountNameVisible(); } else if (data.getBooleanExtra("needsRefresh", false)) {
int codeGroupSize = getPreferences().getCodeGroupSize(); boolean showAccountName = getPreferences().isAccountNameVisible();
boolean searchAccountName = getPreferences().isSearchAccountNameEnabled(); int codeGroupSize = getPreferences().getCodeGroupSize();
boolean highlightEntry = getPreferences().isEntryHighlightEnabled(); boolean searchAccountName = getPreferences().isSearchAccountNameEnabled();
boolean tapToReveal = getPreferences().isTapToRevealEnabled(); boolean highlightEntry = getPreferences().isEntryHighlightEnabled();
int tapToRevealTime = getPreferences().getTapToRevealTime(); boolean tapToReveal = getPreferences().isTapToRevealEnabled();
ViewMode viewMode = getPreferences().getCurrentViewMode(); int tapToRevealTime = getPreferences().getTapToRevealTime();
_entryListView.setShowAccountName(showAccountName); ViewMode viewMode = getPreferences().getCurrentViewMode();
_entryListView.setCodeGroupSize(codeGroupSize); _entryListView.setShowAccountName(showAccountName);
_entryListView.setSearchAccountName(searchAccountName); _entryListView.setCodeGroupSize(codeGroupSize);
_entryListView.setHighlightEntry(highlightEntry); _entryListView.setSearchAccountName(searchAccountName);
_entryListView.setTapToReveal(tapToReveal); _entryListView.setHighlightEntry(highlightEntry);
_entryListView.setTapToRevealTime(tapToRevealTime); _entryListView.setTapToReveal(tapToReveal);
_entryListView.setViewMode(viewMode); _entryListView.setTapToRevealTime(tapToRevealTime);
_entryListView.refresh(true); _entryListView.setViewMode(viewMode);
_entryListView.refresh(true);
}
} }
} }
@ -254,7 +256,9 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
} else { } else {
for (VaultEntry entry : entries) { for (VaultEntry entry : entries) {
_vault.addEntry(entry); _vault.addEntry(entry);
_entryListView.addEntry(entry); if (_loaded) {
_entryListView.addEntry(entry);
}
} }
saveVault(); saveVault();
@ -262,19 +266,23 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
} }
private void onAddEntryResult(Intent data) { private void onAddEntryResult(Intent data) {
UUID entryUUID = (UUID) data.getSerializableExtra("entryUUID"); if (_loaded) {
VaultEntry entry = _vault.getEntryByUUID(entryUUID); UUID entryUUID = (UUID) data.getSerializableExtra("entryUUID");
_entryListView.addEntry(entry); VaultEntry entry = _vault.getEntryByUUID(entryUUID);
_entryListView.addEntry(entry);
}
} }
private void onEditEntryResult(Intent data) { private void onEditEntryResult(Intent data) {
UUID entryUUID = (UUID) data.getSerializableExtra("entryUUID"); if (_loaded) {
UUID entryUUID = (UUID) data.getSerializableExtra("entryUUID");
if (data.getBooleanExtra("delete", false)) { if (data.getBooleanExtra("delete", false)) {
_entryListView.removeEntry(entryUUID); _entryListView.removeEntry(entryUUID);
} else { } else {
VaultEntry entry = _vault.getEntryByUUID(entryUUID); VaultEntry entry = _vault.getEntryByUUID(entryUUID);
_entryListView.replaceEntry(entryUUID, entry); _entryListView.replaceEntry(entryUUID, entry);
}
} }
} }
@ -615,10 +623,11 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
} }
private void loadEntries() { private void loadEntries() {
List<VaultEntry> entries = new ArrayList<>(_vault.getEntries()); if (!_loaded) {
_entryListView.addEntries(entries); _entryListView.addEntries(_vault.getEntries());
_entryListView.runEntriesAnimation(); _entryListView.runEntriesAnimation();
_loaded = true; _loaded = true;
}
} }
private void startAuthActivity() { private void startAuthActivity() {

View file

@ -18,6 +18,7 @@ import com.beemdevelopment.aegis.otp.TotpInfo;
import com.beemdevelopment.aegis.vault.VaultEntry; import com.beemdevelopment.aegis.vault.VaultEntry;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
@ -127,7 +128,7 @@ public class EntryAdapter extends RecyclerView.Adapter<EntryHolder> implements I
checkPeriodUniformity(); checkPeriodUniformity();
} }
public void addEntries(List<VaultEntry> entries) { public void addEntries(Collection<VaultEntry> entries) {
_entries.addAll(entries); _entries.addAll(entries);
updateShownEntries(); updateShownEntries();
checkPeriodUniformity(true); checkPeriodUniformity(true);

View file

@ -33,6 +33,7 @@ import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.util.ViewPreloadSizeProvider; import com.bumptech.glide.util.ViewPreloadSizeProvider;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -253,7 +254,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
updateEmptyState(); updateEmptyState();
} }
public void addEntries(List<VaultEntry> entries) { public void addEntries(Collection<VaultEntry> entries) {
_adapter.addEntries(entries); _adapter.addEntries(entries);
updateEmptyState(); updateEmptyState();
} }