package org.droidplanner.android.dialogs; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; /** * Created by fredia on 3/10/16. */ public class OkDialog extends DialogFragment { private final static boolean DEFAULT_DISMISS_DIALOG_WITHOUT_CLICKING = true; protected final static String EXTRA_TITLE = "title"; protected final static String EXTRA_MESSAGE = "message"; protected final static String EXTRA_BUTTON_LABEL = "button_label"; protected final static String EXTRA_DISMISS_DIALOG_WITHOUT_CLICKING = "dismiss_dialog_without_clicking"; protected final static String EXTRA_SHOW_CANCEL = "show_cancel"; public interface Listener { void onOk(); void onCancel(); void onDismiss(); } public static OkDialog newInstance(Context context, String title, String msg) { return newInstance(context, title, msg, null); } public static OkDialog newInstance(Context context, String title, String msg, Listener listener) { return newInstance(context, title, msg, listener, false); } public static OkDialog newInstance(Context context, String title, String msg, Listener listener, boolean showCancel) { return newInstance(title, msg, DEFAULT_DISMISS_DIALOG_WITHOUT_CLICKING, context.getString(android.R.string.ok), listener, showCancel); } public static OkDialog newInstance(String title, String msg, String buttonLabel) { return newInstance(title, msg, DEFAULT_DISMISS_DIALOG_WITHOUT_CLICKING, buttonLabel, null, false); } public static OkDialog newInstance(String title, String msg, boolean dismissDialogWithoutClicking, String buttonLabel) { return newInstance(title, msg, dismissDialogWithoutClicking, buttonLabel, null, false); } public static OkDialog newInstance(String title, String msg, boolean dismissDialogWithoutClicking, String buttonLabel, Listener listener, boolean showCancel) { OkDialog fragment = new OkDialog(); Bundle b = new Bundle(); b.putString(EXTRA_TITLE, title); b.putString(EXTRA_MESSAGE, msg); b.putString(EXTRA_BUTTON_LABEL, buttonLabel); b.putBoolean(EXTRA_DISMISS_DIALOG_WITHOUT_CLICKING, dismissDialogWithoutClicking); b.putBoolean(EXTRA_SHOW_CANCEL, showCancel); fragment.setArguments(b); fragment.listener = listener; return fragment; } private boolean dismissDialogWithoutClicking; private Listener listener; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Bundle args = getArguments(); final String title = args.getString(EXTRA_TITLE, ""); final String message = args.getString(EXTRA_MESSAGE, ""); final String buttonLabel = args.getString(EXTRA_BUTTON_LABEL, getString(android.R.string.ok)); dismissDialogWithoutClicking = args.getBoolean(EXTRA_DISMISS_DIALOG_WITHOUT_CLICKING, DEFAULT_DISMISS_DIALOG_WITHOUT_CLICKING); boolean showCancel = args.getBoolean(EXTRA_SHOW_CANCEL); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setTitle(title) .setMessage(message) ; if (showCancel) { builder .setPositiveButton(buttonLabel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { if (listener != null) { listener.onOk(); } dismiss(); } } ) .setNegativeButton(getString(android.R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if(listener != null){ listener.onCancel(); } dismiss(); } }); } else { builder.setNeutralButton(buttonLabel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { if (listener != null) { listener.onOk(); } dismiss(); } } ); } return builder.create(); } @Override public void onStart() { super.onStart(); Dialog dialog = getDialog(); if(dialog != null) { dialog.setCanceledOnTouchOutside(dismissDialogWithoutClicking); dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { if (listener != null) { listener.onCancel(); } } }); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { if (listener != null) { listener.onDismiss(); } } }); } } @Override public void onStop() { super.onStop(); Dialog dialog = getDialog(); if(dialog != null) { dialog.setOnDismissListener(null); } dismissAllowingStateLoss(); } public void removeListener() { listener = null; } }