package cgeo.geocaching.ui;
import cgeo.geocaching.R;
import cgeo.geocaching.activity.Keyboard;
import cgeo.geocaching.ui.dialog.Dialogs;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.Window;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import butterknife.ButterKnife;
import org.apache.commons.lang3.StringUtils;
public class EditNoteDialog extends DialogFragment {
public static final String ARGUMENT_INITIAL_NOTE = "initialNote";
private EditText mEditText;
public interface EditNoteDialogListener {
void onFinishEditNoteDialog(final String inputText);
}
/**
* Create a new dialog to edit a note.
* <em>This fragment must be inserted into an activity implementing the EditNoteDialogListener interface.</em>
*
* @param initialNote the initial note to insert in the edit dialog
*/
public static EditNoteDialog newInstance(final String initialNote) {
final EditNoteDialog dialog = new EditNoteDialog();
final Bundle arguments = new Bundle();
arguments.putString(ARGUMENT_INITIAL_NOTE, initialNote);
dialog.setArguments(arguments);
return dialog;
}
@Override
@android.support.annotation.NonNull
public Dialog onCreateDialog(final Bundle savedInstanceState) {
final FragmentActivity activity = getActivity();
final View view = View.inflate(activity, R.layout.fragment_edit_note, null);
mEditText = ButterKnife.findById(view, R.id.note);
String initialNote = getArguments().getString(ARGUMENT_INITIAL_NOTE);
if (initialNote != null) {
// add a new line when editing existing text, to avoid accidental overwriting of the last line
if (StringUtils.isNotBlank(initialNote) && !initialNote.endsWith("\n")) {
initialNote = initialNote + "\n";
}
mEditText.setText(initialNote);
Dialogs.moveCursorToEnd(mEditText);
getArguments().remove(ARGUMENT_INITIAL_NOTE);
}
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setView(view);
final AlertDialog dialog = builder.create();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
final TextView title = ButterKnife.findById(view, R.id.dialog_title_title);
title.setText(R.string.cache_personal_note);
title.setVisibility(View.VISIBLE);
final ImageButton cancel = ButterKnife.findById(view, R.id.dialog_title_cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
dialog.dismiss();
}
});
cancel.setVisibility(View.VISIBLE);
final ImageButton done = ButterKnife.findById(view, R.id.dialog_title_done);
done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
// trim note to avoid unnecessary uploads for whitespace only changes
final String personalNote = StringUtils.trim(mEditText.getText().toString());
((EditNoteDialogListener) getActivity()).onFinishEditNoteDialog(personalNote);
dialog.dismiss();
}
});
done.setVisibility(View.VISIBLE);
new Keyboard(activity).showDelayed(mEditText);
return dialog;
}
}