diff --git a/MyTracks/AndroidManifest.xml b/MyTracks/AndroidManifest.xml index 7f32148dc..d9edc8c60 100755 --- a/MyTracks/AndroidManifest.xml +++ b/MyTracks/AndroidManifest.xml @@ -181,16 +181,6 @@ limitations under the License. - - - - - - - - diff --git a/MyTracks/src/com/google/android/apps/mytracks/DeleteAllTracks.java b/MyTracks/src/com/google/android/apps/mytracks/DeleteAllTracks.java deleted file mode 100644 index 776f4bbd2..000000000 --- a/MyTracks/src/com/google/android/apps/mytracks/DeleteAllTracks.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2008 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; - -import com.google.android.apps.mytracks.content.MyTracksProviderUtils; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; -import com.google.android.maps.mytracks.R; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; -import android.os.Handler; -import android.os.Message; -import android.util.Log; - -/** - * A utility class that can be used to delete all tracks and track points - * from the provider, including asking for confirmation from the user via - * a dialog. - * - * @author Leif Hendrik Wilden - */ -public class DeleteAllTracks extends Handler { - - private final Context context; - private final Runnable done; - - public DeleteAllTracks(Context context, Runnable done) { - this.context = context; - this.done = done; - } - - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - - AlertDialog dialog = null; - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setMessage( - context.getString(R.string.track_list_delete_all_confirm_message)); - builder.setTitle(context.getString(R.string.generic_confirm_title)); - builder.setIcon(android.R.drawable.ic_dialog_alert); - builder.setPositiveButton(context.getString(R.string.generic_yes), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialogInterface, int i) { - dialogInterface.dismiss(); - Log.w(Constants.TAG, "deleting all!"); - MyTracksProviderUtils.Factory.get(context).deleteAllTracks(); - SharedPreferences prefs = context.getSharedPreferences( - Constants.SETTINGS_NAME, Context.MODE_PRIVATE); - Editor editor = prefs.edit(); - // TODO: Go through data manager - editor.putLong(context.getString(R.string.selected_track_key), -1); - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); - if (done != null) { - Handler h = new Handler(); - h.post(done); - } - } - }); - builder.setNegativeButton(context.getString(R.string.generic_no), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialogInterface, int i) { - dialogInterface.dismiss(); - } - }); - dialog = builder.create(); - dialog.show(); - } -} diff --git a/MyTracks/src/com/google/android/apps/mytracks/DeleteTrack.java b/MyTracks/src/com/google/android/apps/mytracks/DeleteTrack.java deleted file mode 100644 index e34d78b49..000000000 --- a/MyTracks/src/com/google/android/apps/mytracks/DeleteTrack.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2011 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; - -import static com.google.android.apps.mytracks.Constants.TAG; - -import com.google.android.apps.mytracks.content.MyTracksProviderUtils; -import com.google.android.apps.mytracks.content.TracksColumns; -import com.google.android.apps.mytracks.util.ApiAdapterFactory; -import com.google.android.apps.mytracks.util.UriUtils; -import com.google.android.maps.mytracks.R; - -import android.app.Activity; -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.ContentUris; -import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnCancelListener; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; - -/** - * Activity used to delete a track. - * - * @author Rodrigo Damazio - */ -public class DeleteTrack extends Activity - implements DialogInterface.OnClickListener, OnCancelListener { - private static final int CONFIRM_DIALOG = 1; - - private MyTracksProviderUtils providerUtils; - - private long deleteTrackId; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - providerUtils = MyTracksProviderUtils.Factory.get(this); - - Intent intent = getIntent(); - String action = intent.getAction(); - Uri data = intent.getData(); - if (!Intent.ACTION_DELETE.equals(action) || - !UriUtils.matchesContentUri(data, TracksColumns.CONTENT_URI)) { - Log.e(TAG, "Got bad delete intent: " + intent); - finish(); - } - - deleteTrackId = ContentUris.parseId(data); - - showDialog(CONFIRM_DIALOG); - } - - @Override - protected Dialog onCreateDialog(int id) { - if (id != CONFIRM_DIALOG) { - Log.e(TAG, "Unknown dialog " + id); - return null; - } - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage(getString(R.string.track_list_delete_track_confirm_message)); - builder.setTitle(getString(R.string.generic_confirm_title)); - builder.setIcon(android.R.drawable.ic_dialog_alert); - builder.setPositiveButton(getString(R.string.generic_yes), this); - builder.setNegativeButton(getString(R.string.generic_no), this); - builder.setOnCancelListener(this); - return builder.create(); - } - - @Override - public void onClick(DialogInterface dialogInterface, int which) { - dialogInterface.dismiss(); - if (which == DialogInterface.BUTTON_POSITIVE) { - deleteTrack(); - } - finish(); - } - - @Override - public void onCancel(DialogInterface dialog) { - onClick(dialog, DialogInterface.BUTTON_NEGATIVE); - } - - private void deleteTrack() { - providerUtils.deleteTrack(deleteTrackId); - - // If the track we just deleted was selected, unselect it. - String selectedKey = getString(R.string.selected_track_key); - SharedPreferences preferences = getSharedPreferences( - Constants.SETTINGS_NAME, Context.MODE_PRIVATE); - if (preferences.getLong(selectedKey, -1) == deleteTrackId) { - Editor editor = preferences.edit().putLong(selectedKey, -1); - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); - } - } -} diff --git a/MyTracks/src/com/google/android/apps/mytracks/MapActivity.java b/MyTracks/src/com/google/android/apps/mytracks/MapActivity.java index 889541efb..424de7dec 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MapActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MapActivity.java @@ -22,13 +22,14 @@ import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.TrackDataHub; import com.google.android.apps.mytracks.content.TrackDataHub.ListenerDataType; import com.google.android.apps.mytracks.content.TrackDataListener; -import com.google.android.apps.mytracks.content.TracksColumns; import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.io.file.SaveActivity; import com.google.android.apps.mytracks.io.file.TrackWriterFactory.TrackFileFormat; import com.google.android.apps.mytracks.io.sendtogoogle.SendRequest; import com.google.android.apps.mytracks.io.sendtogoogle.UploadServiceChooserActivity; import com.google.android.apps.mytracks.stats.TripStatistics; +import com.google.android.apps.mytracks.util.ApiAdapterFactory; +import com.google.android.apps.mytracks.util.DialogUtils; import com.google.android.apps.mytracks.util.GeoRect; import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.PlayTrackUtils; @@ -38,10 +39,12 @@ import com.google.android.maps.MapView; import com.google.android.maps.mytracks.R; import android.app.Dialog; -import android.content.ContentUris; +import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; import android.location.Location; -import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; import android.provider.Settings; @@ -74,7 +77,8 @@ public class MapActivity extends com.google.android.maps.MapActivity implements View.OnTouchListener, View.OnClickListener, TrackDataListener { - private static final int DIALOG_INSTALL_EARTH = 0; + private static final int DIALOG_INSTALL_EARTH_ID = 0; + private static final int DIALOG_DELETE_CURRENT_ID = 1; // Saved instance state keys: // --------------------------- @@ -240,8 +244,26 @@ public class MapActivity extends com.google.android.maps.MapActivity @Override protected Dialog onCreateDialog(int id) { switch (id) { - case DIALOG_INSTALL_EARTH: + case DIALOG_INSTALL_EARTH_ID: return PlayTrackUtils.createInstallEarthDialog(this); + case DIALOG_DELETE_CURRENT_ID: + return DialogUtils.createConfirmationDialog(this, + R.string.track_list_delete_track_confirm_message, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + long trackId = dataHub.getSelectedTrackId(); + MyTracksProviderUtils.Factory.get(MapActivity.this).deleteTrack(trackId); + // If the deleted track was selected, unselect it. + String selectedTrackKey = getString(R.string.selected_track_key); + SharedPreferences sharedPreferences = getSharedPreferences( + Constants.SETTINGS_NAME, Context.MODE_PRIVATE); + if (sharedPreferences.getLong(selectedTrackKey, -1L) == trackId) { + Editor editor = sharedPreferences.edit().putLong(selectedTrackKey, -1L); + ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); + } + } + }); default: return null; } @@ -490,7 +512,7 @@ public class MapActivity extends com.google.android.maps.MapActivity PlayTrackUtils.playTrack(this, trackId); return true; } else { - showDialog(DIALOG_INSTALL_EARTH); + showDialog(DIALOG_INSTALL_EARTH_ID); return true; } case Constants.MENU_SEND_TO_GOOGLE: @@ -564,9 +586,7 @@ public class MapActivity extends com.google.android.maps.MapActivity dataHub.unloadCurrentTrack(); return true; case Constants.MENU_DELETE: - Uri uri = ContentUris.withAppendedId(TracksColumns.CONTENT_URI, trackId); - intent = new Intent(Intent.ACTION_DELETE, uri); - startActivity(intent); + showDialog(DIALOG_DELETE_CURRENT_ID); return true; default: return super.onMenuItemSelected(featureId, item); diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackList.java b/MyTracks/src/com/google/android/apps/mytracks/TrackList.java index e3886abdf..66008d043 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackList.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackList.java @@ -17,6 +17,7 @@ package com.google.android.apps.mytracks; import static com.google.android.apps.mytracks.Constants.TAG; +import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.content.TracksColumns; import com.google.android.apps.mytracks.io.file.SaveActivity; import com.google.android.apps.mytracks.io.file.TrackWriterFactory.TrackFileFormat; @@ -24,6 +25,8 @@ import com.google.android.apps.mytracks.io.sendtogoogle.SendRequest; import com.google.android.apps.mytracks.io.sendtogoogle.UploadServiceChooserActivity; import com.google.android.apps.mytracks.services.ServiceUtils; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; +import com.google.android.apps.mytracks.util.ApiAdapterFactory; +import com.google.android.apps.mytracks.util.DialogUtils; import com.google.android.apps.mytracks.util.PlayTrackUtils; import com.google.android.apps.mytracks.util.StringUtils; import com.google.android.maps.mytracks.R; @@ -31,15 +34,13 @@ import com.google.android.maps.mytracks.R; import android.app.AlertDialog; import android.app.Dialog; import android.app.ListActivity; -import android.content.ContentUris; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; import android.database.Cursor; -import android.net.Uri; import android.os.Bundle; -import android.os.Handler; import android.os.Parcelable; import android.util.Log; import android.view.ContextMenu; @@ -68,6 +69,8 @@ public class TrackList extends ListActivity private static final int DIALOG_INSTALL_EARTH_ID = 0; private static final int DIALOG_EXPORT_ALL_ID = 1; + private static final int DIALOG_DELETE_ALL_ID = 2; + private static final int DIALOG_DELETE_CURRENT_ID = 3; private int contextPosition = -1; private long trackId = -1; @@ -254,10 +257,7 @@ public class TrackList extends ListActivity startActivity(intent); return true; case Constants.MENU_DELETE: - Uri uri = ContentUris.withAppendedId(TracksColumns.CONTENT_URI, trackId); - intent = new Intent(Intent.ACTION_DELETE) - .setDataAndType(uri, TracksColumns.CONTENT_ITEMTYPE); - startActivity(intent); + showDialog(DIALOG_DELETE_CURRENT_ID); return true; default: Log.w(TAG, "Unknown menu item: " + item.getItemId() + "(" + item.getTitle() + ")"); @@ -269,8 +269,7 @@ public class TrackList extends ListActivity public void onClick(View v) { switch (v.getId()) { case R.id.tracklist_btn_delete_all: { - Handler h = new DeleteAllTracks(this, null); - h.handleMessage(null); + showDialog(DIALOG_DELETE_ALL_ID); break; } case R.id.tracklist_btn_export_all: { @@ -368,6 +367,36 @@ public class TrackList extends ListActivity .setSingleChoiceItems(choices, 0, null) .setTitle(R.string.track_list_export_all) .create(); + case DIALOG_DELETE_ALL_ID: + return DialogUtils.createConfirmationDialog(this, + R.string.track_list_delete_all_confirm_message, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + MyTracksProviderUtils.Factory.get(TrackList.this).deleteAllTracks(); + SharedPreferences sharedPreferences = getSharedPreferences( + Constants.SETTINGS_NAME, Context.MODE_PRIVATE); + Editor editor = sharedPreferences.edit(); + // TODO: Go through data manager + editor.putLong(getString(R.string.selected_track_key), -1L); + ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); + } + }); + case DIALOG_DELETE_CURRENT_ID: + return DialogUtils.createConfirmationDialog(this, + R.string.track_list_delete_track_confirm_message, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + MyTracksProviderUtils.Factory.get(TrackList.this).deleteTrack(trackId); + // If the deleted track was selected, unselect it. + String selectedTrackKey = getString(R.string.selected_track_key); + SharedPreferences sharedPreferences = getSharedPreferences( + Constants.SETTINGS_NAME, Context.MODE_PRIVATE); + if (sharedPreferences.getLong(selectedTrackKey, -1L) == trackId) { + Editor editor = sharedPreferences.edit().putLong(selectedTrackKey, -1L); + ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); + } + } + }); default: return null; }