package it.demo.twitterlike.android.ui.fragments; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; public class CallbackDialogFragment extends DialogFragment { public static String CODE_ARGUMENT = "code"; public static String TITLE_ARGUMENT = "title"; public static String TITLE_TEXT_ARGUMENT = "titleText"; public static String MESSAGE_ARGUMENT = "message"; public static String MESSAGE_TEXT_ARGUMENT = "messageText"; public static String POSITIVEBUTTON_ARGUMENT = "positiveButton"; public static String NEGATIVEBUTTON_ARGUMENT = "negativeButton"; public static String NEUTRALBUTTON_ARGUMENT = "neutralButton"; public static String ARGUMENTS_ARGUMENT = "arguments"; private int code; private Integer title; private String titleText; private Integer message; private String messageText; private Integer positiveButton; private Integer negativeButton; private Integer neutralButton; private Object[] arguments; private YesNoListener listener; public CallbackDialogFragment() { } @Override public void setArguments(Bundle bundle) { this.code = bundle.getInt(CODE_ARGUMENT); this.title = (Integer) bundle.getSerializable(TITLE_ARGUMENT); this.titleText = (String) bundle.getSerializable(TITLE_TEXT_ARGUMENT); this.title = (Integer) bundle.getSerializable(TITLE_ARGUMENT); this.message = (Integer) bundle.getSerializable(MESSAGE_ARGUMENT); this.messageText = (String) bundle .getSerializable(MESSAGE_TEXT_ARGUMENT); this.positiveButton = (Integer) bundle .getSerializable(POSITIVEBUTTON_ARGUMENT); this.negativeButton = (Integer) bundle .getSerializable(NEGATIVEBUTTON_ARGUMENT); this.neutralButton = (Integer) bundle .getSerializable(NEUTRALBUTTON_ARGUMENT); this.arguments = (Object[]) bundle.getSerializable(ARGUMENTS_ARGUMENT); } public static CallbackDialogFragment createInstance(int code, String title, String message, Integer positiveButton, Integer negativeButton, Integer neutralButton, Object... arguments) { Bundle bundle = new Bundle(); bundle.putInt(CODE_ARGUMENT, code); bundle.putSerializable(TITLE_TEXT_ARGUMENT, title); bundle.putSerializable(MESSAGE_TEXT_ARGUMENT, message); bundle.putSerializable(POSITIVEBUTTON_ARGUMENT, positiveButton); bundle.putSerializable(NEGATIVEBUTTON_ARGUMENT, negativeButton); bundle.putSerializable(NEUTRALBUTTON_ARGUMENT, neutralButton); bundle.putSerializable(ARGUMENTS_ARGUMENT, arguments); CallbackDialogFragment result = new CallbackDialogFragment(); result.setArguments(bundle); return result; } public static CallbackDialogFragment createInstance(int code, Integer title, Integer message, Integer positiveButton, Integer negativeButton, Integer neutralButton, Object... arguments) { Bundle bundle = new Bundle(); bundle.putInt(CODE_ARGUMENT, code); bundle.putSerializable(TITLE_ARGUMENT, title); bundle.putSerializable(MESSAGE_ARGUMENT, message); bundle.putSerializable(POSITIVEBUTTON_ARGUMENT, positiveButton); bundle.putSerializable(NEGATIVEBUTTON_ARGUMENT, negativeButton); bundle.putSerializable(NEUTRALBUTTON_ARGUMENT, neutralButton); bundle.putSerializable(ARGUMENTS_ARGUMENT, arguments); CallbackDialogFragment result = new CallbackDialogFragment(); result.setArguments(bundle); return result; } public interface YesNoListener { void onYes(int code, Object... args); void onNo(int code, Object... args); void onNeutral(int code, Object... args); } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (!(activity instanceof YesNoListener)) { throw new ClassCastException(activity.toString() + " must implement YesNoListener"); } this.listener = (YesNoListener) activity; } @Override public void onDetach() { super.onDetach(); this.listener = null; } @Override public void onDestroyView() { if (getDialog() != null && getRetainInstance()) try { getDialog().setOnDismissListener(null); } catch (Exception e) { } super.onDestroyView(); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder result = new AlertDialog.Builder(getActivity()); if (title != null) { result.setTitle(title); } else { if (titleText != null) { result.setTitle(titleText); } } if (message != null) { result.setMessage(message); } else { if (messageText != null) { result.setMessage(messageText); } } if (positiveButton != null) { result.setPositiveButton(positiveButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (listener != null) { listener.onYes(code, arguments); } } }); } if (negativeButton != null) { result.setNegativeButton(negativeButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (listener != null) { listener.onNo(code, arguments); } } }); } if (neutralButton != null) { result.setNeutralButton(neutralButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (listener != null) { listener.onNeutral(code, arguments); } } }); } return result.create(); } }