From d359b1fb9c071dcd70d63d9efed8345cbdf34fe9 Mon Sep 17 00:00:00 2001 From: ameba23 Date: Tue, 8 Feb 2022 09:50:21 +0100 Subject: [PATCH] Popup dialog on shards sent --- .../socialbackup/ExistingBackupFragment.java | 30 ++++----------- .../SocialBackupSetupActivity.java | 21 ++++------ .../SocialBackupSetupViewModel.java | 38 +++++++++++-------- .../ThresholdSelectorFragment.java | 14 +++++++ briar-android/src/main/res/values/strings.xml | 5 +-- briar-android/src/main/res/xml/settings.xml | 2 +- 6 files changed, 54 insertions(+), 56 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 a2d4c7b3e..7b3cd6300 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 @@ -7,6 +7,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.identity.Author; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; @@ -31,7 +32,7 @@ public class ExistingBackupFragment extends BaseFragment { @Inject ViewModelProvider.Factory viewModelFactory; - private static SocialBackupSetupViewModel viewModel; + private SocialBackupSetupViewModel viewModel; @Override public void injectFragment(ActivityComponent component) { @@ -40,21 +41,6 @@ public class ExistingBackupFragment extends BaseFragment { .get(SocialBackupSetupViewModel.class); } - public static ExistingBackupFragment newInstance() { - Bundle bundle = new Bundle(); - BackupMetadata backupMetadata = viewModel.getBackupMetadata(); - List custodians = backupMetadata.getCustodians(); - ArrayList custodianNames = new ArrayList(); - 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); @@ -68,20 +54,20 @@ public class ExistingBackupFragment extends BaseFragment { ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_existing_backup, container, false); - Bundle args = requireArguments(); - ArrayList custodianNames = args.getStringArrayList(CUSTODIANS); + BackupMetadata backupMetadata = viewModel.getBackupMetadata(); + List custodians = backupMetadata.getCustodians(); StringBuilder custodianNamesString = new StringBuilder(); - for (String custodianName : custodianNames) { + for (Author custodian : custodians) { custodianNamesString .append("• ") - .append(custodianName) + .append(custodian.getName()) .append("\n"); } TextView textViewThreshold = view.findViewById(R.id.textViewThreshold); textViewThreshold.setText(getString(R.string.existing_backup_explain, - args.getInt(THRESHOLD))); + backupMetadata.getThreshold())); TextView textViewCustodians = view.findViewById(R.id.textViewCustodians); textViewCustodians.setText(custodianNamesString); @@ -94,11 +80,9 @@ public class ExistingBackupFragment extends BaseFragment { // listener = (ShardsSentDismissedListener) context; } - @Override public String getUniqueTag() { return TAG; } - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/SocialBackupSetupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/SocialBackupSetupActivity.java index ea83ad1d9..5847482ba 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/SocialBackupSetupActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/SocialBackupSetupActivity.java @@ -46,9 +46,7 @@ public class SocialBackupSetupActivity extends BriarActivity implements setContentView(R.layout.activity_distributed_backup); if (viewModel.haveExistingBackup()) { - ExistingBackupFragment fragment = - ExistingBackupFragment.newInstance(); - showInitialFragment(fragment); + showInitialFragment(new ExistingBackupFragment()); } else { try { if (!viewModel.haveEnoughContacts()) { @@ -73,16 +71,13 @@ public class SocialBackupSetupActivity extends BriarActivity implements private void onStateChanged(SocialBackupSetupViewModel.State state) { switch(state) { case SUCCESS: - try { - viewModel.createBackup(); - ShardsSentFragment fragment = new ShardsSentFragment(); - showNextFragment(fragment); - } catch (DbException e) { - Toast.makeText(this, - "There was an error when creating the backup", - Toast.LENGTH_LONG).show(); - finish(); - } + finish(); + break; + case FAILURE: + Toast.makeText(this, + "There was an error when creating the backup", + Toast.LENGTH_LONG).show(); + finish(); break; case CHOOSING_CUSTODIANS: CustodianSelectorFragment fragment = diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/SocialBackupSetupViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/SocialBackupSetupViewModel.java index 7cb2b16de..1b80dfa2e 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/SocialBackupSetupViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/SocialBackupSetupViewModel.java @@ -32,7 +32,8 @@ public class SocialBackupSetupViewModel extends AndroidViewModel { EXPLAINING, CHOOSING_CUSTODIANS, GETTING_THRESHOLD, - SUCCESS + SUCCESS, + FAILURE } private final MutableLiveData state = @@ -53,39 +54,44 @@ public class SocialBackupSetupViewModel extends AndroidViewModel { public boolean haveExistingBackup() { try { - db.transaction(false, txn -> { - backupMetadata = - socialBackupManager.getBackupMetadata(txn); - if (backupMetadata == null) throw new DbException(); - }); + backupMetadata = db.transactionWithNullableResult(true, + socialBackupManager::getBackupMetadata); } catch (DbException e) { return false; } - return true; + return (backupMetadata != null); } public BackupMetadata getBackupMetadata() { return backupMetadata; } - public boolean haveEnoughContacts() throws DbException { - return (contactManager.getContacts().size() > 1); + public boolean haveEnoughContacts() throws DbException { + return (contactManager.getContacts().size() > 1); } public void setCustodians(Collection contacts) { custodians = contacts; } - public void createBackup() throws DbException { - db.transaction(false, txn -> { - socialBackupManager - .createBackup(txn, (List) custodians, - threshold); - }); + public void createBackup() { + try { + db.transaction(false, txn -> { + socialBackupManager + .createBackup(txn, (List) custodians, + threshold); + }); + } catch (DbException e) { + state.postValue(State.FAILURE); + } } public void setThreshold(int threshold) { this.threshold = threshold; + createBackup(); + } + + public void onSuccessDismissed() { state.postValue(State.SUCCESS); } @@ -94,7 +100,7 @@ public class SocialBackupSetupViewModel extends AndroidViewModel { } public void onExplainerDismissed() { - state.postValue(State.CHOOSING_CUSTODIANS); + state.postValue(State.CHOOSING_CUSTODIANS); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ThresholdSelectorFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ThresholdSelectorFragment.java index 954cd1784..9fe517a78 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ThresholdSelectorFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/ThresholdSelectorFragment.java @@ -20,6 +20,7 @@ import javax.inject.Inject; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.lifecycle.ViewModelProvider; public class ThresholdSelectorFragment extends BaseFragment { @@ -125,12 +126,25 @@ public class ThresholdSelectorFragment extends BaseFragment { switch (item.getItemId()) { case R.id.action_threshold_defined: viewModel.setThreshold(threshold); + showSuccessDialog(); return true; default: return super.onOptionsItemSelected(item); } } + private void showSuccessDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(requireContext(), + R.style.BriarDialogTheme); + builder.setTitle(R.string.backup_created); + builder.setMessage(R.string.backup_done_info); + builder.setPositiveButton(R.string.ok, + (dialog, which) -> viewModel.onSuccessDismissed()); + builder.setIcon(R.drawable.ic_baseline_done_outline_24); + AlertDialog dialog = builder.create(); + dialog.show(); + } + private String buildThresholdRepresentationString() { String thresholdRepresentationText = ""; for (int i = 0; i < threshold; i++) { diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index b4ee06f60..4643ce7c0 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -667,12 +667,11 @@ Choose Threshold %d of %d contacts needed to recover your account + Social Backup created Backup pieces sent to trusted contacts - Backup created 1/6/2020 - Backup your Briar identity and contacts list using trusted contacts - You must choose a set of contacts to send backup pieces to. + You must choose a set true contacts to send backup pieces to. Choose trusted contacts diff --git a/briar-android/src/main/res/xml/settings.xml b/briar-android/src/main/res/xml/settings.xml index dfa35a0dd..189a16030 100644 --- a/briar-android/src/main/res/xml/settings.xml +++ b/briar-android/src/main/res/xml/settings.xml @@ -96,7 +96,7 @@ app:iconSpaceReserved="false">