package com.ianhanniballake.contractiontimer.ui;
import android.app.Dialog;
import android.content.AsyncQueryHandler;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.ianhanniballake.contractiontimer.BuildConfig;
import com.ianhanniballake.contractiontimer.R;
import com.ianhanniballake.contractiontimer.appwidget.AppWidgetUpdateHandler;
import com.ianhanniballake.contractiontimer.notification.NotificationUpdateService;
import com.ianhanniballake.contractiontimer.provider.ContractionContract;
/**
* Reset Confirmation Dialog box
*/
public class NoteDialogFragment extends DialogFragment {
/**
* Argument key for storing/retrieving the contraction id associated with this dialog
*/
public final static String CONTRACTION_ID_ARGUMENT = "com.ianhanniballake.contractiontimer.ContractionId";
/**
* Argument key for storing/retrieving the existing note associated with this dialog
*/
public final static String EXISTING_NOTE_ARGUMENT = "com.ianhanniballake.contractiontimer.ExistingNote";
/**
* Action associated with this fragment closing
*/
public final static String NOTE_CLOSE_ACTION = "com.ianhanniballake.contractiontimer.NOTE_CLOSE";
private final static String TAG = NoteDialogFragment.class.getSimpleName();
@Override
public void onCancel(final DialogInterface dialog) {
if (BuildConfig.DEBUG)
Log.d(TAG, "Received cancelation event");
super.onCancel(dialog);
}
@Override
@NonNull
public Dialog onCreateDialog(final Bundle savedInstanceState) {
final long contractionId = getArguments().getLong(NoteDialogFragment.CONTRACTION_ID_ARGUMENT);
final String existingNote = getArguments().getString(NoteDialogFragment.EXISTING_NOTE_ARGUMENT);
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final LayoutInflater inflater = getActivity().getLayoutInflater();
final View layout = inflater.inflate(R.layout.dialog_note, null);
final EditText input = (EditText) layout.findViewById(R.id.dialog_note_input);
if (TextUtils.isEmpty(existingNote))
builder.setTitle(R.string.note_dialog_title_add);
else
builder.setTitle(R.string.note_dialog_title_edit);
input.setText(existingNote);
final Context context = getActivity();
final AsyncQueryHandler asyncQueryHandler = new AsyncQueryHandler(context.getContentResolver()) {
@Override
protected void onUpdateComplete(final int token, final Object cookie, final int result) {
AppWidgetUpdateHandler.createInstance().updateAllWidgets(context);
NotificationUpdateService.updateNotification(context);
}
};
return builder.setView(layout).setInverseBackgroundForced(true)
.setPositiveButton(R.string.note_dialog_save, new OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
if (BuildConfig.DEBUG)
Log.d(TAG, "Received positive event");
String noteEvent = TextUtils.isEmpty(existingNote) ? "note_add_saved" : "note_edit_saved";
FirebaseAnalytics.getInstance(getContext()).logEvent(noteEvent, null);
final Uri updateUri = ContentUris.withAppendedId(
ContractionContract.Contractions.CONTENT_ID_URI_BASE, contractionId);
final ContentValues values = new ContentValues();
values.put(ContractionContract.Contractions.COLUMN_NAME_NOTE, input.getText().toString());
asyncQueryHandler.startUpdate(0, 0, updateUri, values, null, null);
}
}).setNegativeButton(R.string.note_dialog_cancel, new OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
if (BuildConfig.DEBUG)
Log.d(TAG, "Received negative event");
}
}).create();
}
@Override
public void onDismiss(final DialogInterface dialog) {
final LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity());
localBroadcastManager.sendBroadcast(new Intent(NOTE_CLOSE_ACTION));
super.onDismiss(dialog);
}
}