diff options
Diffstat (limited to 'src/com/android/calculator2/AlertDialogFragment.java')
-rw-r--r-- | src/com/android/calculator2/AlertDialogFragment.java | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/src/com/android/calculator2/AlertDialogFragment.java b/src/com/android/calculator2/AlertDialogFragment.java index bb7a50b..49f9549 100644 --- a/src/com/android/calculator2/AlertDialogFragment.java +++ b/src/com/android/calculator2/AlertDialogFragment.java @@ -21,22 +21,50 @@ import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.Context; +import android.content.DialogInterface; import android.os.Bundle; +import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.widget.TextView; -public class AlertDialogFragment extends DialogFragment { +/** + * Display a message with a dismiss putton, and optionally a second button. + */ +public class AlertDialogFragment extends DialogFragment implements DialogInterface.OnClickListener { + + public interface OnClickListener { + /** + * This method will be invoked when a button in the dialog is clicked. + * + * @param fragment the AlertDialogFragment that received the click + * @param which the button that was clicked (e.g. + * {@link DialogInterface#BUTTON_POSITIVE}) or the position + * of the item clicked + */ + public void onClick(AlertDialogFragment fragment, int which); + } private static final String NAME = AlertDialogFragment.class.getName(); private static final String KEY_MESSAGE = NAME + "_message"; private static final String KEY_BUTTON_NEGATIVE = NAME + "_button_negative"; + private static final String KEY_BUTTON_POSITIVE = NAME + "_button_positive"; - public static void showMessageDialog(Activity activity, CharSequence message) { + /** + * Create and show a DialogFragment with the given message. + * @param activity originating Activity + * @param message displayed message + * @param positiveButtonLabel label for second button, if any. If non-null, activity must + * implement AlertDialogFragment.OnClickListener to respond. + */ + public static void showMessageDialog(Activity activity, CharSequence message, + @Nullable CharSequence positiveButtonLabel) { + final AlertDialogFragment dialogFragment = new AlertDialogFragment(); final Bundle args = new Bundle(); args.putCharSequence(KEY_MESSAGE, message); args.putCharSequence(KEY_BUTTON_NEGATIVE, activity.getString(R.string.dismiss)); - - final AlertDialogFragment dialogFragment = new AlertDialogFragment(); + if (positiveButtonLabel != null) { + args.putCharSequence(KEY_BUTTON_POSITIVE, positiveButtonLabel); + } dialogFragment.setArguments(args); dialogFragment.show(activity.getFragmentManager(), null /* tag */); } @@ -53,9 +81,21 @@ public class AlertDialogFragment extends DialogFragment { final TextView textView = (TextView) inflater.inflate(R.layout.dialog_message, null /* root */); textView.setText(args.getCharSequence(KEY_MESSAGE)); - return new AlertDialog.Builder(context) + final AlertDialog.Builder builder = new AlertDialog.Builder(context) .setView(textView) - .setNegativeButton(args.getCharSequence(KEY_BUTTON_NEGATIVE), null /* listener */) - .create(); + .setNegativeButton(args.getCharSequence(KEY_BUTTON_NEGATIVE), null /* listener */); + final CharSequence positiveButtonLabel = args.getCharSequence(KEY_BUTTON_POSITIVE); + if (positiveButtonLabel != null) { + builder.setPositiveButton(positiveButtonLabel, this); + } + return builder.create(); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + final Activity activity = getActivity(); + if (activity instanceof AlertDialogFragment.OnClickListener /* always true */) { + ((AlertDialogFragment.OnClickListener) activity).onClick(this, which); + } } } |