From e1b01091cbaa07d7b6c845f8a202b2d91ae22c09 Mon Sep 17 00:00:00 2001 From: y20k Date: Tue, 27 Sep 2016 16:08:45 +0200 Subject: [PATCH] trackbook now asks the user before clearing the map --- .../java/org/y20k/trackbook/MainActivity.java | 35 ++++++-- .../trackbook/MainActivityMapFragment.java | 25 ++++++ .../helpers/DialogClearFragment.java | 83 +++++++++++++++++++ app/src/main/res/values-de/strings.xml | 6 ++ app/src/main/res/values/strings.xml | 6 ++ 5 files changed, 149 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/org/y20k/trackbook/helpers/DialogClearFragment.java diff --git a/app/src/main/java/org/y20k/trackbook/MainActivity.java b/app/src/main/java/org/y20k/trackbook/MainActivity.java index c276ca3..c3e3ad1 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivity.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivity.java @@ -18,6 +18,7 @@ package org.y20k.trackbook; import android.Manifest; import android.annotation.TargetApi; +import android.app.DialogFragment; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -44,6 +45,7 @@ import android.view.View; import android.widget.Button; import android.widget.Toast; +import org.y20k.trackbook.helpers.DialogClearFragment; import org.y20k.trackbook.helpers.LogHelper; import org.y20k.trackbook.helpers.NotificationHelper; import org.y20k.trackbook.helpers.TrackbookKeys; @@ -57,7 +59,7 @@ import java.util.Map; /** * MainActivity class */ -public class MainActivity extends AppCompatActivity implements TrackbookKeys { +public class MainActivity extends AppCompatActivity implements TrackbookKeys, DialogClearFragment.DialogClearListener { /* Define log tag */ private static final String LOG_TAG = MainActivity.class.getSimpleName(); @@ -203,6 +205,26 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { } + @Override + public void onDialogClearPositiveClick(DialogFragment dialog) { + // DialogClear: User chose CLEAR. + LogHelper.v(LOG_TAG, "User chose CLEAR"); + + // clear the map + mMainActivityMapFragment.clearMap(); + + // dismiss notification + NotificationHelper.stop(); + } + + + @Override + public void onDialogClearNegativeClick(DialogFragment dialog) { + // DialogClear: User chose CANCEL. + LogHelper.v(LOG_TAG, "User chose CANCEL."); + } + + /* Set up main layout */ private void setupLayout() { if (mPermissionsGranted) { @@ -232,8 +254,9 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { if (mTrackerServiceRunning || mMainActivityMapFragment == null) { return false; } else { - mMainActivityMapFragment.clearMap(); - NotificationHelper.stop(); + // show clear dialog + DialogFragment dialog = new DialogClearFragment(); + dialog.show(getFragmentManager(), "DialogClearFragment"); return true; } } @@ -304,8 +327,6 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { if (mTrackerServiceRunning || mMainActivityMapFragment == null) { return false; } else { - mMainActivityMapFragment.clearMap(); - NotificationHelper.stop(); return true; } } @@ -404,7 +425,9 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { // prevent multiple reactions to intent intent.setAction(ACTION_DEFAULT); } else if (intent.hasExtra(EXTRA_CLEAR_MAP) && mMainActivityMapFragment != null) { - mMainActivityMapFragment.clearMap(); + // show clear dialog + DialogFragment dialog = new DialogClearFragment(); + dialog.show(getFragmentManager(), "DialogClearFragment"); // prevent multiple reactions to intent intent.setAction(ACTION_DEFAULT); } diff --git a/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java b/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java index 906bcd2..ed2f06a 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java @@ -384,6 +384,7 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { /* Removes track crumbs from map */ public void clearMap() { + // clear map if (mTrackOverlay != null) { Toast.makeText(mActivity, mActivity.getString(R.string.toast_message_clear_map), Toast.LENGTH_LONG).show(); @@ -391,6 +392,30 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { } // clear track object mTrack = null; + +// // Use the Builder class for convenient dialog construction +// AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); +// builder.setTitle(R.string.dialog_clear_map_title) +// .setMessage(R.string.dialog_clear_map_message) +// .setPositiveButton(R.string.dialog_clear_map_okay, new DialogInterface.OnClickListener() { +// public void onClick(DialogInterface dialog, int id) { +// // clear map +// if (mTrackOverlay != null) { +// Toast.makeText(mActivity, mActivity.getString(R.string.toast_message_clear_map), Toast.LENGTH_LONG).show(); +// mMapView.getOverlays().remove(mTrackOverlay); +// } +// // clear track object +// mTrack = null; +// } +// }) +// .setNegativeButton(R.string.dialog_clear_map_cancel, new DialogInterface.OnClickListener() { +// public void onClick(DialogInterface dialog, int id) { +// // user clicked cancel - do nothing +// } +// }); +// // Create the AlertDialog object and return it +// builder.create().show(); + } diff --git a/app/src/main/java/org/y20k/trackbook/helpers/DialogClearFragment.java b/app/src/main/java/org/y20k/trackbook/helpers/DialogClearFragment.java new file mode 100644 index 0000000..9c589c1 --- /dev/null +++ b/app/src/main/java/org/y20k/trackbook/helpers/DialogClearFragment.java @@ -0,0 +1,83 @@ +/** + * DialogClearFragment.java + * Implements the DialogClearFragment class + * A DialogClearFragment appears when the user wants to clear the map + * + * This file is part of + * TRACKBOOK - Movement Recorder for Android + * + * Copyright (c) 2016 - Y20K.org + * Licensed under the MIT-License + * http://opensource.org/licenses/MIT + * + * Trackbook uses osmdroid - OpenStreetMap-Tools for Android + * https://github.com/osmdroid/osmdroid + */ + +package org.y20k.trackbook.helpers; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; + +import org.y20k.trackbook.R; + + +/** + * DialogClearFragment class + */ +public class DialogClearFragment extends DialogFragment { + + /* Define log tag */ + private static final String LOG_TAG = DialogClearFragment.class.getSimpleName(); + + + /* Interface that the context that creates an instance of this fragment must implement */ + public interface DialogClearListener { + public void onDialogClearPositiveClick(DialogFragment dialog); + public void onDialogClearNegativeClick(DialogFragment dialog); + } + + + /* Main class variables */ + private DialogClearListener mListener; + + + @Override + public void onAttach(Context context) { + super.onAttach(context); + // verify that the host context implements the callback interface + try { + // instantiate the NoticeDialogListener so we can send events to the host + mListener = (DialogClearListener) context; + } catch (ClassCastException e) { + LogHelper.e(LOG_TAG, "Context does not implement the DialogClearListener interface."); + } + } + + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // construct dialog + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(R.string.dialog_clear_map_title) + .setMessage(R.string.dialog_clear_map_message) + .setPositiveButton(R.string.dialog_clear_map_okay, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + // user clicked CLEAR - inform initiating fragment / context + mListener.onDialogClearPositiveClick(DialogClearFragment.this); + } + }) + .setNegativeButton(R.string.dialog_clear_map_cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + // user clicked CANCEL - inform initiating fragment / context + mListener.onDialogClearNegativeClick(DialogClearFragment.this); + } + }); + // create the AlertDialog object and return it + return builder.create(); + } +} diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 4ff8f9c..3b6039a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -28,6 +28,12 @@ Tracking aktiviert Standortdienste sind deaktiviert. Trackbook kann nicht aufzeichnen. + + Zurücksetzen + Möchten Sie die Karte zurücksetzen? + Zurücksetzen + Abbrechen + Berechtigungen erteilt. Trackbook kann nicht starten. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 161c547..f0ff208 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,6 +28,12 @@ Tracking started Location is turned off. Trackbook will not work. + + Clear + Do you want to clear the map? + Clear + Cancel + Permissions granted. Unable to start Trackbook.