Implement several new features

This commit implements the following features:
- Trash/Archive for deleted entries
- NFC Vault Transfer
- Duress Password (Decoy Vault)
- Advanced Sorting and Usage Insights
pull/1699/head
google-labs-jules[bot] 2 months ago
parent a838314831
commit 2bc91cd235

@ -1291,11 +1291,15 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
copyEntryCode(entry);
// Update usage count and last used timestamp
int usageCount = _prefs.getUsageCount(entry.getUUID()) + 1;
_prefs.setUsageCount(entry.getUUID(), usageCount);
_prefs.setLastUsedTimestamp(entry.getUUID(), System.currentTimeMillis());
Map<UUID, Integer> usageCounts = _prefs.getUsageCounts();
usageCounts.put(entry.getUUID(), _prefs.getUsageCount(entry.getUUID()) + 1);
_prefs.setUsageCount(usageCounts);
_entryListView.setUsageCounts(_prefs.getUsageCounts());
Map<UUID, Long> lastUsedTimestamps = _prefs.getLastUsedTimestamps();
lastUsedTimestamps.put(entry.getUUID(), System.currentTimeMillis());
_prefs.setLastUsedTimestamps(lastUsedTimestamps);
_entryListView.setUsageCounts(usageCounts);
_entryListView.setLastUsedTimestamps(_prefs.getLastUsedTimestamps());
}

@ -35,7 +35,7 @@ public class NfcTransferActivity extends AegisActivity implements NfcAdapter.Cre
return;
}
nfcAdapter.setNdefPushMessageCallback(this, this);
nfcAdapter.setNdefPushMessageCallback((NfcAdapter.CreateNdefMessageCallback) this, this);
}
@Override
@ -80,10 +80,12 @@ public class NfcTransferActivity extends AegisActivity implements NfcAdapter.Cre
if (vaultFile.isEncrypted()) {
com.beemdevelopment.aegis.ui.dialogs.Dialogs.showPasswordInputDialog(this, password -> {
try {
com.beemdevelopment.aegis.vault.VaultFileCredentials creds = new com.beemdevelopment.aegis.vault.VaultFileCredentials(new String(password));
java.util.List<com.beemdevelopment.aegis.vault.slots.PasswordSlot> slots = vaultFile.getHeader().getSlots().findAll(com.beemdevelopment.aegis.vault.slots.PasswordSlot.class);
com.beemdevelopment.aegis.crypto.MasterKey masterKey = com.beemdevelopment.aegis.ui.tasks.PasswordSlotDecryptTask.decryptWithPassword(slots, password);
com.beemdevelopment.aegis.vault.VaultFileCredentials creds = new com.beemdevelopment.aegis.vault.VaultFileCredentials(masterKey, vaultFile.getHeader().getSlots());
com.beemdevelopment.aegis.vault.Vault receivedVault = com.beemdevelopment.aegis.vault.Vault.fromJson(vaultFile.getContent(creds));
showImportConfirmationDialog(receivedVault);
} catch (com.beemdevelopment.aegis.vault.VaultFileException | org.json.JSONException | com.beemdevelopment.aegis.vault.VaultException e) {
} catch (com.beemdevelopment.aegis.vault.slots.SlotException | com.beemdevelopment.aegis.vault.slots.SlotIntegrityException | com.beemdevelopment.aegis.vault.VaultFileException | org.json.JSONException | com.beemdevelopment.aegis.vault.VaultException e) {
e.printStackTrace();
Toast.makeText(this, "Failed to decrypt vault.", Toast.LENGTH_LONG).show();
}

@ -45,6 +45,17 @@ public class PasswordSlotDecryptTask extends ProgressDialogTask<PasswordSlotDecr
return null;
}
public static MasterKey decryptWithPassword(List<PasswordSlot> slots, char[] password) throws SlotIntegrityException, SlotException {
for (PasswordSlot slot : slots) {
try {
return decryptPasswordSlot(slot, password).getKey();
} catch (SlotIntegrityException ignored) {
}
}
throw new SlotIntegrityException("No matching password slot found.");
}
public static Result decryptPasswordSlot(PasswordSlot slot, char[] password)
throws SlotIntegrityException, SlotException {
MasterKey masterKey;

Loading…
Cancel
Save