From 85b02eccc7b849f845c47a4161df2b3f0152878a Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Thu, 30 Jan 2014 11:06:26 +0000
Subject: [PATCH] Select newly created identity on return from
 CreateIdentityActivity.

This partially fixes dev task #40. CreateIdentityActivity is also called
from AddContactActivity, but that's likely to change soon so I'm not
going to fix it now.
---
 .../groups/WriteGroupPostActivity.java        | 14 +++++++--
 .../identity/CreateIdentityActivity.java      | 30 ++++++++++++-------
 2 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java b/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
index bedc77951a..9c9e020bdf 100644
--- a/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
@@ -92,7 +92,6 @@ implements OnItemSelectedListener, OnClickListener {
 		byte[] b = i.getByteArrayExtra("briar.GROUP_ID");
 		if(b == null) throw new IllegalStateException();
 		groupId = new GroupId(b);
-
 		b = i.getByteArrayExtra("briar.PARENT_ID");
 		if(b != null) parentId = new MessageId(b);
 		timestamp = i.getLongExtra("briar.TIMESTAMP", -1);
@@ -218,6 +217,16 @@ implements OnItemSelectedListener, OnClickListener {
 		}
 	}
 
+	@Override
+	protected void onActivityResult(int request, int result, Intent data) {
+		// This is the result of CreateIdentityActivity
+		if(result == RESULT_CANCELED) return;
+		byte[] b = data.getByteArrayExtra("briar.LOCAL_AUTHOR_ID");
+		if(b == null) throw new IllegalStateException();
+		localAuthorId = new AuthorId(b);
+		loadAuthorsAndGroup();
+	}
+
 	public void onItemSelected(AdapterView<?> parent, View view, int position,
 			long id) {
 		LocalAuthorItem item = adapter.getItem(position);
@@ -227,7 +236,8 @@ implements OnItemSelectedListener, OnClickListener {
 		} else if(item == LocalAuthorItem.NEW) {
 			localAuthor = null;
 			localAuthorId = null;
-			startActivity(new Intent(this, CreateIdentityActivity.class));
+			Intent i = new Intent(this, CreateIdentityActivity.class);
+			startActivityForResult(i, 0);
 		} else {
 			localAuthor = item.getLocalAuthor();
 			localAuthorId = localAuthor.getId();
diff --git a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
index 2ae410790d..e48cf91355 100644
--- a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
+++ b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
@@ -31,6 +31,7 @@ import org.briarproject.api.db.DbException;
 import org.briarproject.api.lifecycle.LifecycleManager;
 
 import roboguice.activity.RoboActivity;
+import android.content.Intent;
 import android.os.Bundle;
 import android.view.KeyEvent;
 import android.view.View;
@@ -133,6 +134,14 @@ implements OnEditorActionListener, OnClickListener {
 		});
 	}
 
+	private boolean validateNickname() {
+		if(nicknameEntry.getText().toString().equals("")) return false;
+		// Hide the soft keyboard
+		Object o = getSystemService(INPUT_METHOD_SERVICE);
+		((InputMethodManager) o).toggleSoftInput(HIDE_IMPLICIT_ONLY, 0);
+		return true;
+	}
+
 	private void storeLocalAuthor(final LocalAuthor a) {
 		dbUiExecutor.execute(new Runnable() {
 			public void run() {
@@ -151,20 +160,19 @@ implements OnEditorActionListener, OnClickListener {
 						LOG.info("Interrupted while waiting for database");
 					Thread.currentThread().interrupt();
 				}
-				runOnUiThread(new Runnable() {
-					public void run() {
-						finish();
-					}
-				});
+				setResultAndFinish(a);
 			}
 		});
 	}
 
-	private boolean validateNickname() {
-		if(nicknameEntry.getText().toString().equals("")) return false;
-		// Hide the soft keyboard
-		Object o = getSystemService(INPUT_METHOD_SERVICE);
-		((InputMethodManager) o).toggleSoftInput(HIDE_IMPLICIT_ONLY, 0);
-		return true;
+	private void setResultAndFinish(final LocalAuthor a) {
+		runOnUiThread(new Runnable() {
+			public void run() {
+				Intent i = new Intent();
+				i.putExtra("briar.LOCAL_AUTHOR_ID", a.getId().getBytes());
+				setResult(RESULT_OK, i);
+				finish();
+			}
+		});
 	}
 }
-- 
GitLab