diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index 2c6debaf4..ad0ea3bfc 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -42,9 +42,11 @@
Please check that you are both using the same network
Try again
Connected to contact
+ Calculating confirmation code\u2026
Your confirmation code is
Please enter your contact\'s confirmation code:
Waiting for contact\u2026
+ Exchanging contact details\u2026
Codes do not match
This could mean that someone is trying to interfere with your connection
Contact added
diff --git a/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java b/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java
index 19a218240..14798d625 100644
--- a/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java
+++ b/briar-android/src/net/sf/briar/android/invitation/AddContactActivity.java
@@ -133,7 +133,7 @@ implements InvitationListener {
setView(new WaitForContactView(this));
} else if(localMatched && remoteMatched) {
if(contactName == null)
- setView(new WaitForContactView(this));
+ setView(new ContactDetailsView(this));
else setView(new ContactAddedView(this));
} else {
setView(new CodesDoNotMatchView(this));
@@ -287,7 +287,8 @@ implements InvitationListener {
localCompared = true;
if(code == remoteConfirmationCode) {
localMatched = true;
- setView(new WaitForContactView(this));
+ if(remoteMatched) setView(new ContactDetailsView(this));
+ else setView(new WaitForContactView(this));
task.localConfirmationSucceeded();
} else {
setView(new CodesDoNotMatchView(this));
@@ -342,6 +343,8 @@ implements InvitationListener {
public void run() {
remoteCompared = true;
remoteMatched = true;
+ if(localMatched)
+ setView(new ContactDetailsView(AddContactActivity.this));
}
});
}
diff --git a/briar-android/src/net/sf/briar/android/invitation/ConnectedView.java b/briar-android/src/net/sf/briar/android/invitation/ConnectedView.java
index 17c56ee8d..2eead7a0c 100644
--- a/briar-android/src/net/sf/briar/android/invitation/ConnectedView.java
+++ b/briar-android/src/net/sf/briar/android/invitation/ConnectedView.java
@@ -5,6 +5,7 @@ import net.sf.briar.R;
import android.content.Context;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.ProgressBar;
import android.widget.TextView;
class ConnectedView extends AddContactView {
@@ -30,5 +31,19 @@ class ConnectedView extends AddContactView {
connected.setText(R.string.connected_to_contact);
innerLayout.addView(connected);
addView(innerLayout);
+
+ innerLayout = new LinearLayout(ctx);
+ innerLayout.setOrientation(HORIZONTAL);
+ innerLayout.setGravity(CENTER);
+
+ ProgressBar progress = new ProgressBar(ctx);
+ progress.setIndeterminate(true);
+ progress.setPadding(10, 10, 10, 10);
+ innerLayout.addView(progress);
+
+ TextView connecting = new TextView(ctx);
+ connecting.setText(R.string.calculating_confirmation_code);
+ innerLayout.addView(connecting);
+ addView(innerLayout);
}
}
diff --git a/briar-android/src/net/sf/briar/android/invitation/ContactDetailsView.java b/briar-android/src/net/sf/briar/android/invitation/ContactDetailsView.java
new file mode 100644
index 000000000..b3743ba44
--- /dev/null
+++ b/briar-android/src/net/sf/briar/android/invitation/ContactDetailsView.java
@@ -0,0 +1,65 @@
+package net.sf.briar.android.invitation;
+
+import static android.view.Gravity.CENTER;
+import static android.view.Gravity.CENTER_HORIZONTAL;
+import net.sf.briar.R;
+import android.content.Context;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+class ContactDetailsView extends AddContactView {
+
+ ContactDetailsView(Context ctx) {
+ super(ctx);
+ }
+
+ void populate() {
+ removeAllViews();
+ Context ctx = getContext();
+ LinearLayout innerLayout = new LinearLayout(ctx);
+ innerLayout.setOrientation(HORIZONTAL);
+ innerLayout.setGravity(CENTER);
+
+ ImageView icon = new ImageView(ctx);
+ icon.setImageResource(R.drawable.navigation_accept);
+ innerLayout.addView(icon);
+
+ TextView connected = new TextView(ctx);
+ connected.setTextSize(22);
+ connected.setPadding(10, 10, 10, 10);
+ connected.setText(R.string.connected_to_contact);
+ innerLayout.addView(connected);
+ addView(innerLayout);
+
+ TextView yourCode = new TextView(ctx);
+ yourCode.setGravity(CENTER_HORIZONTAL);
+ yourCode.setTextSize(14);
+ yourCode.setPadding(10, 0, 10, 10);
+ yourCode.setText(R.string.your_confirmation_code);
+ addView(yourCode);
+
+ TextView code = new TextView(ctx);
+ code.setGravity(CENTER_HORIZONTAL);
+ code.setTextSize(50);
+ code.setPadding(10, 0, 10, 10);
+ int localCode = container.getLocalConfirmationCode();
+ code.setText(String.format("%06d", localCode));
+ addView(code);
+
+ innerLayout = new LinearLayout(ctx);
+ innerLayout.setOrientation(HORIZONTAL);
+ innerLayout.setGravity(CENTER);
+
+ ProgressBar progress = new ProgressBar(ctx);
+ progress.setIndeterminate(true);
+ progress.setPadding(10, 10, 10, 10);
+ innerLayout.addView(progress);
+
+ TextView connecting = new TextView(ctx);
+ connecting.setText(R.string.exchanging_contact_details);
+ innerLayout.addView(connecting);
+ addView(innerLayout);
+ }
+}