diff --git a/MyTracks/src/com/google/android/apps/mytracks/ContextualActionModeCallback.java b/MyTracks/src/com/google/android/apps/mytracks/ContextualActionModeCallback.java index b71b0c530..66ca3b077 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/ContextualActionModeCallback.java +++ b/MyTracks/src/com/google/android/apps/mytracks/ContextualActionModeCallback.java @@ -22,7 +22,7 @@ package com.google.android.apps.mytracks; * @author Jimmy Shih */ public interface ContextualActionModeCallback { - + /** * Invoked when an item is selected. * @@ -31,4 +31,20 @@ public interface ContextualActionModeCallback { * @param id the id of the selected row, if available */ public boolean onClick(int itemId, int position, long id); + + /** + * True if the item in the selected row can be edited. + * + * @param position the position of the selected row + * @param id the id of the selected row + */ + public boolean canEdit(int position, long id); + + /** + * True if the item in the selected row can be deleted. + * + * @param position the position of the selected row + * @param id the id of the selected row + */ + public boolean canDelete(int position, long id); } \ No newline at end of file diff --git a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java index 566cd76ab..77aa9c91d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java @@ -17,6 +17,7 @@ package com.google.android.apps.mytracks; import com.google.android.apps.mytracks.content.MyTracksProviderUtils; +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; @@ -71,6 +72,18 @@ public class MarkerListActivity extends AbstractMyTracksActivity { public boolean onClick(int itemId, int position, long id) { return handleContextItem(itemId, id); } + + @Override + 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(); + } }; /* @@ -104,6 +117,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity { } }; + private MyTracksProviderUtils myTracksProviderUtils; private SharedPreferences sharedPreferences; private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; @@ -120,6 +134,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this); sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); trackId = getIntent().getLongExtra(EXTRA_TRACK_ID, -1L); if (trackId == -1L) { @@ -167,8 +182,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity { ApiAdapterFactory.getApiAdapter() .configureListViewContextualMenu(this, listView, contextualActionModeCallback); - final long firstWaypointId = MyTracksProviderUtils.Factory.get(this) - .getFirstWaypointId(trackId); + final long firstWaypointId = myTracksProviderUtils.getFirstWaypointId(trackId); getSupportLoaderManager().initLoader(0, null, new LoaderCallbacks() { @Override public Loader onCreateLoader(int arg0, Bundle arg1) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java index e50208242..9e285d95a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java @@ -128,11 +128,32 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele public boolean onClick(int itemId, int position, long id) { return handleContextItem(itemId, position); } + + @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(); + } + + @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; + } + } }; + private MyTracksProviderUtils myTracksProviderUtils; private SharedPreferences sharedPreferences; private TrackRecordingServiceConnection trackRecordingServiceConnection; - private MyTracksProviderUtils myTracksProviderUtils; private SearchEngine searchEngine; private SearchRecentSuggestions searchRecentSuggestions; private MyTracksLocationManager myTracksLocationManager; @@ -151,9 +172,9 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele super.onCreate(savedInstanceState); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); + myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this); sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); trackRecordingServiceConnection = new TrackRecordingServiceConnection(this, null); - myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this); searchEngine = new SearchEngine(myTracksProviderUtils); searchRecentSuggestions = SearchEngineProvider.newHelper(this); myTracksLocationManager = new MyTracksLocationManager(this); diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 16ba868d1..fe4662c7c 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -16,6 +16,7 @@ package com.google.android.apps.mytracks; +import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.TrackDataHub; import com.google.android.apps.mytracks.content.TrackDataListener; @@ -194,6 +195,17 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac public boolean onClick(int itemId, int position, long id) { return handleContextItem(itemId, id); } + + @Override + 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; + } }; private final OnClickListener recordListener = new OnClickListener() { @@ -316,6 +328,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac }; // The following are set in onCreate + private MyTracksProviderUtils myTracksProviderUtils; private SharedPreferences sharedPreferences; private TrackRecordingServiceConnection trackRecordingServiceConnection; private TrackController trackController; @@ -347,6 +360,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); setContentView(R.layout.track_list); + myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this); sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); trackRecordingServiceConnection = new TrackRecordingServiceConnection( diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java b/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java index 0720eec4c..cc1f285e5 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java @@ -73,8 +73,12 @@ public class Api11Adapter extends Api10Adapter { } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - // Return false to indicate no change. - return false; + menu.findItem(R.id.list_context_menu_edit) + .setVisible(contextualActionModeCallback.canEdit(position, id)); + menu.findItem(R.id.list_context_menu_delete) + .setVisible(contextualActionModeCallback.canDelete(position, id)); + // Return true to indicate change + return true; } @Override public void onDestroyActionMode(ActionMode mode) {