package fr.tvbarthel.apps.sayitfromthesky.fragments.dialogs; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.os.IBinder; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import butterknife.ButterKnife; import fr.tvbarthel.apps.sayitfromthesky.R; import fr.tvbarthel.apps.sayitfromthesky.helpers.ContentValuesHelper; import fr.tvbarthel.apps.sayitfromthesky.models.Drawing; import fr.tvbarthel.apps.sayitfromthesky.providers.contracts.DrawingContract; /** * A simple {@link android.app.DialogFragment} to edit a {@link fr.tvbarthel.apps.sayitfromthesky.models.Drawing}. */ public class EditDrawingDialog extends DialogFragment { private static final String ARGS_DRAWING = "EditDrawingDialog.Args.Drawing"; private Callback mCallback; private Drawing mDrawing; public static EditDrawingDialog newInstance(Drawing drawingToEdit) { final EditDrawingDialog dialog = new EditDrawingDialog(); final Bundle arguments = new Bundle(); arguments.putParcelable(ARGS_DRAWING, drawingToEdit); dialog.setArguments(arguments); return dialog; } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof Callback) { mCallback = (Callback) activity; } else { throw new ClassCastException(activity.toString() + " must implement EditDrawingDialog.Callback"); } } @Override public void onDetach() { super.onDetach(); mCallback = null; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { mDrawing = getArguments().getParcelable(ARGS_DRAWING); final View view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_edit_drawing, null); final EditText editText = ButterKnife.findById(view, R.id.dialog_edit_drawing_title_edit); final View btnOk = ButterKnife.findById(view, R.id.dialog_edit_drawing_ok); final View btnCancel = ButterKnife.findById(view, R.id.dialog_edit_drawing_cancel); editText.setText(mDrawing.getTitle()); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(view); btnCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hideSoftKeyboard(editText.getWindowToken()); EditDrawingDialog.this.dismiss(); } }); btnOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final String newTitle = editText.getText().toString(); if (!newTitle.equals(mDrawing.getTitle())) { final Drawing newDrawing = new Drawing(newTitle, mDrawing.getCreationTimeInMillis(), mDrawing.getEncodedPolylines()); newDrawing.setId(mDrawing.getId()); final int rowUpdated = getActivity().getContentResolver().update(DrawingContract.getContentUri(newDrawing), ContentValuesHelper.drawingToContentValues(newDrawing), null, null); if (rowUpdated > 0) { mCallback.onDrawingEdited(newDrawing); } } hideSoftKeyboard(editText.getWindowToken()); EditDrawingDialog.this.dismiss(); } }); return builder.create(); } /** * Close/hide the input method's soft input area * * @param windowToken Supplies the identifying token given to an input method when it was started, which allows it to perform this operation on itself. */ private void hideSoftKeyboard(IBinder windowToken) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService( Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(windowToken, 0); } /** * Default Constructor. * <p/> * lint [ValidFragment] * http://developer.android.com/reference/android/app/Fragment.html#Fragment() * Every fragment must have an empty constructor, so it can be instantiated when restoring its activity's state. */ public EditDrawingDialog() { super(); } /** * An interface definition for a callback. */ public interface Callback { /** * Called when the drawing has been edited. * * @param drawing the new {@link fr.tvbarthel.apps.sayitfromthesky.models.Drawing}. */ void onDrawingEdited(Drawing drawing); } }