package me.guillaumin.android.osmtracker.view; import java.util.UUID; import me.guillaumin.android.osmtracker.OSMTracker; import me.guillaumin.android.osmtracker.R; import me.guillaumin.android.osmtracker.db.TrackContentProvider.Schema; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.widget.EditText; public class TextNoteDialog extends AlertDialog { /** * bundle key for text of input field */ private static final String KEY_INPUT_TEXT = "INPUT_TEXT"; /** * bundle key for waypoint uuid */ private static final String KEY_WAYPOINT_UUID = "WAYPOINT_UUID"; /** * bundle key for waypoints track id */ private static final String KEY_WAYPOINT_TRACKID = "WAYPOINT_TRACKID"; /** * the input box displayed in the dialog */ EditText input = null; /** * Unique identifier of the waypoint this dialog working on */ private String wayPointUuid = null; /** * Id of the track the dialog will add this waypoint to */ private long wayPointTrackId; private Context context; public TextNoteDialog(Context context, long trackId) { super(context); this.context = context; this.wayPointTrackId = trackId; // Text edit control for user input input = new EditText(context); // default settings this.setTitle(R.string.gpsstatus_record_textnote); this.setCancelable(true); this.setView(input); this.setButton(context.getResources().getString(android.R.string.ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Track waypoint with user input text Intent intent = new Intent(OSMTracker.INTENT_UPDATE_WP); intent.putExtra(Schema.COL_TRACK_ID, TextNoteDialog.this.wayPointTrackId); intent.putExtra(OSMTracker.INTENT_KEY_NAME, input.getText().toString()); intent.putExtra(OSMTracker.INTENT_KEY_UUID, TextNoteDialog.this.wayPointUuid); TextNoteDialog.this.context.sendBroadcast(intent); } }); this.setButton2(context.getResources().getString(android.R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // cancel the dialog dialog.cancel(); } }); this.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // delete the waypoint because user canceled this dialog Intent intent = new Intent(OSMTracker.INTENT_DELETE_WP); intent.putExtra(OSMTracker.INTENT_KEY_UUID, TextNoteDialog.this.wayPointUuid); TextNoteDialog.this.context.sendBroadcast(intent); } }); } /** * @link android.app.Dialog#onStart() */ @Override protected void onStart() { if(wayPointUuid == null){ // there is no UUID set for the waypoint we're working on // so we need to generate a UUID and track this point wayPointUuid = UUID.randomUUID().toString(); Intent intent = new Intent(OSMTracker.INTENT_TRACK_WP); intent.putExtra(Schema.COL_TRACK_ID, wayPointTrackId); intent.putExtra(OSMTracker.INTENT_KEY_UUID, wayPointUuid); intent.putExtra(OSMTracker.INTENT_KEY_NAME, context.getResources().getString(R.string.gpsstatus_record_textnote)); context.sendBroadcast(intent); } super.onStart(); } /** * resets values of this dialog * such as the input fields text and the waypoints uuid */ public void resetValues(){ wayPointUuid = null; input.setText(""); } /** * restoring values from the savedInstaceState */ @Override public void onRestoreInstanceState(Bundle savedInstanceState) { String text = savedInstanceState.getString(KEY_INPUT_TEXT); if(text != null){ input.setText(text); } wayPointUuid = savedInstanceState.getString(KEY_WAYPOINT_UUID); wayPointTrackId = savedInstanceState.getLong(KEY_WAYPOINT_TRACKID); super.onRestoreInstanceState(savedInstanceState); } /** * save values to bundle that we'll need later */ @Override public Bundle onSaveInstanceState() { Bundle extras = super.onSaveInstanceState(); extras.putString(KEY_INPUT_TEXT, input.getText().toString()); extras.putLong(KEY_WAYPOINT_TRACKID, wayPointTrackId); extras.putString(KEY_WAYPOINT_UUID, wayPointUuid); return extras; } }