summaryrefslogtreecommitdiffstats
path: root/src/com/android/calculator2/AlertDialogFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/calculator2/AlertDialogFragment.java')
-rw-r--r--src/com/android/calculator2/AlertDialogFragment.java54
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);
+ }
}
}