From 70b5d799a241882871f58eb10890e2683b6e6bb5 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Fri, 23 Aug 2019 07:01:14 +0200 Subject: [PATCH] Share marker works everywhere and share track from TrackDetailActivity. --- .../opentracks/MarkerListActivity.java | 7 +++---- .../opentracks/SearchListActivity.java | 2 +- .../opentracks/TrackDetailActivity.java | 3 +-- .../fragments/MarkerDetailFragment.java | 4 ++-- .../opentracks/util/IntentUtils.java | 18 ++++++++---------- 5 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java b/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java index fe5fbe7d7..37f5439f5 100644 --- a/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java @@ -42,6 +42,7 @@ import androidx.loader.content.Loader; import de.dennisguse.opentracks.content.ContentProviderUtils; import de.dennisguse.opentracks.content.Track; +import de.dennisguse.opentracks.content.Waypoint; import de.dennisguse.opentracks.content.Waypoint.WaypointType; import de.dennisguse.opentracks.content.WaypointsColumns; import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment; @@ -49,7 +50,6 @@ import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment.DeleteMarke import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.ListItemUtils; import de.dennisguse.opentracks.util.PreferencesUtils; -import de.dennisguse.opentracks.R; /** * Activity to show a list of markers in a track. @@ -284,9 +284,8 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker switch (itemId) { case R.id.list_context_menu_show_on_map: if (markerIds.length == 1) { - intent = IntentUtils.newIntent(this, TrackDetailActivity.class) - .putExtra(TrackDetailActivity.EXTRA_MARKER_ID, markerIds[0]); - //TODO Use IntentUtils.newShowOnMapIntent() + Waypoint marker = contentProviderUtils.getWaypoint(markerIds[0]); + intent = IntentUtils.newShowCoordinateOnMapIntent(marker); startActivity(intent); } return true; diff --git a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java index de6f127e5..89129d5a6 100644 --- a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java @@ -316,7 +316,7 @@ public class SearchListActivity extends AbstractTrackActivity implements DeleteM Log.e(TAG, "Not implemented"); return true; case R.id.list_context_menu_show_on_map: - intent = IntentUtils.newShowOnMapIntent((double) item.get(MARKER_LATITUDE_FIELD), (double) item.get(MARKER_LONGITUDE_FIELD), item.get(NAME_FIELD) + ""); + intent = IntentUtils.newShowCoordinateOnMapIntent((double) item.get(MARKER_LATITUDE_FIELD), (double) item.get(MARKER_LONGITUDE_FIELD), item.get(NAME_FIELD) + ""); startActivity(intent); return true; case R.id.list_context_menu_edit: diff --git a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java index 8ac12c497..229e86146 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java @@ -306,8 +306,7 @@ public class TrackDetailActivity extends AbstractTrackActivity implements Choose shareMenuItem = menu.findItem(R.id.track_detail_share); ShareActionProvider shareActionProvider = (ShareActionProvider) shareMenuItem.getActionProvider(); - //TODO: Share the actual track when track is finished? How to get the file path or create a new file? - shareActionProvider.setShareIntent(IntentUtils.newShareFileIntent(this, trackId, "", TrackFileFormat.KML)); + shareActionProvider.setShareIntent(IntentUtils.newShareFileIntent(this, trackId, TrackFileFormat.KML)); voiceFrequencyMenuItem = menu.findItem(R.id.track_detail_voice_frequency); splitFrequencyMenuItem = menu.findItem(R.id.track_detail_split_frequency); diff --git a/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java index 44c449924..91f408602 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java @@ -39,6 +39,7 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import de.dennisguse.opentracks.MarkerEditActivity; +import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.content.ContentProviderUtils; import de.dennisguse.opentracks.content.Track; import de.dennisguse.opentracks.content.Waypoint; @@ -48,7 +49,6 @@ import de.dennisguse.opentracks.util.ListItemUtils; import de.dennisguse.opentracks.util.StatsUtils; import de.dennisguse.opentracks.util.StringUtils; import de.dennisguse.opentracks.util.TrackIconUtils; -import de.dennisguse.opentracks.R; /** * A fragment to show marker details. @@ -190,7 +190,7 @@ public class MarkerDetailFragment extends Fragment { Intent intent; switch (item.getItemId()) { case R.id.marker_detail_show_on_map: - intent = IntentUtils.newShowOnMapIntent(waypoint); + intent = IntentUtils.newShowCoordinateOnMapIntent(waypoint); startActivity(intent); return true; case R.id.marker_detail_edit: diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java index 6ef60e52d..f4cd5a733 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java @@ -20,11 +20,10 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; -import java.io.File; - import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.content.ContentProviderUtils; import de.dennisguse.opentracks.content.DescriptionGeneratorImpl; +import de.dennisguse.opentracks.content.ShareContentProvider; import de.dennisguse.opentracks.content.Track; import de.dennisguse.opentracks.content.Waypoint; import de.dennisguse.opentracks.io.file.TrackFileFormat; @@ -55,26 +54,25 @@ public class IntentUtils { * * @param context the context * @param trackId the track id - * @param filePath the file path * @param trackFileFormat the track file format */ - public static Intent newShareFileIntent(Context context, long trackId, String filePath, TrackFileFormat trackFileFormat) { + public static Intent newShareFileIntent(Context context, long trackId, TrackFileFormat trackFileFormat) { Track track = ContentProviderUtils.Factory.get(context).getTrack(trackId); String trackDescription = track == null ? "" : new DescriptionGeneratorImpl(context).generateTrackDescription(track, false); return new Intent(Intent.ACTION_SEND) - .putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(filePath))) + .putExtra(Intent.EXTRA_STREAM, ShareContentProvider.createURI(new long[]{trackId})) .putExtra(Intent.EXTRA_SUBJECT, context.getString(R.string.share_track_subject)) .putExtra(Intent.EXTRA_TEXT, context.getString(R.string.share_track_share_file_body, trackDescription)) - .putExtra(context.getString(R.string.track_id_broadcast_extra), trackId) - .setType(trackFileFormat.getMimeType()); + .setType(trackFileFormat.getMimeType()) + .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } - public static Intent newShowOnMapIntent(Waypoint waypoint) { - return newShowOnMapIntent(waypoint.getLocation().getLatitude(), waypoint.getLocation().getLongitude(), waypoint.getName()); + public static Intent newShowCoordinateOnMapIntent(Waypoint waypoint) { + return newShowCoordinateOnMapIntent(waypoint.getLocation().getLatitude(), waypoint.getLocation().getLongitude(), waypoint.getName()); } - public static Intent newShowOnMapIntent(double latitude, double longitude, String label) { + public static Intent newShowCoordinateOnMapIntent(double latitude, double longitude, String label) { //SEE https://developer.android.com/guide/components/intents-common.html#Maps Intent intent = new Intent(Intent.ACTION_VIEW); String uri = "geo:0,0?q=" + latitude + "," + longitude;