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 4dd28d37a..d2540b8ad 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 @@ -298,11 +298,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..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,15 +54,22 @@ public class ExistingBackupFragment extends BaseFragment { View view = inflater.inflate(R.layout.fragment_existing_backup, container, false); Bundle args = requireArguments(); - ArrayList custodianNames = args.getStringArrayList(CUSTODIANS); - String custodianNamesString = ""; - for (String custodianName : custodianNames) { - custodianNamesString += custodianName + ", "; - } - 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); + ArrayList custodianNames = args.getStringArrayList(CUSTODIANS); + + StringBuilder custodianNamesString = new StringBuilder(); + for (String custodianName : custodianNames) { + custodianNamesString + .append("• ") + .append(custodianName) + .append("\n"); + } + + 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/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 3ded4b83f..1151fed0e 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -723,12 +723,13 @@ 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 Help recover account + %d of the following contacts are needed to restore your account: 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; } 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 e249edbc2..c2944e869 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 @@ -279,7 +279,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 @@ -423,7 +423,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<>();