diff --git a/src/com/limelight/utils/Dialog.java b/src/com/limelight/utils/Dialog.java index c4bb6e6b..d95dcfb3 100644 --- a/src/com/limelight/utils/Dialog.java +++ b/src/com/limelight/utils/Dialog.java @@ -11,7 +11,7 @@ public class Dialog implements Runnable { private Activity activity; private boolean endAfterDismiss; - AlertDialog alert; + private AlertDialog alert; private static ArrayList rundownDialogs = new ArrayList(); @@ -25,13 +25,15 @@ public class Dialog implements Runnable { public static void closeDialogs() { - for (Dialog d : rundownDialogs) { - if (d.alert.isShowing()) { - d.alert.dismiss(); + synchronized (rundownDialogs) { + for (Dialog d : rundownDialogs) { + if (d.alert.isShowing()) { + d.alert.dismiss(); + } } + + rundownDialogs.clear(); } - - 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(); - rundownDialogs.remove(this); + synchronized (rundownDialogs) { + rundownDialogs.remove(this); + alert.dismiss(); + } - if (endAfterDismiss) + if (endAfterDismiss) { activity.finish(); + } } - }); + }); - rundownDialogs.add(this); - alert.show(); + synchronized (rundownDialogs) { + rundownDialogs.add(this); + alert.show(); + } } } diff --git a/src/com/limelight/utils/SpinnerDialog.java b/src/com/limelight/utils/SpinnerDialog.java index a5ec6991..29a35bb2 100644 --- a/src/com/limelight/utils/SpinnerDialog.java +++ b/src/com/limelight/utils/SpinnerDialog.java @@ -33,13 +33,15 @@ public class SpinnerDialog implements Runnable,OnCancelListener { public static void closeDialogs() { - for (SpinnerDialog d : rundownDialogs) { - if (d.progress.isShowing()) { - d.progress.dismiss(); + synchronized (rundownDialogs) { + for (SpinnerDialog d : rundownDialogs) { + if (d.progress.isShowing()) { + d.progress.dismiss(); + } } + + rundownDialogs.clear(); } - - rundownDialogs.clear(); } public void dismiss() @@ -85,18 +87,27 @@ public class SpinnerDialog implements Runnable,OnCancelListener { progress.setCancelable(false); } - progress.show(); + synchronized (rundownDialogs) { + rundownDialogs.add(this); + progress.show(); + } } else { - if (progress.isShowing()) { - progress.dismiss(); + 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(); }