From d83513c5f9f84053ac6d449548d9ee04f3a7d3bf Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Fri, 21 Mar 2014 14:30:54 +0000
Subject: [PATCH] Dismiss dialogs when screen is rotated. Bug #52.

---
 .../briarproject/android/BriarActivity.java   |  4 +--
 .../android/contact/SelectContactsDialog.java | 15 +++++-----
 .../groups/ConfigureGroupActivity.java        | 28 +++++------------
 .../android/groups/CreateGroupActivity.java   | 30 ++++++-------------
 .../android/groups/NoContactsDialog.java      | 11 ++++---
 5 files changed, 31 insertions(+), 57 deletions(-)

diff --git a/briar-android/src/org/briarproject/android/BriarActivity.java b/briar-android/src/org/briarproject/android/BriarActivity.java
index a80e276b1f..4579f8d6a2 100644
--- a/briar-android/src/org/briarproject/android/BriarActivity.java
+++ b/briar-android/src/org/briarproject/android/BriarActivity.java
@@ -14,12 +14,12 @@ import org.briarproject.api.android.DatabaseUiExecutor;
 import org.briarproject.api.db.DatabaseConfig;
 import org.briarproject.api.lifecycle.LifecycleManager;
 
-import roboguice.activity.RoboFragmentActivity;
+import roboguice.activity.RoboActivity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.IBinder;
 
-public class BriarActivity extends RoboFragmentActivity {
+public class BriarActivity extends RoboActivity {
 
 	public static final int REQUEST_PASSWORD = 1;
 
diff --git a/briar-android/src/org/briarproject/android/contact/SelectContactsDialog.java b/briar-android/src/org/briarproject/android/contact/SelectContactsDialog.java
index 24ed0a8a64..b26f3219cf 100644
--- a/briar-android/src/org/briarproject/android/contact/SelectContactsDialog.java
+++ b/briar-android/src/org/briarproject/android/contact/SelectContactsDialog.java
@@ -12,12 +12,11 @@ import org.briarproject.api.ContactId;
 
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.content.Context;
 import android.content.DialogInterface;
-import android.os.Bundle;
-import android.support.v4.app.DialogFragment;
+import android.content.DialogInterface.OnMultiChoiceClickListener;
 
-public class SelectContactsDialog extends DialogFragment
-implements DialogInterface.OnMultiChoiceClickListener {
+public class SelectContactsDialog implements OnMultiChoiceClickListener {
 
 	private Listener listener = null;
 	private List<Contact> contacts = null;
@@ -35,10 +34,10 @@ implements DialogInterface.OnMultiChoiceClickListener {
 		this.selected = new HashSet<ContactId>(selected);
 	}
 
-	@Override
-	public Dialog onCreateDialog(Bundle state) {
-		if(listener == null || contacts == null) return null;
-		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+	public Dialog build(Context ctx) {
+		if(listener == null || contacts == null || selected == null)
+			throw new IllegalStateException();
+		AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
 		int size = contacts.size();
 		String[] names = new String[size];
 		boolean[] checked = new boolean[size];
diff --git a/briar-android/src/org/briarproject/android/groups/ConfigureGroupActivity.java b/briar-android/src/org/briarproject/android/groups/ConfigureGroupActivity.java
index c77fac632f..fff9bc5f96 100644
--- a/briar-android/src/org/briarproject/android/groups/ConfigureGroupActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/ConfigureGroupActivity.java
@@ -29,8 +29,6 @@ import org.briarproject.api.messaging.GroupId;
 
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
@@ -52,8 +50,6 @@ SelectContactsDialog.Listener {
 	private RadioButton visibleToAll = null, visibleToSome = null;
 	private Button doneButton = null;
 	private ProgressBar progress = null;
-	private NoContactsDialog noContactsDialog = null;
-	private SelectContactsDialog selectContactsDialog = null;
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject private volatile DatabaseComponent db;
@@ -128,17 +124,6 @@ SelectContactsDialog.Listener {
 		layout.addView(progress);
 
 		setContentView(layout);
-
-		FragmentManager fm = getSupportFragmentManager();
-		Fragment f = fm.findFragmentByTag("NoContactsDialog");
-		if(f == null) noContactsDialog = new NoContactsDialog();
-		else noContactsDialog = (NoContactsDialog) f;
-		noContactsDialog.setListener(this);
-
-		f = fm.findFragmentByTag("SelectContactsDialog");
-		if(f == null) selectContactsDialog = new SelectContactsDialog();
-		else selectContactsDialog = (SelectContactsDialog) f;
-		selectContactsDialog.setListener(this);
 	}
 
 	public void onClick(View view) {
@@ -182,13 +167,16 @@ SelectContactsDialog.Listener {
 	private void displayContacts() {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				FragmentManager fm = getSupportFragmentManager();
 				if(contacts.isEmpty()) {
-					noContactsDialog.show(fm, "NoContactsDialog");
+					NoContactsDialog builder = new NoContactsDialog();
+					builder.setListener(ConfigureGroupActivity.this);
+					builder.build(ConfigureGroupActivity.this).show();
 				} else {
-					selectContactsDialog.setContacts(contacts);
-					selectContactsDialog.setSelected(selected);
-					selectContactsDialog.show(fm, "SelectContactsDialog");
+					SelectContactsDialog builder = new SelectContactsDialog();
+					builder.setListener(ConfigureGroupActivity.this);
+					builder.setContacts(contacts);
+					builder.setSelected(selected);
+					builder.build(ConfigureGroupActivity.this).show();
 				}
 			}
 		});
diff --git a/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java b/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java
index bbe56e351c..c2b6d1d1d5 100644
--- a/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java
@@ -36,8 +36,6 @@ import org.briarproject.util.StringUtils;
 
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -49,8 +47,8 @@ import android.widget.ProgressBar;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
 import android.widget.TextView;
-import android.widget.Toast;
 import android.widget.TextView.OnEditorActionListener;
+import android.widget.Toast;
 
 public class CreateGroupActivity extends BriarActivity
 implements OnEditorActionListener, OnClickListener, NoContactsDialog.Listener,
@@ -64,8 +62,6 @@ SelectContactsDialog.Listener {
 	private RadioButton visibleToAll = null, visibleToSome = null;
 	private Button createButton = null;
 	private ProgressBar progress = null;
-	private NoContactsDialog noContactsDialog = null;
-	private SelectContactsDialog selectContactsDialog = null;
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject private volatile GroupFactory groupFactory;
@@ -131,17 +127,6 @@ SelectContactsDialog.Listener {
 		layout.addView(progress);
 
 		setContentView(layout);
-
-		FragmentManager fm = getSupportFragmentManager();
-		Fragment f = fm.findFragmentByTag("NoContactsDialog");
-		if(f == null) noContactsDialog = new NoContactsDialog();
-		else noContactsDialog = (NoContactsDialog) f;
-		noContactsDialog.setListener(this);
-
-		f = fm.findFragmentByTag("SelectContactsDialog");
-		if(f == null) selectContactsDialog = new SelectContactsDialog();
-		else selectContactsDialog = (SelectContactsDialog) f;
-		selectContactsDialog.setListener(this);
 	}
 
 	private void enableOrDisableCreateButton() {
@@ -204,13 +189,16 @@ SelectContactsDialog.Listener {
 	private void displayContacts() {
 		runOnUiThread(new Runnable() {
 			public void run() {
-				FragmentManager fm = getSupportFragmentManager();
 				if(contacts.isEmpty()) {
-					noContactsDialog.show(fm, "NoContactsDialog");
+					NoContactsDialog builder = new NoContactsDialog();
+					builder.setListener(CreateGroupActivity.this);
+					builder.build(CreateGroupActivity.this).show();
 				} else {
-					selectContactsDialog.setContacts(contacts);
-					selectContactsDialog.setSelected(selected);
-					selectContactsDialog.show(fm, "SelectContactsDialog");
+					SelectContactsDialog builder = new SelectContactsDialog();
+					builder.setListener(CreateGroupActivity.this);
+					builder.setContacts(contacts);
+					builder.setSelected(selected);
+					builder.build(CreateGroupActivity.this).show();
 				}
 			}
 		});
diff --git a/briar-android/src/org/briarproject/android/groups/NoContactsDialog.java b/briar-android/src/org/briarproject/android/groups/NoContactsDialog.java
index e21ba9d062..7da8b7789a 100644
--- a/briar-android/src/org/briarproject/android/groups/NoContactsDialog.java
+++ b/briar-android/src/org/briarproject/android/groups/NoContactsDialog.java
@@ -4,11 +4,10 @@ import org.briarproject.R;
 
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.content.Context;
 import android.content.DialogInterface;
-import android.os.Bundle;
-import android.support.v4.app.DialogFragment;
 
-public class NoContactsDialog extends DialogFragment {
+public class NoContactsDialog {
 
 	private Listener listener = null;
 
@@ -16,9 +15,9 @@ public class NoContactsDialog extends DialogFragment {
 		this.listener = listener;
 	}
 
-	@Override
-	public Dialog onCreateDialog(Bundle state) {
-		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+	public Dialog build(Context ctx) {
+		if(listener == null) throw new IllegalStateException();
+		AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
 		builder.setMessage(R.string.no_contacts_prompt);
 		builder.setPositiveButton(R.string.add_button,
 				new DialogInterface.OnClickListener() {
-- 
GitLab