From f601e2945b9991adba59951b05113f1af31d783f Mon Sep 17 00:00:00 2001 From: ameba23 Date: Tue, 18 May 2021 11:50:10 +0200 Subject: [PATCH 1/4] Improve error handling when creating backups, minor UI changes --- .../android/conversation/ConversationVisitor.java | 6 ++++-- .../socialbackup/CustodianScanQrButtonListener.java | 8 -------- .../socialbackup/DistributedBackupActivity.java | 5 ++++- .../socialbackup/ExistingBackupFragment.java | 13 +++++++++---- .../android/socialbackup/ShardsSentFragment.java | 4 ++++ briar-android/src/main/res/values/strings.xml | 4 ++-- 6 files changed, 23 insertions(+), 17 deletions(-) delete mode 100644 briar-android/src/main/java/org/briarproject/briar/android/socialbackup/CustodianScanQrButtonListener.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationVisitor.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationVisitor.java index e83b63053..600c75726 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationVisitor.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationVisitor.java @@ -296,11 +296,13 @@ class ConversationVisitor implements @Override public ConversationItem visitShardMessage(ShardMessageHeader r) { if (r.isLocal()) { - String text = ctx.getString(R.string.social_backup_shard_sent); + String text = ctx.getString(R.string.social_backup_shard_sent, + contactName.getValue()); return new ConversationNoticeItem( R.layout.list_item_conversation_notice_out, text, r); } else { - String text = ctx.getString(R.string.social_backup_shard_received); + String text = ctx.getString(R.string.social_backup_shard_received, + contactName.getValue()); return new ConversationNoticeItem( R.layout.list_item_conversation_notice_in, text, r); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/CustodianScanQrButtonListener.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/CustodianScanQrButtonListener.java deleted file mode 100644 index 0426cd0e6..000000000 --- a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/CustodianScanQrButtonListener.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.briarproject.briar.android.socialbackup; - -import androidx.annotation.UiThread; - -public interface CustodianScanQrButtonListener { - @UiThread - void scanQrButtonClicked(); -} diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/DistributedBackupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/DistributedBackupActivity.java index 35679e565..593670034 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/DistributedBackupActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/DistributedBackupActivity.java @@ -80,7 +80,10 @@ public class DistributedBackupActivity extends BriarActivity implements showNextFragment(fragment); }); } catch (DbException e) { - e.printStackTrace(); + Toast.makeText(this, + "There was an error when creating the backup", + Toast.LENGTH_LONG).show(); + finish(); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ExistingBackupFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ExistingBackupFragment.java index de5d8cc0f..ed4aab1c0 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ExistingBackupFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ExistingBackupFragment.java @@ -54,10 +54,15 @@ public class ExistingBackupFragment extends BaseFragment { container, false); Bundle args = requireArguments(); ArrayList custodianNames = args.getStringArrayList(CUSTODIANS); - String custodianNamesString = ""; - for (String custodianName : custodianNames) { - custodianNamesString += custodianName + ", "; - } + + StringBuilder custodianNamesString = new StringBuilder(); + for (String custodianName : custodianNames) { + custodianNamesString + .append("• ") + .append(custodianName) + .append("\n"); + } + TextView textViewThreshold = view.findViewById(R.id.textViewThreshold); textViewThreshold.setText(String.format("%d of %d contacts needed to restore account", args.getInt(THRESHOLD), custodianNames.size())); TextView textViewCustodians = view.findViewById(R.id.textViewCustodians); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ShardsSentFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ShardsSentFragment.java index f450e97a6..c6ad906d6 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ShardsSentFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ShardsSentFragment.java @@ -67,4 +67,8 @@ public class ShardsSentFragment extends BaseFragment { component.inject(this); } + public void onBackPressed() { + listener.shardsSentDismissed(); + } + } diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 169d513f3..47bca9814 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -723,8 +723,8 @@ Restore Account - You have received a social backup shard. - You have sent a social backup shard. + %1$s has sent you a social backup shard. + You have sent a social backup shard to %1$s. Create new account or recover existing account Recover Account From cae655b02074fed4e7f2ca45e1a0db78039a819c Mon Sep 17 00:00:00 2001 From: ameba23 Date: Tue, 18 May 2021 11:50:50 +0200 Subject: [PATCH 2/4] JavaDoc comments --- .../api/socialbackup/SocialBackupManager.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/briar-api/src/main/java/org/briarproject/briar/api/socialbackup/SocialBackupManager.java b/briar-api/src/main/java/org/briarproject/briar/api/socialbackup/SocialBackupManager.java index 8905617ce..f8f4522ac 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/socialbackup/SocialBackupManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/socialbackup/SocialBackupManager.java @@ -1,6 +1,5 @@ package org.briarproject.briar.api.socialbackup; -import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.Transaction; @@ -50,15 +49,33 @@ public interface SocialBackupManager extends void createBackup(Transaction txn, List custodianIds, int threshold) throws DbException; + /** + * Returns a collection of social backup message headers + */ @Override Collection getMessageHeaders( Transaction txn, ContactId contactId) throws DbException; + /** + * Determines whether you hold a shard belonging to a given contact + */ boolean amCustodian(Transaction txn, ContactId contactId); - ReturnShardPayload getReturnShardPayload(Transaction txn, ContactId contactId) + /** + * Retrieves the shard and encrypted backup you hold for a given contact + * + * @throws DbException if you are not a custodian for the given contact + */ + ReturnShardPayload getReturnShardPayload(Transaction txn, + ContactId contactId) throws DbException; + /** + * Retrieves the shard and encrypted backup you hold for a given contact + * encoded with BDF + * + * @throws DbException if you are not a custodian for the given contact + */ byte[] getReturnShardPayloadBytes(Transaction txn, ContactId contactId) throws DbException; } From 71e63fb6f1d4776a153e9e80e0ada4a2a8b460b9 Mon Sep 17 00:00:00 2001 From: ameba23 Date: Tue, 18 May 2021 11:52:28 +0200 Subject: [PATCH 3/4] Tidy SocialBackupManagerImpl --- .../briar/socialbackup/SocialBackupManagerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java index 0709cd75f..bea71b8a9 100644 --- a/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java @@ -278,7 +278,7 @@ class SocialBackupManagerImpl extends ConversationClientImpl } // Create the encrypted backup payload SecretKey secret = crypto.generateSecretKey(); - List contactData = loadContactData(txn); + List contactData = loadContactData(txn); BackupPayload payload = createBackupPayload(txn, secret, contactData, 0); // Create the shards @@ -422,7 +422,7 @@ class SocialBackupManagerImpl extends ConversationClientImpl contactData, version); } - private List loadContactData(Transaction txn) + private List loadContactData(Transaction txn) throws DbException { Collection contacts = contactManager.getContacts(txn); List contactData = new ArrayList<>(); From 4db1c4cc6b370d6f8de8140e7784d5b4fef6bdc8 Mon Sep 17 00:00:00 2001 From: ameba23 Date: Tue, 18 May 2021 12:06:09 +0200 Subject: [PATCH 4/4] Improve strings for ui for displaying existing social backup --- .../socialbackup/ExistingBackupFragment.java | 21 +++++++++++-------- briar-android/src/main/res/values/strings.xml | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ExistingBackupFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ExistingBackupFragment.java index ed4aab1c0..c5f7f0912 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ExistingBackupFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ExistingBackupFragment.java @@ -30,15 +30,16 @@ public class ExistingBackupFragment extends BaseFragment { Bundle bundle = new Bundle(); List custodians = backupMetadata.getCustodians(); ArrayList custodianNames = new ArrayList(); - for (Author custodian : custodians) { - custodianNames.add(custodian.getName()); - } - bundle.putStringArrayList(CUSTODIANS, custodianNames); + for (Author custodian : custodians) { + custodianNames.add(custodian.getName()); + } + bundle.putStringArrayList(CUSTODIANS, custodianNames); bundle.putInt(THRESHOLD, backupMetadata.getThreshold()); ExistingBackupFragment fragment = new ExistingBackupFragment(); fragment.setArguments(bundle); return fragment; } + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -53,7 +54,7 @@ public class ExistingBackupFragment extends BaseFragment { View view = inflater.inflate(R.layout.fragment_existing_backup, container, false); Bundle args = requireArguments(); - ArrayList custodianNames = args.getStringArrayList(CUSTODIANS); + ArrayList custodianNames = args.getStringArrayList(CUSTODIANS); StringBuilder custodianNamesString = new StringBuilder(); for (String custodianName : custodianNames) { @@ -63,10 +64,12 @@ public class ExistingBackupFragment extends BaseFragment { .append("\n"); } - TextView textViewThreshold = view.findViewById(R.id.textViewThreshold); - textViewThreshold.setText(String.format("%d of %d contacts needed to restore account", args.getInt(THRESHOLD), custodianNames.size())); - TextView textViewCustodians = view.findViewById(R.id.textViewCustodians); - textViewCustodians.setText(custodianNamesString); + TextView textViewThreshold = view.findViewById(R.id.textViewThreshold); + textViewThreshold.setText(getString(R.string.existing_backup_explain, + args.getInt(THRESHOLD))); + TextView textViewCustodians = + view.findViewById(R.id.textViewCustodians); + textViewCustodians.setText(custodianNamesString); return view; } diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 47bca9814..25b79b063 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -729,4 +729,5 @@ Create new account or recover existing account Recover Account Help recover account + %d of the following contacts are needed to restore your account: