Improve transition after deleting a track or a marker.

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