Fixed crash when rotating screen with dialog visible.

Fixes issue #3612299.
This commit is contained in:
akwizgran
2013-05-15 13:45:48 +01:00
parent 147d044dcf
commit 07ab659c6b
5 changed files with 87 additions and 39 deletions

View File

@@ -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");
}
}
});

View File

@@ -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");
}
}
});

View File

@@ -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");
}
}
});

View File

@@ -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");
}
}
});

View File

@@ -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));
}