blob: 3939a73e290d20556ac2347363bcd389086fb25d [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.calculator2;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.content.DialogInterface;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import android.view.LayoutInflater;
import android.widget.TextView;
/**
* 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
*/
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";
private static final String KEY_TITLE = NAME + "_title";
/**
* Convenience method for creating and showing a DialogFragment with the given message and
* title.
*
* @param activity originating Activity
* @param title resource id for the title string
* @param message resource id for the displayed message string
* @param positiveButtonLabel label for second button, if any. If non-null, activity must
* implement AlertDialogFragment.OnClickListener to respond.
*/
public static void showMessageDialog(Activity activity, @StringRes int title,
@StringRes int message, @StringRes int positiveButtonLabel, @Nullable String tag) {
showMessageDialog(activity, title != 0 ? activity.getString(title) : null,
activity.getString(message),
positiveButtonLabel != 0 ? activity.getString(positiveButtonLabel) : null,
tag);
}
/**
* Create and show a DialogFragment with the given message.
*
* @param activity originating Activity
* @param title displayed title, if any
* @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, @Nullable CharSequence title,
CharSequence message, @Nullable CharSequence positiveButtonLabel, @Nullable String tag)
{
final FragmentManager manager = activity.getFragmentManager();
if (manager == null || manager.isDestroyed()) {
return;
}
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));
if (positiveButtonLabel != null) {
args.putCharSequence(KEY_BUTTON_POSITIVE, positiveButtonLabel);
}
args.putCharSequence(KEY_TITLE, title);
dialogFragment.setArguments(args);
dialogFragment.show(manager, tag /* tag */);
}
public AlertDialogFragment() {
setStyle(STYLE_NO_TITLE, android.R.attr.alertDialogTheme);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Bundle args = getArguments() == null ? Bundle.EMPTY : getArguments();
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final LayoutInflater inflater = LayoutInflater.from(builder.getContext());
final TextView messageView = (TextView) inflater.inflate(
R.layout.dialog_message, null /* root */);
messageView.setText(args.getCharSequence(KEY_MESSAGE));
builder.setView(messageView);
builder.setNegativeButton(args.getCharSequence(KEY_BUTTON_NEGATIVE), null /* listener */);
final CharSequence positiveButtonLabel = args.getCharSequence(KEY_BUTTON_POSITIVE);
if (positiveButtonLabel != null) {
builder.setPositiveButton(positiveButtonLabel, this);
}
builder.setTitle(args.getCharSequence(KEY_TITLE));
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);
}
}
}