From 07ab659c6b574fc2c408bbc3c354c098257975f1 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Wed, 15 May 2013 13:45:48 +0100 Subject: [PATCH] Fixed crash when rotating screen with dialog visible. Fixes issue #3612299. --- .../android/blogs/ConfigureBlogActivity.java | 28 +++++++++++++------ .../android/blogs/CreateBlogActivity.java | 28 +++++++++++++------ .../groups/ConfigureGroupActivity.java | 28 +++++++++++++------ .../android/groups/CreateGroupActivity.java | 28 +++++++++++++------ .../messages/ConversationListActivity.java | 14 ++++++++-- 5 files changed, 87 insertions(+), 39 deletions(-) diff --git a/briar-android/src/net/sf/briar/android/blogs/ConfigureBlogActivity.java b/briar-android/src/net/sf/briar/android/blogs/ConfigureBlogActivity.java index 1fe42adc6b..c34dc6e6ac 100644 --- a/briar-android/src/net/sf/briar/android/blogs/ConfigureBlogActivity.java +++ b/briar-android/src/net/sf/briar/android/blogs/ConfigureBlogActivity.java @@ -29,6 +29,8 @@ import net.sf.briar.api.messaging.GroupId; import roboguice.activity.RoboFragmentActivity; 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; @@ -53,6 +55,8 @@ 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; @@ -124,6 +128,17 @@ 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) { @@ -173,17 +188,12 @@ SelectContactsDialog.Listener { private void displayContacts(final Collection<Contact> contacts) { runOnUiThread(new Runnable() { public void run() { + FragmentManager fm = getSupportFragmentManager(); if(contacts.isEmpty()) { - NoContactsDialog dialog = new NoContactsDialog(); - dialog.setListener(ConfigureBlogActivity.this); - dialog.show(getSupportFragmentManager(), - "NoContactsDialog"); + noContactsDialog.show(fm, "NoContactsDialog"); } else { - SelectContactsDialog dialog = new SelectContactsDialog(); - dialog.setListener(ConfigureBlogActivity.this); - dialog.setContacts(contacts); - dialog.show(getSupportFragmentManager(), - "SelectContactsDialog"); + selectContactsDialog.setContacts(contacts); + selectContactsDialog.show(fm, "SelectContactsDialog"); } } }); diff --git a/briar-android/src/net/sf/briar/android/blogs/CreateBlogActivity.java b/briar-android/src/net/sf/briar/android/blogs/CreateBlogActivity.java index f699007d28..00a4519dfe 100644 --- a/briar-android/src/net/sf/briar/android/blogs/CreateBlogActivity.java +++ b/briar-android/src/net/sf/briar/android/blogs/CreateBlogActivity.java @@ -37,6 +37,8 @@ import net.sf.briar.api.messaging.LocalGroup; import roboguice.activity.RoboFragmentActivity; 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; @@ -65,6 +67,8 @@ 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 CryptoComponent crypto; @@ -132,6 +136,17 @@ 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() { @@ -206,17 +221,12 @@ SelectContactsDialog.Listener { private void displayContacts(final Collection<Contact> contacts) { runOnUiThread(new Runnable() { public void run() { + FragmentManager fm = getSupportFragmentManager(); if(contacts.isEmpty()) { - NoContactsDialog dialog = new NoContactsDialog(); - dialog.setListener(CreateBlogActivity.this); - dialog.show(getSupportFragmentManager(), - "NoContactsDialog"); + noContactsDialog.show(fm, "NoContactsDialog"); } else { - SelectContactsDialog dialog = new SelectContactsDialog(); - dialog.setListener(CreateBlogActivity.this); - dialog.setContacts(contacts); - dialog.show(getSupportFragmentManager(), - "SelectContactsDialog"); + selectContactsDialog.setContacts(contacts); + selectContactsDialog.show(fm, "SelectContactsDialog"); } } }); diff --git a/briar-android/src/net/sf/briar/android/groups/ConfigureGroupActivity.java b/briar-android/src/net/sf/briar/android/groups/ConfigureGroupActivity.java index f0f0f9fdc2..139f93e801 100644 --- a/briar-android/src/net/sf/briar/android/groups/ConfigureGroupActivity.java +++ b/briar-android/src/net/sf/briar/android/groups/ConfigureGroupActivity.java @@ -29,6 +29,8 @@ import net.sf.briar.api.messaging.GroupId; import roboguice.activity.RoboFragmentActivity; 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; @@ -53,6 +55,8 @@ 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; @@ -122,6 +126,17 @@ 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) { @@ -171,17 +186,12 @@ SelectContactsDialog.Listener { private void displayContacts(final Collection<Contact> contacts) { runOnUiThread(new Runnable() { public void run() { + FragmentManager fm = getSupportFragmentManager(); if(contacts.isEmpty()) { - NoContactsDialog dialog = new NoContactsDialog(); - dialog.setListener(ConfigureGroupActivity.this); - dialog.show(getSupportFragmentManager(), - "NoContactsDialog"); + noContactsDialog.show(fm, "NoContactsDialog"); } else { - SelectContactsDialog dialog = new SelectContactsDialog(); - dialog.setListener(ConfigureGroupActivity.this); - dialog.setContacts(contacts); - dialog.show(getSupportFragmentManager(), - "SelectContactsDialog"); + selectContactsDialog.setContacts(contacts); + selectContactsDialog.show(fm, "SelectContactsDialog"); } } }); diff --git a/briar-android/src/net/sf/briar/android/groups/CreateGroupActivity.java b/briar-android/src/net/sf/briar/android/groups/CreateGroupActivity.java index 7ebd8b5933..0670d7f830 100644 --- a/briar-android/src/net/sf/briar/android/groups/CreateGroupActivity.java +++ b/briar-android/src/net/sf/briar/android/groups/CreateGroupActivity.java @@ -34,6 +34,8 @@ import net.sf.briar.api.messaging.GroupFactory; import roboguice.activity.RoboFragmentActivity; 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; @@ -61,6 +63,8 @@ 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; @@ -126,6 +130,17 @@ 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() { @@ -215,17 +230,12 @@ SelectContactsDialog.Listener { private void displayContacts(final Collection<Contact> contacts) { runOnUiThread(new Runnable() { public void run() { + FragmentManager fm = getSupportFragmentManager(); if(contacts.isEmpty()) { - NoContactsDialog dialog = new NoContactsDialog(); - dialog.setListener(CreateGroupActivity.this); - dialog.show(getSupportFragmentManager(), - "NoContactsDialog"); + noContactsDialog.show(fm, "NoContactsDialog"); } else { - SelectContactsDialog dialog = new SelectContactsDialog(); - dialog.setListener(CreateGroupActivity.this); - dialog.setContacts(contacts); - dialog.show(getSupportFragmentManager(), - "SelectContactsDialog"); + selectContactsDialog.setContacts(contacts); + selectContactsDialog.show(fm, "SelectContactsDialog"); } } }); diff --git a/briar-android/src/net/sf/briar/android/messages/ConversationListActivity.java b/briar-android/src/net/sf/briar/android/messages/ConversationListActivity.java index d42e30ac46..8c4fe121a5 100644 --- a/briar-android/src/net/sf/briar/android/messages/ConversationListActivity.java +++ b/briar-android/src/net/sf/briar/android/messages/ConversationListActivity.java @@ -34,6 +34,8 @@ import net.sf.briar.api.lifecycle.LifecycleManager; import roboguice.activity.RoboFragmentActivity; 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.ImageButton; @@ -51,6 +53,7 @@ implements OnClickListener, DatabaseListener, NoContactsDialog.Listener { private ConversationListAdapter adapter = null; private ListView list = null; private ListLoadingProgressBar loading = null; + private NoContactsDialog noContactsDialog = null; // Fields that are accessed from background threads must be volatile @Inject private volatile DatabaseComponent db; @@ -87,6 +90,12 @@ implements OnClickListener, DatabaseListener, NoContactsDialog.Listener { layout.addView(composeButton); setContentView(layout); + + FragmentManager fm = getSupportFragmentManager(); + Fragment f = fm.findFragmentByTag("NoContactsDialog"); + if(f == null) noContactsDialog = new NoContactsDialog(); + else noContactsDialog = (NoContactsDialog) f; + noContactsDialog.setListener(this); } @Override @@ -186,9 +195,8 @@ implements OnClickListener, DatabaseListener, NoContactsDialog.Listener { public void onClick(View view) { if(adapter.isEmpty()) { - NoContactsDialog dialog = new NoContactsDialog(); - dialog.setListener(this); - dialog.show(getSupportFragmentManager(), "NoContactsDialog"); + FragmentManager fm = getSupportFragmentManager(); + noContactsDialog.show(fm, "NoContactsDialog"); } else { startActivity(new Intent(this, WritePrivateMessageActivity.class)); } -- GitLab