package com.limelight.utils; import java.util.ArrayList; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.widget.Button; import com.limelight.R; public class Dialog implements Runnable { private final String title; private final String message; private final Activity activity; private final boolean endAfterDismiss; private AlertDialog alert; private static final ArrayList<Dialog> rundownDialogs = new ArrayList<>(); private Dialog(Activity activity, String title, String message, boolean endAfterDismiss) { this.activity = activity; this.title = title; this.message = message; this.endAfterDismiss = endAfterDismiss; } public static void closeDialogs() { synchronized (rundownDialogs) { for (Dialog d : rundownDialogs) { if (d.alert.isShowing()) { d.alert.dismiss(); } } rundownDialogs.clear(); } } public static void displayDialog(Activity activity, String title, String message, boolean endAfterDismiss) { activity.runOnUiThread(new Dialog(activity, title, message, endAfterDismiss)); } @Override public void run() { // If we're dying, don't bother creating a dialog if (activity.isFinishing()) return; alert = new AlertDialog.Builder(activity).create(); alert.setTitle(title); alert.setMessage(message); alert.setCancelable(false); alert.setCanceledOnTouchOutside(false); alert.setButton(AlertDialog.BUTTON_POSITIVE, activity.getResources().getText(android.R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { synchronized (rundownDialogs) { rundownDialogs.remove(Dialog.this); alert.dismiss(); } if (endAfterDismiss) { activity.finish(); } } }); alert.setButton(AlertDialog.BUTTON_NEUTRAL, activity.getResources().getText(R.string.help), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { synchronized (rundownDialogs) { rundownDialogs.remove(Dialog.this); alert.dismiss(); } if (endAfterDismiss) { activity.finish(); } HelpLauncher.launchTroubleshooting(activity); } }); alert.setOnShowListener(new DialogInterface.OnShowListener(){ @Override public void onShow(DialogInterface dialog) { // Set focus to the OK button by default Button button = alert.getButton(AlertDialog.BUTTON_POSITIVE); button.setFocusable(true); button.setFocusableInTouchMode(true); button.requestFocus(); } }); synchronized (rundownDialogs) { rundownDialogs.add(this); alert.show(); } } }