package org.droidplanner.android.dialogs;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import org.droidplanner.android.R;
/**
* Created by Fredia Huya-Kouadio on 6/17/15.
*/
public class SupportEditInputDialog extends DialogFragment {
protected final static String EXTRA_DIALOG_TAG = "extra_dialog_tag";
protected final static String EXTRA_TITLE = "title";
protected static final String EXTRA_HINT = "hint";
protected static final String EXTRA_HINT_IS_VALID_ENTRY = "extra_hint_is_valid_entry";
public interface Listener {
void onOk(String dialogTag, final CharSequence input);
void onCancel(String dialogTag);
}
public static SupportEditInputDialog newInstance(String dialogTag, String title, String hint, boolean hintIsValidEntry){
if (dialogTag == null)
throw new IllegalArgumentException("The dialog tag must not be null!");
SupportEditInputDialog dialog = new SupportEditInputDialog();
Bundle bundle = new Bundle();
bundle.putString(EXTRA_DIALOG_TAG, dialogTag);
bundle.putString(EXTRA_TITLE, title);
bundle.putBoolean(EXTRA_HINT_IS_VALID_ENTRY, hintIsValidEntry);
if(hint == null){
hint = "";
}
bundle.putString(EXTRA_HINT, hint);
dialog.setArguments(bundle);
return dialog;
}
public static SupportEditInputDialog newInstance(String dialogTag, String title, String hint,
boolean hintIsValidEndtry, Listener listener) {
SupportEditInputDialog dialog = newInstance(dialogTag, title, hint, hintIsValidEndtry);
dialog.mListener = listener;
return dialog;
}
protected Listener mListener;
private EditText mEditText;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (mListener != null) {
return;
}
Object parent = getParentFragment();
if(parent == null)
parent = activity;
if (!(parent instanceof Listener)) {
throw new IllegalStateException("Parent activity must implement " + Listener.class.getName());
}
mListener = (Listener) parent;
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return buildDialog(savedInstanceState).create();
}
protected AlertDialog.Builder buildDialog(Bundle savedInstanceState){
final Bundle arguments = getArguments();
final String dialogTag = arguments.getString(EXTRA_DIALOG_TAG);
final boolean hintIsValidEntry = arguments.getBoolean(EXTRA_HINT_IS_VALID_ENTRY);
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
.setTitle(arguments.getString(EXTRA_TITLE))
.setView(generateContentView(savedInstanceState))
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
CharSequence input = mEditText.getText();
if (TextUtils.isEmpty(input) && hintIsValidEntry) {
input = mEditText.getHint();
}
String value = "";
if (input != null)
value = input.toString().trim();
if (mListener != null)
mListener.onOk(dialogTag, value);
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mListener != null)
mListener.onCancel(dialogTag);
}
});
return builder;
}
protected View generateContentView(Bundle savedInstanceState){
final View contentView = getActivity().getLayoutInflater().inflate(R.layout
.dialog_edit_input_content, null);
if(contentView == null)
return contentView;
final Bundle arguments = getArguments();
final CharSequence hint = arguments.getString(EXTRA_HINT);
final boolean hintIsValidEntry = arguments.getBoolean(EXTRA_HINT_IS_VALID_ENTRY);
mEditText = (EditText) contentView.findViewById(R.id.dialog_edit_text_content);
if(hintIsValidEntry){
mEditText.setText(hint);
}
else {
mEditText.setHint(hint);
}
return contentView;
}
@Override
public void onStop() {
super.onStop();
dismissAllowingStateLoss();
}
}