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 2c032992f..ae5fd9255 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 @@ -7,11 +7,13 @@ import android.arch.lifecycle.MutableLiveData; 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.android.viewmodel.LiveEvent; +import org.briarproject.briar.android.viewmodel.LiveResult; import org.briarproject.briar.android.viewmodel.MutableLiveEvent; import java.util.concurrent.Executor; @@ -38,7 +40,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; @@ -96,15 +98,18 @@ 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<>(e)); } catch (DbException | FormatException e) { logException(LOG, WARNING, e); - addContactResult.postValue(false); + addContactResult.postValue(new LiveResult<>(e)); } }); } - LiveData getAddContactResult() { + public LiveData> getAddContactResult() { return addContactResult; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/LinkExchangeFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/LinkExchangeFragment.java index e37d987c6..27e8eda6d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/LinkExchangeFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/LinkExchangeFragment.java @@ -146,7 +146,7 @@ public class LinkExchangeFragment extends BaseFragment { return null; } linkInputLayout.setError(null); - return linkWithoutSchema; + return link.toString(); } linkInputLayout.setError(getString(R.string.invalid_link)); linkInput.requestFocus(); 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..0b3680c54 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 @@ -14,6 +14,7 @@ import android.widget.Button; import android.widget.ProgressBar; import android.widget.Toast; +import org.briarproject.bramble.api.UnsupportedVersionException; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; @@ -103,15 +104,21 @@ 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()) { + int stringRes; + if (result + .getException() instanceof UnsupportedVersionException) { + stringRes = R.string.unsupported_link; + } else { + stringRes = R.string.adding_contact_error; + } + Toast.makeText(getContext(), stringRes, 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..661d2d722 --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/viewmodel/LiveResult.java @@ -0,0 +1,39 @@ +package org.briarproject.briar.android.viewmodel; + +import android.support.annotation.Nullable; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +@NotNullByDefault +public class LiveResult { + + @Nullable + private T result; + @Nullable + private Exception exception; + + public LiveResult(T result) { + this.result = result; + this.exception = null; + } + + public LiveResult(Exception exception) { + this.result = null; + this.exception = exception; + } + + @Nullable + public T getResultOrNull() { + return result; + } + + @Nullable + public Exception getException() { + return exception; + } + + public boolean hasError() { + return exception != null; + } + +} diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index fdaa0b612..f48a87109 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -202,6 +202,7 @@ Enter your contact\'s link, not your own Please enter a nickname Invalid link + This link comes from a newer version of Briar. Please upgrade to the latest version and try again. You opened your own link. Use the one of the contact you want to add! Please enter a link