diff --git a/MyTracks/src/com/google/android/apps/mytracks/MarkerDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/MarkerDetailActivity.java index 46d3f1353..397043fa1 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MarkerDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MarkerDetailActivity.java @@ -21,6 +21,7 @@ import com.google.android.apps.mytracks.content.Track; 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.util.IntentUtils; import com.google.android.apps.mytracks.util.StatsUtils; import com.google.android.maps.mytracks.R; @@ -35,10 +36,11 @@ import android.widget.TextView; /** * An activity to display marker detail info. - * + * * @author Leif Hendrik Wilden */ -public class MarkerDetailActivity extends AbstractMyTracksActivity { +public class MarkerDetailActivity extends AbstractMyTracksActivity + implements DeleteOneMarkerCaller { public static final String EXTRA_MARKER_ID = "marker_id"; private static final String TAG = MarkerDetailActivity.class.getSimpleName(); @@ -87,8 +89,8 @@ public class MarkerDetailActivity extends AbstractMyTracksActivity { statisticsSection.setVisibility(View.GONE); TextView markerType = (TextView) findViewById(R.id.marker_detail_waypoint_marker_type); - markerType.setText(getString( - R.string.marker_detail_waypoint_marker_type, waypoint.getCategory())); + markerType.setText( + getString(R.string.marker_detail_waypoint_marker_type, waypoint.getCategory())); TextView description = (TextView) findViewById(R.id.marker_detail_waypoint_description); description.setText(getString(R.string.generic_description_line, waypoint.getDescription())); } else { @@ -98,14 +100,14 @@ public class MarkerDetailActivity extends AbstractMyTracksActivity { StatsUtils.setLocationValues(this, waypoint.getLocation(), false); } } - + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.marker_detail, menu); - + Track track = myTracksProviderUtils.getTrack(waypoint.getTrackId()); menu.findItem(R.id.marker_detail_edit).setVisible(!track.isSharedWithMe()); - menu.findItem(R.id.marker_detail_delete).setVisible(!track.isSharedWithMe()); + menu.findItem(R.id.marker_detail_delete).setVisible(!track.isSharedWithMe()); return true; } @@ -116,7 +118,7 @@ public class MarkerDetailActivity extends AbstractMyTracksActivity { startActivity(intent); finish(); } - + @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent; @@ -140,4 +142,14 @@ public class MarkerDetailActivity extends AbstractMyTracksActivity { return super.onOptionsItemSelected(item); } } + + @Override + public void onMarkerDeleted() { + runOnUiThread(new Runnable() { + @Override + public void run() { + finish(); + } + }); + } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java index b5da7a864..882cbb1cb 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java @@ -21,6 +21,7 @@ import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.Waypoint.WaypointType; import com.google.android.apps.mytracks.content.WaypointsColumns; import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment; +import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment.DeleteOneMarkerCaller; import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.ListItemUtils; @@ -55,7 +56,7 @@ import android.widget.ListView; * * @author Leif Hendrik Wilden */ -public class MarkerListActivity extends AbstractMyTracksActivity { +public class MarkerListActivity extends AbstractMyTracksActivity implements DeleteOneMarkerCaller { public static final String EXTRA_TRACK_ID = "track_id"; @@ -74,16 +75,16 @@ public class MarkerListActivity extends AbstractMyTracksActivity { } @Override - public boolean canEdit(int position, long id) { - Track track = myTracksProviderUtils.getTrack(trackId); - return !track.isSharedWithMe(); - } + public boolean canEdit(int position, long id) { + Track track = myTracksProviderUtils.getTrack(trackId); + return !track.isSharedWithMe(); + } @Override - public boolean canDelete(int poistion, long id) { - Track track = myTracksProviderUtils.getTrack(trackId); - return !track.isSharedWithMe(); - } + public boolean canDelete(int poistion, long id) { + Track track = myTracksProviderUtils.getTrack(trackId); + return !track.isSharedWithMe(); + } }; /* @@ -314,4 +315,9 @@ public class MarkerListActivity extends AbstractMyTracksActivity { } return super.onKeyUp(keyCode, event); } + + @Override + public void onMarkerDeleted() { + // Do nothing + } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java index b62ff45b6..5a251621e 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java @@ -25,6 +25,7 @@ import com.google.android.apps.mytracks.content.Track; 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.services.MyTracksLocationManager; @@ -73,7 +74,8 @@ import java.util.SortedSet; * * @author Rodrigo Damazio */ -public class SearchListActivity extends AbstractMyTracksActivity implements DeleteOneTrackCaller { +public class SearchListActivity extends AbstractMyTracksActivity + implements DeleteOneTrackCaller, DeleteOneMarkerCaller { private static final String TAG = SearchListActivity.class.getSimpleName(); @@ -130,25 +132,25 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele } @Override - public boolean canEdit(int position, long id) { - Map item = arrayAdapter.getItem(position); - Long trackId = (Long) item.get(TRACK_ID_FIELD); - Track track = myTracksProviderUtils.getTrack(trackId); - return !track.isSharedWithMe(); - } + public boolean canEdit(int position, long id) { + Map item = arrayAdapter.getItem(position); + Long trackId = (Long) item.get(TRACK_ID_FIELD); + Track track = myTracksProviderUtils.getTrack(trackId); + return !track.isSharedWithMe(); + } @Override - public boolean canDelete(int position, long id) { - Map item = arrayAdapter.getItem(position); - Long trackId = (Long) item.get(TRACK_ID_FIELD); - Long markerId = (Long) item.get(MARKER_ID_FIELD); - if (markerId != null) { - Track track = myTracksProviderUtils.getTrack(trackId); - return !track.isSharedWithMe(); - } else { - return true; - } - } + public boolean canDelete(int position, long id) { + Map item = arrayAdapter.getItem(position); + Long trackId = (Long) item.get(TRACK_ID_FIELD); + Long markerId = (Long) item.get(MARKER_ID_FIELD); + if (markerId != null) { + Track track = myTracksProviderUtils.getTrack(trackId); + return !track.isSharedWithMe(); + } else { + return true; + } + } }; private MyTracksProviderUtils myTracksProviderUtils; @@ -245,7 +247,7 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele super.onResume(); arrayAdapter.notifyDataSetChanged(); } - + @Override protected void onStop() { super.onStop(); @@ -292,7 +294,7 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.list_context_menu, menu); - + Map item = arrayAdapter.getItem(((AdapterContextMenuInfo) menuInfo).position); Long trackId = (Long) item.get(TRACK_ID_FIELD); Long markerId = (Long) item.get(MARKER_ID_FIELD); @@ -516,4 +518,24 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele public TrackRecordingServiceConnection getTrackRecordingServiceConnection() { return trackRecordingServiceConnection; } + + @Override + public void onTrackDeleted() { + runOnUiThread(new Runnable() { + @Override + public void run() { + handleIntent(getIntent()); + } + }); + } + + @Override + public void onMarkerDeleted() { + runOnUiThread(new Runnable() { + @Override + public void run() { + handleIntent(getIntent()); + } + }); + } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index c9aea9044..70accd189 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -77,7 +77,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del private static final String TAG = TrackDetailActivity.class.getSimpleName(); private static final String CURRENT_TAB_TAG_KEY = "current_tab_tag_key"; - + // The following are set in onCreate private MyTracksProviderUtils myTracksProviderUtils; private SharedPreferences sharedPreferences; @@ -230,7 +230,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del protected void onResume() { super.onResume(); trackDataHub.loadTrack(trackId); - + // Update UI boolean isRecording = trackId == recordingTrackId; updateMenuItems(isRecording, recordingTrackPaused); @@ -294,13 +294,13 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del .setTitle(getString(R.string.menu_save_format, fileTypes[2])); menu.findItem(R.id.track_detail_save_tcx) .setTitle(getString(R.string.menu_save_format, fileTypes[3])); - + Track track = myTracksProviderUtils.getTrack(trackId); menu.findItem(R.id.track_detail_edit).setVisible(!track.isSharedWithMe()); shareDriveMenuItem = menu.findItem(R.id.track_detail_share_drive); shareDriveMenuItem.setEnabled(!track.isSharedWithMe()); shareDriveMenuItem.setVisible(!track.isSharedWithMe()); - + insertMarkerMenuItem = menu.findItem(R.id.track_detail_insert_marker); playMenuItem = menu.findItem(R.id.track_detail_play); shareMenuItem = menu.findItem(R.id.track_detail_share); @@ -349,7 +349,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del default: } } - + @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent; @@ -460,6 +460,16 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del return trackRecordingServiceConnection; } + @Override + public void onTrackDeleted() { + runOnUiThread(new Runnable() { + @Override + public void run() { + finish(); + } + }); + } + /** * Gets the {@link TrackDataHub}. */ diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 866a16e43..8c8c30c7d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -97,7 +97,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME, TracksColumns.DESCRIPTION, TracksColumns.CATEGORY, TracksColumns.STARTTIME, TracksColumns.TOTALDISTANCE, TracksColumns.TOTALTIME, TracksColumns.ICON, - TracksColumns.SHAREDWITHME}; + TracksColumns.SHAREDWITHME }; // Callback when the trackRecordingServiceConnection binding changes. private final Runnable bindChangedCallback = new Runnable() { @@ -167,10 +167,9 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac R.string.recording_track_paused_key, PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT); } - if (key == null || key.equals(PreferencesUtils.getKey( - TrackListActivity.this, R.string.drive_sync_key))) { - driveSync = PreferencesUtils.getBoolean(TrackListActivity.this, - R.string.drive_sync_key, + if (key == null || key.equals( + PreferencesUtils.getKey(TrackListActivity.this, R.string.drive_sync_key))) { + driveSync = PreferencesUtils.getBoolean(TrackListActivity.this, R.string.drive_sync_key, PreferencesUtils.DRIVE_SYNC_DEFAULT); } if (key != null) { @@ -197,15 +196,15 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac } @Override - public boolean canEdit(int position, long id) { - Track track = myTracksProviderUtils.getTrack(id); - return !track.isSharedWithMe(); - } + public boolean canEdit(int position, long id) { + Track track = myTracksProviderUtils.getTrack(id); + return !track.isSharedWithMe(); + } @Override - public boolean canDelete(int position, long id) { - return true; - } + public boolean canDelete(int position, long id) { + return true; + } }; private final OnClickListener recordListener = new OnClickListener() { @@ -341,7 +340,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; private boolean recordingTrackPaused = PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT; private boolean driveSync = PreferencesUtils.DRIVE_SYNC_DEFAULT; - + // Menu items private MenuItem searchMenuItem; private MenuItem startGpsMenuItem; @@ -379,7 +378,8 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac startActivity(intent); } }); - sectionResourceCursorAdapter = new SectionResourceCursorAdapter(this, R.layout.list_item, null, 0) { + sectionResourceCursorAdapter = new SectionResourceCursorAdapter( + this, R.layout.list_item, null, 0) { @Override public void bindView(View view, Context context, Cursor cursor) { int idIndex = cursor.getColumnIndex(TracksColumns._ID); @@ -465,7 +465,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac sectionResourceCursorAdapter.notifyDataSetChanged(); trackController.update(isRecording, recordingTrackPaused); } - + @Override protected void onPause() { super.onPause(); @@ -531,7 +531,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac saveAllMenuItem = menu.findItem(R.id.track_list_save_all); deleteAllMenuItem = menu.findItem(R.id.track_list_delete_all); syncNowMenuItem = menu.findItem(R.id.track_list_sync_now); - + ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem); updateMenuItems(recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT); return true; @@ -634,6 +634,11 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac return trackRecordingServiceConnection; } + @Override + public void onTrackDeleted() { + // Do nothing + } + /** * Shows start up dialogs. */ @@ -658,7 +663,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac * doesn't show through. */ findViewById(R.id.track_list_empty_view).setVisibility(View.VISIBLE); - + checkGooglePlayServices(); } } @@ -668,7 +673,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac if (code != ConnectionResult.SUCCESS) { Dialog dialog = GooglePlayServicesUtil.getErrorDialog( code, this, GOOGLE_PLAY_SERVICES_REQUEST_CODE, new DialogInterface.OnCancelListener() { - + @Override public void onCancel(DialogInterface dialogInterface) { finish(); diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneMarkerDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneMarkerDialogFragment.java index b8226bfa3..e6db258bb 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneMarkerDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneMarkerDialogFragment.java @@ -16,23 +16,21 @@ package com.google.android.apps.mytracks.fragments; -import com.google.android.apps.mytracks.MarkerListActivity; import com.google.android.apps.mytracks.content.DescriptionGeneratorImpl; import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.util.DialogUtils; -import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.maps.mytracks.R; +import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; -import android.content.Intent; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; /** * A DialogFragment to delete one marker. - * + * * @author Jimmy Shih */ public class DeleteOneMarkerDialogFragment extends DialogFragment { @@ -41,6 +39,19 @@ public class DeleteOneMarkerDialogFragment extends DialogFragment { private static final String KEY_MARKER_ID = "markerId"; private static final String KEY_TRACK_ID = "trackId"; + /** + * Interface for caller of this dialog fragment. + * + * @author Jimmy Shih + */ + public interface DeleteOneMarkerCaller { + + /** + * Called when a marker is deleted. + */ + public void onMarkerDeleted(); + } + public static DeleteOneMarkerDialogFragment newInstance(long markerId, long trackId) { Bundle bundle = new Bundle(); bundle.putLong(KEY_MARKER_ID, markerId); @@ -51,28 +62,35 @@ public class DeleteOneMarkerDialogFragment extends DialogFragment { return deleteOneMarkerDialogFragment; } - private FragmentActivity activity; - + private FragmentActivity fragmentActivity; + private DeleteOneMarkerCaller caller; + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + caller = (DeleteOneMarkerCaller) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + " must implement DeleteOneMarkerCaller"); + } + } + @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - activity = getActivity(); - return DialogUtils.createConfirmationDialog(activity, + fragmentActivity = getActivity(); + return DialogUtils.createConfirmationDialog(fragmentActivity, R.string.marker_delete_one_marker_confirm_message, new DialogInterface.OnClickListener() { - @Override + @Override public void onClick(DialogInterface dialog, int which) { new Thread(new Runnable() { - @Override + @Override public void run() { - MyTracksProviderUtils.Factory.get(activity).deleteWaypoint( + MyTracksProviderUtils.Factory.get(fragmentActivity).deleteWaypoint( getArguments().getLong(KEY_MARKER_ID), - new DescriptionGeneratorImpl(activity)); + new DescriptionGeneratorImpl(fragmentActivity)); + caller.onMarkerDeleted(); } }).start(); - Intent intent = IntentUtils.newIntent(activity, MarkerListActivity.class) - .putExtra(MarkerListActivity.EXTRA_TRACK_ID, getArguments().getLong(KEY_TRACK_ID)); - startActivity(intent); - // Close the activity since its content can change after delete. - activity.finish(); } }); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java index fb5b76bfb..c049b6f46 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java @@ -16,20 +16,16 @@ package com.google.android.apps.mytracks.fragments; -import com.google.android.apps.mytracks.TrackListActivity; 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.IntentUtils; 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.Context; import android.content.DialogInterface; -import android.content.Intent; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; @@ -50,7 +46,16 @@ public class DeleteOneTrackDialogFragment extends DialogFragment { * @author Jimmy Shih */ public interface DeleteOneTrackCaller { + + /** + * Gets the track recording service connection. + */ public TrackRecordingServiceConnection getTrackRecordingServiceConnection(); + + /** + * Called when a track is deleted. + */ + public void onTrackDeleted(); } public static DeleteOneTrackDialogFragment newInstance(long trackId) { @@ -62,42 +67,39 @@ public class DeleteOneTrackDialogFragment extends DialogFragment { return deleteOneTrackDialogFragment; } - private FragmentActivity activity; + private FragmentActivity fragmentActivity; private DeleteOneTrackCaller caller; @Override - public void onAttach(Activity anActivity) { - super.onAttach(anActivity); + public void onAttach(Activity activity) { + super.onAttach(activity); try { - caller = (DeleteOneTrackCaller) anActivity; + caller = (DeleteOneTrackCaller) activity; } catch (ClassCastException e) { - throw new ClassCastException(anActivity.toString() + " must implement DeleteOneTrackCaller"); + throw new ClassCastException(activity.toString() + " must implement DeleteOneTrackCaller"); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - activity = getActivity(); - return DialogUtils.createConfirmationDialog(activity, + 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); - final Context context = activity; - if (trackId == PreferencesUtils.getLong(context, R.string.recording_track_id_key)) { + if (trackId + == PreferencesUtils.getLong(fragmentActivity, R.string.recording_track_id_key)) { TrackRecordingServiceConnectionUtils.stopRecording( - context, caller.getTrackRecordingServiceConnection(), false); + fragmentActivity, caller.getTrackRecordingServiceConnection(), false); } new Thread(new Runnable() { - @Override + @Override public void run() { - MyTracksProviderUtils.Factory.get(context).deleteTrack(trackId); + MyTracksProviderUtils.Factory.get(fragmentActivity).deleteTrack(trackId); + caller.onTrackDeleted(); } }).start(); - Intent intent = IntentUtils.newIntent(context, TrackListActivity.class); - startActivity(intent); - // Close the activity since its content can change after delete - activity.finish(); } }); }