package com.foxykeep.datadroidpoc.dialogs; import android.app.AlertDialog.Builder; import android.app.Dialog; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; public final class QuestionDialogFragment extends DialogFragment { private static final String FRAGMENT_TAG = "com.foxykeep.datadroidpoc.dialogs.questionDialog"; private static final String BUNDLE_TITLE = "title"; private static final String BUNDLE_MESSAGE = "message"; private static final String BUNDLE_POSITIVE_BUTTON_TEXT = "positiveButtonText"; private static final String BUNDLE_NEGATIVE_BUTTON_TEXT = "negativeButtonText"; private OnClickListener mPositiveOnClickListener; private OnClickListener mNegativeOnClickListener; private static QuestionDialogFragment newInstance(String title, String message, String positiveButtonText, OnClickListener positiveOnClickListener, String negativeButtonText, OnClickListener negativeOnClickListener) { QuestionDialogFragment dialogFragment = new QuestionDialogFragment(); Bundle args = new Bundle(); args.putString(BUNDLE_TITLE, title); args.putString(BUNDLE_MESSAGE, message); args.putString(BUNDLE_POSITIVE_BUTTON_TEXT, positiveButtonText); args.putString(BUNDLE_NEGATIVE_BUTTON_TEXT, negativeButtonText); dialogFragment.setArguments(args); dialogFragment.mPositiveOnClickListener = positiveOnClickListener; dialogFragment.mNegativeOnClickListener = negativeOnClickListener; return dialogFragment; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Bundle args = getArguments(); Builder b = new Builder(getActivity()); b.setTitle(args.getString(BUNDLE_TITLE)); b.setMessage(args.getString(BUNDLE_MESSAGE)); b.setIcon(android.R.drawable.ic_dialog_alert); setCancelable(true); b.setPositiveButton(args.getString(BUNDLE_POSITIVE_BUTTON_TEXT), mPositiveOnClickListener); b.setNegativeButton(args.getString(BUNDLE_NEGATIVE_BUTTON_TEXT), mNegativeOnClickListener); return b.create(); } public static class QuestionDialogFragmentBuilder { private FragmentActivity mActivity; private String mTitle; private String mMessage; private String mPositiveButtonText; private OnClickListener mPositiveButtonOnClickListener; private String mNegativeButtonText; private OnClickListener mNegativeButtonOnClickListener; public QuestionDialogFragmentBuilder(FragmentActivity activity) { mActivity = activity; mPositiveButtonText = activity.getString(android.R.string.yes); mNegativeButtonText = activity.getString(android.R.string.no); } public QuestionDialogFragmentBuilder setTitle(int resId) { mTitle = mActivity.getString(resId); return this; } public QuestionDialogFragmentBuilder setTitle(String text) { mTitle = text; return this; } public QuestionDialogFragmentBuilder setMessage(int resId) { mMessage = mActivity.getString(resId); return this; } public QuestionDialogFragmentBuilder setMessage(String text) { mMessage = text; return this; } public QuestionDialogFragmentBuilder setPositiveButton(int resId, OnClickListener onClickListener) { return setPositiveButton(mActivity.getString(resId), onClickListener); } public QuestionDialogFragmentBuilder setPositiveButton(String text, OnClickListener onClickListener) { mPositiveButtonText = text; mPositiveButtonOnClickListener = onClickListener; return this; } public QuestionDialogFragmentBuilder setNegativeButton(int resId, OnClickListener onClickListener) { return setNegativeButton(mActivity.getString(resId), onClickListener); } public QuestionDialogFragmentBuilder setNegativeButton(String text, OnClickListener onClickListener) { mNegativeButtonText = text; mNegativeButtonOnClickListener = onClickListener; return this; } public void show() { FragmentManager fragmentManager = mActivity.getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment prev = fragmentManager.findFragmentByTag(FRAGMENT_TAG); if (prev != null) { fragmentTransaction.remove(prev); } fragmentTransaction.addToBackStack(null); QuestionDialogFragment.newInstance(mTitle, mMessage, mPositiveButtonText, mPositiveButtonOnClickListener, mNegativeButtonText, mNegativeButtonOnClickListener).show(fragmentManager, FRAGMENT_TAG); } } public static void dismiss(FragmentActivity activity) { FragmentManager fragmentManager = activity.getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment prev = fragmentManager.findFragmentByTag(FRAGMENT_TAG); if (prev != null) { fragmentTransaction.remove(prev); } fragmentTransaction.commit(); } }