Fix dialog rundown issues causing spurious crashes

This commit is contained in:
Cameron Gutman 2014-07-15 20:46:12 -07:00
parent e2663f06ba
commit d428f342f7
2 changed files with 38 additions and 20 deletions

View File

@ -11,7 +11,7 @@ public class Dialog implements Runnable {
private Activity activity;
private boolean endAfterDismiss;
AlertDialog alert;
private AlertDialog alert;
private static ArrayList<Dialog> rundownDialogs = new ArrayList<Dialog>();
@ -25,6 +25,7 @@ public class Dialog implements Runnable {
public static void closeDialogs()
{
synchronized (rundownDialogs) {
for (Dialog d : rundownDialogs) {
if (d.alert.isShowing()) {
d.alert.dismiss();
@ -33,6 +34,7 @@ public class Dialog implements Runnable {
rundownDialogs.clear();
}
}
public static void displayDialog(Activity activity, String title, String message, boolean endAfterDismiss)
{
@ -54,16 +56,21 @@ public class Dialog implements Runnable {
alert.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
alert.dismiss();
synchronized (rundownDialogs) {
rundownDialogs.remove(this);
alert.dismiss();
}
if (endAfterDismiss)
if (endAfterDismiss) {
activity.finish();
}
}
});
synchronized (rundownDialogs) {
rundownDialogs.add(this);
alert.show();
}
}
}

View File

@ -33,6 +33,7 @@ public class SpinnerDialog implements Runnable,OnCancelListener {
public static void closeDialogs()
{
synchronized (rundownDialogs) {
for (SpinnerDialog d : rundownDialogs) {
if (d.progress.isShowing()) {
d.progress.dismiss();
@ -41,6 +42,7 @@ public class SpinnerDialog implements Runnable,OnCancelListener {
rundownDialogs.clear();
}
}
public void dismiss()
{
@ -85,18 +87,27 @@ public class SpinnerDialog implements Runnable,OnCancelListener {
progress.setCancelable(false);
}
synchronized (rundownDialogs) {
rundownDialogs.add(this);
progress.show();
}
}
else
{
if (progress.isShowing()) {
synchronized (rundownDialogs) {
if (rundownDialogs.remove(this) && progress.isShowing()) {
progress.dismiss();
}
}
}
}
@Override
public void onCancel(DialogInterface dialog) {
synchronized (rundownDialogs) {
rundownDialogs.remove(this);
}
// This will only be called if finish was true, so we don't need to check again
activity.finish();
}