From be8aba347dca88d711a6de4af045509b1f53c0ad Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 10 May 2019 11:50:05 -0300 Subject: [PATCH] [android] Add error message for unsupported handshake link version --- .../add/remote/AddContactViewModel.java | 16 ++++++-- .../contact/add/remote/NicknameFragment.java | 12 +++--- .../briar/android/viewmodel/LiveResult.java | 40 +++++++++++++++++++ briar-android/src/main/res/values/strings.xml | 1 + 4 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/viewmodel/LiveResult.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/AddContactViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/AddContactViewModel.java index 6ed6087e3..c95f561ea 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/AddContactViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/AddContactViewModel.java @@ -8,10 +8,13 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import org.briarproject.bramble.api.FormatException; +import org.briarproject.bramble.api.UnsupportedVersionException; import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.briar.R; +import org.briarproject.briar.android.viewmodel.LiveResult; import org.briarproject.briar.android.viewmodel.LiveEvent; import org.briarproject.briar.android.viewmodel.MutableLiveEvent; @@ -39,7 +42,7 @@ public class AddContactViewModel extends AndroidViewModel { new MutableLiveData<>(); private final MutableLiveEvent remoteLinkEntered = new MutableLiveEvent<>(); - private final MutableLiveData addContactResult = + private final MutableLiveData> addContactResult = new MutableLiveData<>(); @Nullable private String remoteHandshakeLink; @@ -97,15 +100,20 @@ public class AddContactViewModel extends AndroidViewModel { dbExecutor.execute(() -> { try { contactManager.addPendingContact(remoteHandshakeLink, nickname); - addContactResult.postValue(true); + addContactResult.postValue(new LiveResult<>(true)); + } catch (UnsupportedVersionException e) { + logException(LOG, WARNING, e); + addContactResult + .postValue(new LiveResult<>(R.string.unsupported_link)); } catch (DbException | FormatException e) { logException(LOG, WARNING, e); - addContactResult.postValue(false); + addContactResult.postValue( + new LiveResult<>(R.string.adding_contact_error)); } }); } - LiveData getAddContactResult() { + public LiveData> getAddContactResult() { return addContactResult; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java index fc1ad3469..d01e78e31 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java @@ -103,15 +103,15 @@ public class NicknameFragment extends BaseFragment { addButton.setVisibility(INVISIBLE); progressBar.setVisibility(VISIBLE); - viewModel.getAddContactResult().observe(this, success -> { - if (success == null) return; - if (success) { + viewModel.getAddContactResult().observe(this, result -> { + if (result == null) return; + if (result.hasError()) { + Toast.makeText(getContext(), result.getErrorRes(), LENGTH_LONG) + .show(); + } else { Intent intent = new Intent(getActivity(), PendingContactListActivity.class); startActivity(intent); - } else { - Toast.makeText(getContext(), R.string.adding_contact_error, - LENGTH_LONG).show(); } finish(); }); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/viewmodel/LiveResult.java b/briar-android/src/main/java/org/briarproject/briar/android/viewmodel/LiveResult.java new file mode 100644 index 000000000..4bb19db0f --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/viewmodel/LiveResult.java @@ -0,0 +1,40 @@ +package org.briarproject.briar.android.viewmodel; + +import android.support.annotation.Nullable; +import android.support.annotation.StringRes; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +@NotNullByDefault +public class LiveResult { + + @Nullable + private T result; + @StringRes + private int errorRes; + + public LiveResult(T result) { + this.result = result; + this.errorRes = 0; + } + + public LiveResult(@StringRes int errorRes) { + this.result = null; + this.errorRes = errorRes; + } + + @Nullable + public T getResultOrNull() { + return result; + } + + @StringRes + public int getErrorRes() { + return errorRes; + } + + public boolean hasError() { + return errorRes != 0; + } + +} diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 6d633633d..0fab7115c 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -200,6 +200,7 @@ Enter your contact\'s link, not your own Please enter a nickname Invalid link + This link is not supported. Please upgrade Briar and try again. You opened your own link. Use the one of the contact you want to add! Please enter a link