diff --git a/MyTracks/res/values/strings.xml b/MyTracks/res/values/strings.xml
index fd9fc0247..064235307 100644
--- a/MyTracks/res/values/strings.xml
+++ b/MyTracks/res/values/strings.xml
@@ -2252,17 +2252,28 @@ limitations under the License.
Recording your track…
+
+
+ All tracks and markers will be permanently deleted from the device. If Google Drive sync is
+ enabled, this will disable it. No tracks will be deleted on Google Drive.
+
+
+ The track and its markers will be permanently deleted from the device. If Google Drive sync is
+ enabled, this will also delete the track on Google Drive.
+
+
+ The tracks and their markers will be permanently deleted from the device. If Google Drive sync
+ is enabled, this will also delete the tracks on Google Drive.
+
+
Chart
-
- The track and its markers will be permanently deleted from the device. If Google Drive sync is
- enabled, this will also delete the track on Google Drive.
-
- All tracks and markers will be permanently deleted from the device. If Google Drive sync is
- enabled, this will disable it. No tracks will be deleted on Google Drive.
-
diff --git a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java
index 5bf1b2ce8..48adf51d6 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java
@@ -26,8 +26,8 @@ import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.content.Waypoint.WaypointType;
import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment.DeleteOneMarkerCaller;
-import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment;
-import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller;
+import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment;
+import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment.DeleteTrackCaller;
import com.google.android.apps.mytracks.services.MyTracksLocationManager;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.stats.TripStatistics;
@@ -75,7 +75,7 @@ import java.util.SortedSet;
* @author Rodrigo Damazio
*/
public class SearchListActivity extends AbstractSendToGoogleActivity
- implements DeleteOneTrackCaller, DeleteOneMarkerCaller {
+ implements DeleteTrackCaller, DeleteOneMarkerCaller {
private static final String TAG = SearchListActivity.class.getSimpleName();
@@ -355,8 +355,8 @@ public class SearchListActivity extends AbstractSendToGoogleActivity
getSupportFragmentManager(),
DeleteOneMarkerDialogFragment.DELETE_ONE_MARKER_DIALOG_TAG);
} else {
- DeleteOneTrackDialogFragment.newInstance(trackId).show(getSupportFragmentManager(),
- DeleteOneTrackDialogFragment.DELETE_ONE_TRACK_DIALOG_TAG);
+ DeleteTrackDialogFragment.newInstance(false, new long[] { trackId })
+ .show(getSupportFragmentManager(), DeleteTrackDialogFragment.DELETE_TRACK_DIALOG_TAG);
}
return true;
default:
@@ -509,7 +509,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity
}
@Override
- public void onDeleteOneTrackDone() {
+ public void onDeleteTrackDone() {
runOnUiThread(new Runnable() {
@Override
public void run() {
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
index 4f96bfcee..d55da7ccf 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
@@ -25,8 +25,8 @@ import com.google.android.apps.mytracks.fragments.ChartFragment;
import com.google.android.apps.mytracks.fragments.ChooseUploadServiceDialogFragment;
import com.google.android.apps.mytracks.fragments.ChooseUploadServiceDialogFragment.ChooseUploadServiceCaller;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment;
-import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment;
-import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller;
+import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment;
+import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment.DeleteTrackCaller;
import com.google.android.apps.mytracks.fragments.FrequencyDialogFragment;
import com.google.android.apps.mytracks.fragments.InstallEarthDialogFragment;
import com.google.android.apps.mytracks.fragments.MyTracksMapFragment;
@@ -72,7 +72,7 @@ import java.util.Locale;
* @author Rodrigo Damazio
*/
public class TrackDetailActivity extends AbstractSendToGoogleActivity
- implements ChooseUploadServiceCaller, DeleteOneTrackCaller {
+ implements ChooseUploadServiceCaller, DeleteTrackCaller {
public static final String EXTRA_TRACK_ID = "track_id";
public static final String EXTRA_MARKER_ID = "marker_id";
@@ -405,8 +405,8 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
startActivity(intent);
return true;
case R.id.track_detail_delete:
- DeleteOneTrackDialogFragment.newInstance(trackId).show(
- getSupportFragmentManager(), DeleteOneTrackDialogFragment.DELETE_ONE_TRACK_DIALOG_TAG);
+ DeleteTrackDialogFragment.newInstance(false, new long[] { trackId })
+ .show(getSupportFragmentManager(), DeleteTrackDialogFragment.DELETE_TRACK_DIALOG_TAG);
return true;
case R.id.track_detail_sensor_state:
intent = IntentUtils.newIntent(this, SensorStateActivity.class);
@@ -486,7 +486,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
}
@Override
- public void onDeleteOneTrackDone() {
+ public void onDeleteTrackDone() {
runOnUiThread(new Runnable() {
@Override
public void run() {
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
index ae161b502..e4bd54c61 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
@@ -23,9 +23,8 @@ import com.google.android.apps.mytracks.content.TrackDataListener;
import com.google.android.apps.mytracks.content.TrackDataType;
import com.google.android.apps.mytracks.content.TracksColumns;
import com.google.android.apps.mytracks.content.Waypoint;
-import com.google.android.apps.mytracks.fragments.DeleteAllTrackDialogFragment;
-import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment;
-import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller;
+import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment;
+import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment.DeleteTrackCaller;
import com.google.android.apps.mytracks.fragments.EnableSyncDialogFragment;
import com.google.android.apps.mytracks.fragments.EnableSyncDialogFragment.EnableSyncCaller;
import com.google.android.apps.mytracks.fragments.EulaDialogFragment;
@@ -94,7 +93,7 @@ import java.util.Locale;
* @author Leif Hendrik Wilden
*/
public class TrackListActivity extends AbstractSendToGoogleActivity
- implements EulaCaller, EnableSyncCaller, DeleteOneTrackCaller {
+ implements EulaCaller, EnableSyncCaller, DeleteTrackCaller {
private static final String TAG = TrackListActivity.class.getSimpleName();
private static final String START_GPS_KEY = "start_gps_key";
@@ -602,8 +601,8 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
startSaveActivity(TrackFileFormat.TCX);
return true;
case R.id.track_list_delete_all:
- new DeleteAllTrackDialogFragment().show(
- getSupportFragmentManager(), DeleteAllTrackDialogFragment.DELETE_ALL_TRACK_DIALOG_TAG);
+ DeleteTrackDialogFragment.newInstance(true, new long[] {})
+ .show(getSupportFragmentManager(), DeleteTrackDialogFragment.DELETE_TRACK_DIALOG_TAG);
return true;
case R.id.track_list_aggregated_statistics:
intent = IntentUtils.newIntent(this, AggregatedStatsActivity.class);
@@ -659,7 +658,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
}
@Override
- public void onDeleteOneTrackDone() {
+ public void onDeleteTrackDone() {
// Do nothing
}
@@ -827,8 +826,8 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
startActivity(intent);
return true;
case R.id.list_context_menu_delete:
- DeleteOneTrackDialogFragment.newInstance(trackId).show(
- getSupportFragmentManager(), DeleteOneTrackDialogFragment.DELETE_ONE_TRACK_DIALOG_TAG);
+ DeleteTrackDialogFragment.newInstance(false, new long[] { trackId })
+ .show(getSupportFragmentManager(), DeleteTrackDialogFragment.DELETE_TRACK_DIALOG_TAG);
return true;
default:
return false;
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteAllTrackDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteAllTrackDialogFragment.java
deleted file mode 100644
index 3effd70c1..000000000
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteAllTrackDialogFragment.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.google.android.apps.mytracks.fragments;
-
-import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
-import com.google.android.apps.mytracks.io.sync.SyncUtils;
-import com.google.android.apps.mytracks.util.DialogUtils;
-import com.google.android.apps.mytracks.util.PreferencesUtils;
-import com.google.android.maps.mytracks.R;
-
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.support.v4.app.DialogFragment;
-import android.support.v4.app.FragmentActivity;
-
-/**
- * A DialogFragment to delete all tracks.
- *
- * @author Jimmy Shih
- */
-public class DeleteAllTrackDialogFragment extends DialogFragment {
-
- public static final String DELETE_ALL_TRACK_DIALOG_TAG = "deleteAllTrackDialog";
-
- private FragmentActivity fragmentActivity;
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- fragmentActivity = getActivity();
- return DialogUtils.createConfirmationDialog(fragmentActivity,
- R.string.track_list_delete_all_confirm_message, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- PreferencesUtils.setBoolean(
- fragmentActivity, R.string.drive_sync_key, PreferencesUtils.DRIVE_SYNC_DEFAULT);
- SyncUtils.disableSync(fragmentActivity);
- SyncUtils.clearSyncState(fragmentActivity);
- MyTracksProviderUtils.Factory.get(fragmentActivity).deleteAllTracks();
- }
- }).start();
- }
- });
- }
-}
\ No newline at end of file
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java
deleted file mode 100644
index a85561c32..000000000
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.google.android.apps.mytracks.fragments;
-
-import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
-import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
-import com.google.android.apps.mytracks.util.DialogUtils;
-import com.google.android.apps.mytracks.util.PreferencesUtils;
-import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtils;
-import com.google.android.maps.mytracks.R;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.support.v4.app.DialogFragment;
-import android.support.v4.app.FragmentActivity;
-
-/**
- * A DialogFragment to delete one track.
- *
- * @author Jimmy Shih
- */
-public class DeleteOneTrackDialogFragment extends DialogFragment {
-
- /**
- * Interface for caller of this dialog fragment.
- *
- * @author Jimmy Shih
- */
- public interface DeleteOneTrackCaller {
-
- /**
- * Gets the track recording service connection.
- */
- public TrackRecordingServiceConnection getTrackRecordingServiceConnection();
-
- /**
- * Called when delete one track is done.
- */
- public void onDeleteOneTrackDone();
- }
-
- public static final String DELETE_ONE_TRACK_DIALOG_TAG = "deleteOneTrackDialog";
- private static final String KEY_TRACK_ID = "trackId";
-
- public static DeleteOneTrackDialogFragment newInstance(long trackId) {
- Bundle bundle = new Bundle();
- bundle.putLong(KEY_TRACK_ID, trackId);
-
- DeleteOneTrackDialogFragment deleteOneTrackDialogFragment = new DeleteOneTrackDialogFragment();
- deleteOneTrackDialogFragment.setArguments(bundle);
- return deleteOneTrackDialogFragment;
- }
-
- private DeleteOneTrackCaller caller;
- private FragmentActivity fragmentActivity;
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- try {
- caller = (DeleteOneTrackCaller) activity;
- } catch (ClassCastException e) {
- throw new ClassCastException(
- activity.toString() + " must implement " + DeleteOneTrackCaller.class.getSimpleName());
- }
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- fragmentActivity = getActivity();
- return DialogUtils.createConfirmationDialog(fragmentActivity,
- R.string.track_detail_delete_confirm_message, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- final long trackId = getArguments().getLong(KEY_TRACK_ID);
- if (trackId
- == PreferencesUtils.getLong(fragmentActivity, R.string.recording_track_id_key)) {
- TrackRecordingServiceConnectionUtils.stopRecording(
- fragmentActivity, caller.getTrackRecordingServiceConnection(), false);
- }
- new Thread(new Runnable() {
- @Override
- public void run() {
- MyTracksProviderUtils.Factory.get(fragmentActivity).deleteTrack(trackId);
- caller.onDeleteOneTrackDone();
- }
- }).start();
- }
- });
- }
-}
\ No newline at end of file
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteTrackDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteTrackDialogFragment.java
new file mode 100644
index 000000000..ea28a29ce
--- /dev/null
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteTrackDialogFragment.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.google.android.apps.mytracks.fragments;
+
+import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
+import com.google.android.apps.mytracks.io.sync.SyncUtils;
+import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
+import com.google.android.apps.mytracks.util.DialogUtils;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
+import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtils;
+import com.google.android.maps.mytracks.R;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.FragmentActivity;
+
+/**
+ * A DialogFragment to track.
+ *
+ * @author Jimmy Shih
+ */
+public class DeleteTrackDialogFragment extends DialogFragment {
+
+ /**
+ * Interface for caller of this dialog fragment.
+ *
+ * @author Jimmy Shih
+ */
+ public interface DeleteTrackCaller {
+
+ /**
+ * Gets the track recording service connection.
+ */
+ public TrackRecordingServiceConnection getTrackRecordingServiceConnection();
+
+ /**
+ * Called when delete track is done.
+ */
+ public void onDeleteTrackDone();
+ }
+
+ public static final String DELETE_TRACK_DIALOG_TAG = "deleteTrackDialog";
+ private static final String KEY_DELETE_ALL = "deleteAll";
+ private static final String KEY_TRACK_IDS = "trackIds";
+
+ /**
+ * Create a new instance.
+ *
+ * @param deleteAll true to delete all tracks
+ * @param trackIds list of track ids to delete when deleteAll if false
+ */
+ public static DeleteTrackDialogFragment newInstance(boolean deleteAll, long[] trackIds) {
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(KEY_DELETE_ALL, deleteAll);
+ bundle.putLongArray(KEY_TRACK_IDS, trackIds);
+
+ DeleteTrackDialogFragment deleteTrackDialogFragment = new DeleteTrackDialogFragment();
+ deleteTrackDialogFragment.setArguments(bundle);
+ return deleteTrackDialogFragment;
+ }
+
+ private DeleteTrackCaller caller;
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ caller = (DeleteTrackCaller) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(
+ activity.toString() + " must implement " + DeleteTrackCaller.class.getSimpleName());
+ }
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ boolean deleteAll = getArguments().getBoolean(KEY_DELETE_ALL);
+ final FragmentActivity fragmentActivity = getActivity();
+ if (deleteAll) {
+ return DialogUtils.createConfirmationDialog(fragmentActivity,
+ R.string.track_delete_all_confirm_message, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ PreferencesUtils.setBoolean(fragmentActivity, R.string.drive_sync_key,
+ PreferencesUtils.DRIVE_SYNC_DEFAULT);
+ SyncUtils.disableSync(fragmentActivity);
+ SyncUtils.clearSyncState(fragmentActivity);
+ MyTracksProviderUtils.Factory.get(fragmentActivity).deleteAllTracks();
+ caller.onDeleteTrackDone();
+ }
+ }).start();
+ }
+ });
+ } else {
+ final long[] trackIds = getArguments().getLongArray(KEY_TRACK_IDS);
+ int messageId = trackIds.length > 1 ? R.string.track_delete_multiple_confirm_message
+ : R.string.track_delete_one_confirm_message;
+ return DialogUtils.createConfirmationDialog(
+ fragmentActivity, messageId, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ for (long trackId : trackIds) {
+ if (trackId == PreferencesUtils.getLong(
+ fragmentActivity, R.string.recording_track_id_key)) {
+ TrackRecordingServiceConnectionUtils.stopRecording(
+ fragmentActivity, caller.getTrackRecordingServiceConnection(), false);
+ }
+ }
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ for (long id : trackIds) {
+ MyTracksProviderUtils.Factory.get(fragmentActivity).deleteTrack(id);
+ }
+ caller.onDeleteTrackDone();
+ }
+ }).start();
+ }
+ });
+ }
+ }
+}
\ No newline at end of file