package net.bible.android.view.activity.base; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.util.Log; import android.widget.Toast; import net.bible.android.BibleApplication; import net.bible.android.activity.R; import net.bible.android.control.report.ErrorReportControl; import net.bible.android.view.util.Hourglass; /** * Class to manage the display of various dialogs * * @author Martin Denham [mjdenham at gmail dot com] * @see gnu.lgpl.License for license details.<br> * The copyright to this program is held by it's author. */ public class Dialogs { private ErrorReportControl errorReportControl; private Hourglass hourglass = new Hourglass(); private Callback doNothingCallback = new Callback() { @Override public void okay() { // by default do nothing when user clicks okay } }; private static final String TAG = "Dialogs"; private static final Dialogs singleton = new Dialogs(); public static Dialogs getInstance() { return singleton; } private Dialogs() { super(); errorReportControl = BibleApplication.getApplication().getApplicationComponent().errorReportControl(); } public void showMsg(int msgId, String param) { showErrorMsg(BibleApplication.getApplication().getString(msgId, param)); } public void showMsg(int msgId, boolean isCancelable, final Callback okayCallback) { showMsg(BibleApplication.getApplication().getString(msgId), isCancelable, okayCallback, null); } public void showMsg(int msgId) { showErrorMsg(BibleApplication.getApplication().getString(msgId)); } public void showErrorMsg(int msgId) { showErrorMsg(BibleApplication.getApplication().getString(msgId)); } public void showErrorMsg(int msgId, String param) { showErrorMsg(BibleApplication.getApplication().getString(msgId, param)); } public void showErrorMsg(String msg) { showErrorMsg(msg, doNothingCallback); } public void showErrorMsg(int msgId, final Callback okayCallback) { showErrorMsg(BibleApplication.getApplication().getString(msgId), okayCallback); } /** * Show error message and allow reporting of exception via e-mail to and-bible */ public void showErrorMsg(int msgId, final Exception e) { showErrorMsg(BibleApplication.getApplication().getString(msgId), e); } /** * Show error message and allow reporting of exception via e-mail to and-bible */ public void showErrorMsg(String message, final Exception e) { Callback reportCallback = new Callback() { @Override public void okay() { errorReportControl.sendErrorReportEmail(e); } }; showMsg(message, false, doNothingCallback, reportCallback); } public void showErrorMsg(final String msg, final Callback okayCallback) { showMsg(msg, false, okayCallback, null); } private void showMsg(final String msg, final boolean isCancelable, final Callback okayCallback, final Callback reportCallback) { Log.d(TAG, "showErrorMesage message:"+msg); try { final Activity activity = CurrentActivityHolder.getInstance().getCurrentActivity(); if (activity!=null) { activity.runOnUiThread(new Runnable() { @Override public void run() { AlertDialog.Builder dlgBuilder = new AlertDialog.Builder(activity) .setMessage(msg) .setCancelable(isCancelable) .setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int buttonId) { okayCallback.okay(); } }); // if cancelable then show a Cancel button if (isCancelable) { dlgBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int buttonId) { // do nothing } }); } // enable report to andbible errors email list if (reportCallback!=null) { dlgBuilder.setNeutralButton(R.string.report_error, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int buttonId) { reportCallback.okay(); } }); } dlgBuilder.show(); } }); } else { Toast.makeText(BibleApplication.getApplication().getApplicationContext(), msg, Toast.LENGTH_LONG).show(); } } catch (Exception e) { Log.e(TAG, "Error showing error message. Original error msg:"+msg, e); } } public void showHourglass() { hourglass.show(); } public void dismissHourglass() { hourglass.dismiss(); } }