package com.foxykeep.datadroidpoc.dialogs; import com.foxykeep.datadroidpoc.R; import android.app.Dialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; 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 ProgressDialogFragment extends DialogFragment { private static final String FRAGMENT_TAG = "com.foxykeep.datadroidpoc.dialogs.progressDialog"; private static final String BUNDLE_MESSAGE = "message"; private static final String BUNDLE_IS_CANCELABLE = "isCancelable"; private OnCancelListener mOnCancelListener; private static ProgressDialogFragment newInstance(String message, OnCancelListener onCancelListener, boolean isCancelable) { ProgressDialogFragment dialogFragment = new ProgressDialogFragment(); dialogFragment.mOnCancelListener = onCancelListener; Bundle args = new Bundle(); args.putString(BUNDLE_MESSAGE, message); args.putBoolean(BUNDLE_IS_CANCELABLE, isCancelable); dialogFragment.setArguments(args); return dialogFragment; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Bundle args = getArguments(); ProgressDialog dialog = new ProgressDialog(getActivity()); dialog.setTitle(R.string.progress_dialog_title); dialog.setMessage(args.getString(BUNDLE_MESSAGE)); dialog.setIndeterminate(true); setCancelable(args.getBoolean(BUNDLE_IS_CANCELABLE)); return dialog; } @Override public void onCancel(DialogInterface dialog) { super.onCancel(dialog); if (mOnCancelListener != null) { mOnCancelListener.onCancel(dialog); } } public static class ProgressDialogFragmentBuilder { private FragmentActivity mActivity; private String mMessage = null; private OnCancelListener mOnCancelListener = null; private boolean mCancelable = true; public ProgressDialogFragmentBuilder(FragmentActivity activity) { mActivity = activity; } public ProgressDialogFragmentBuilder setMessage(int resId) { mMessage = mActivity.getString(resId); return this; } public ProgressDialogFragmentBuilder setMessage(String text) { mMessage = text; return this; } public ProgressDialogFragmentBuilder setOnCancelListener( OnCancelListener onCancelListener) { mOnCancelListener = onCancelListener; return this; } public ProgressDialogFragmentBuilder setCancelable(boolean cancelable) { mCancelable = cancelable; 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); ProgressDialogFragment.newInstance(mMessage, mOnCancelListener, mCancelable) .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(); } }