package com.orgzly.android.ui.dialogs;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.StringRes;
import android.support.v4.app.DialogFragment;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import com.orgzly.R;
import com.orgzly.android.ui.util.ActivityUtils;
public class SimpleOneLinerDialog extends DialogFragment {
private static final String ARG_ID = "id";
private static final String ARG_TITLE = "title";
private static final String ARG_HINT = "hint";
private static final String ARG_VALUE = "value";
private static final String ARG_POSITIVE_BUTTON_TEXT = "pos";
private static final String ARG_NEGATIVE_BUTTON_TEXT = "neg";
private static final String ARG_USER_DATA = "bundle";
/** Name used for {@link android.app.FragmentManager}. */
public static final String FRAGMENT_TAG = SimpleOneLinerDialog.class.getName();
private SimpleOneLinerDialogListener mListener;
private int mId;
private int mTitle;
private int mHint;
private String mValue;
private int mPositiveButtonText;
private int mNegativeButtonText;
private Bundle mUserData;
public static SimpleOneLinerDialog getInstance(
int id,
@StringRes int title,
@StringRes int hint,
@StringRes int positiveButtonText,
@StringRes int negativeButtonText,
String defaultValue,
Bundle userData) {
SimpleOneLinerDialog dialog = new SimpleOneLinerDialog();
Bundle args = new Bundle();
args.putInt(ARG_TITLE, title);
if (hint != 0) {
args.putInt(ARG_HINT, hint);
}
if (defaultValue != null) {
args.putString(ARG_VALUE, defaultValue);
}
args.putInt(ARG_ID, id);
if (userData != null) {
args.putBundle(ARG_USER_DATA, userData);
}
args.putInt(ARG_POSITIVE_BUTTON_TEXT, positiveButtonText);
args.putInt(ARG_NEGATIVE_BUTTON_TEXT, negativeButtonText);
dialog.setArguments(args);
return dialog;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity activity = getActivity();
/* This makes sure that the container activity has implemented
* the callback interface. If not, it throws an exception
*/
try {
mListener = (SimpleOneLinerDialogListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement " + SimpleOneLinerDialogListener.class);
}
if (getArguments() == null || !getArguments().containsKey(ARG_TITLE)) {
throw new IllegalArgumentException(SimpleOneLinerDialog.class.getSimpleName() +
" must have title passed as an argument");
}
mId = getArguments().getInt(ARG_ID);
mTitle = getArguments().getInt(ARG_TITLE);
mHint = getArguments().getInt(ARG_HINT);
mValue = getArguments().getString(ARG_VALUE);
mUserData = getArguments().getBundle(ARG_USER_DATA);
mPositiveButtonText = getArguments().getInt(ARG_POSITIVE_BUTTON_TEXT);
mNegativeButtonText = getArguments().getInt(ARG_NEGATIVE_BUTTON_TEXT);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = getActivity().getLayoutInflater();
@SuppressLint("InflateParams") final View view = inflater.inflate(R.layout.dialog_simple_one_liner, null, false);
final EditText input = (EditText) view.findViewById(R.id.dialog_input);
if (mHint != 0) {
input.setHint(mHint);
}
if (mValue != null) {
input.setText(mValue);
}
final AlertDialog dialog = new AlertDialog.Builder(getActivity())
.setTitle(mTitle)
.setView(view)
.setPositiveButton(mPositiveButtonText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
if (!TextUtils.isEmpty(input.getText())) {
mListener.onSimpleOneLinerDialogValue(mId, input.getText().toString().trim(), mUserData);
}
/* Closing due to used android:windowSoftInputMode="stateUnchanged" */
ActivityUtils.closeSoftKeyboard(getActivity());
}
})
.setNegativeButton(mNegativeButtonText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* Closing due to used android:windowSoftInputMode="stateUnchanged" */
ActivityUtils.closeSoftKeyboard(getActivity());
}
})
.create();
/* Perform positive button click on keyboard action press. */
input.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
return true;
}
});
ActivityUtils.openSoftKeyboard(getActivity(), input);
return dialog;
}
public interface SimpleOneLinerDialogListener {
void onSimpleOneLinerDialogValue(int id, String value, Bundle bundle);
}
}