From d9dfa6d74609c8f1ed294564a5a5484a79362b3f Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sat, 13 Jun 2020 17:52:50 +0200 Subject: [PATCH] Dashboard API: add data transfer as GPX and removed unnecessary IntentChooser. --- src/main/AndroidManifest.xml | 10 ++- .../opentracks/ShowOnMapProxyActivity.java | 69 +++++++++++++++++++ .../opentracks/TrackListActivity.java | 3 +- .../opentracks/TrackRecordedActivity.java | 3 +- .../opentracks/TrackRecordingActivity.java | 3 +- .../opentracks/util/IntentDashboardUtils.java | 17 ++++- .../opentracks/util/IntentUtils.java | 56 --------------- src/main/res/values/strings.xml | 3 +- 8 files changed, 100 insertions(+), 64 deletions(-) create mode 100644 src/main/java/de/dennisguse/opentracks/ShowOnMapProxyActivity.java diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 157833e15..7bc0d1089 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -111,8 +111,14 @@ limitations under the License. - - + + + + + + + + diff --git a/src/main/java/de/dennisguse/opentracks/ShowOnMapProxyActivity.java b/src/main/java/de/dennisguse/opentracks/ShowOnMapProxyActivity.java new file mode 100644 index 000000000..2037960bc --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/ShowOnMapProxyActivity.java @@ -0,0 +1,69 @@ +package de.dennisguse.opentracks; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.util.Pair; + +import androidx.appcompat.app.AppCompatActivity; + +import de.dennisguse.opentracks.content.data.TrackPointsColumns; +import de.dennisguse.opentracks.content.provider.ShareContentProvider; +import de.dennisguse.opentracks.io.file.TrackFileFormat; +import de.dennisguse.opentracks.util.IntentDashboardUtils; + +/** + * Used to convert IntentDashboardUtils.startDashboard-requests into {@link TrackFileFormat}. + */ +public abstract class ShowOnMapProxyActivity extends AppCompatActivity { + + private TrackFileFormat trackFileFormat; + + protected ShowOnMapProxyActivity(TrackFileFormat trackFileFormat) { + this.trackFileFormat = trackFileFormat; + } + + protected void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + long[] trackIds = IntentDashboardUtils.extractTrackIdsFromIntent(getIntent()); + + showTrackTrackfileFormat(this, trackFileFormat, trackIds); + + finish(); + } + + /** + * Send intent to show tracks on a map (needs an another app) as KMZ. + * + * @param context the context + * @param trackIds the track ids + */ + private static void showTrackTrackfileFormat(Context context, TrackFileFormat trackFileFormat, long[] trackIds) { + if (trackIds.length == 0) { + return; + } + + Intent intent = new Intent(android.content.Intent.ACTION_VIEW); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(TrackPointsColumns.TRACKID, trackIds[0]); + Pair uriAndMime = ShareContentProvider.createURI(trackIds, "SharingTrack", trackFileFormat); + intent.setDataAndType(uriAndMime.first, uriAndMime.second); + + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + + context.startActivity(Intent.createChooser(intent, context.getString(R.string.open_track_as_trackfileformat, trackFileFormat.getExtension()))); + } + + public static class KMZ extends ShowOnMapProxyActivity { + public KMZ() { + super(TrackFileFormat.KMZ_WITH_TRACKDETAIL); + } + } + + public static class GPX extends ShowOnMapProxyActivity { + public GPX() { + super(TrackFileFormat.GPX); + } + } +} \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 2d3c26680..4faf6b56f 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -56,6 +56,7 @@ import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; import de.dennisguse.opentracks.services.TrackRecordingServiceInterface; import de.dennisguse.opentracks.settings.SettingsActivity; import de.dennisguse.opentracks.util.ActivityUtils; +import de.dennisguse.opentracks.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.ListItemUtils; import de.dennisguse.opentracks.util.PreferencesUtils; @@ -477,7 +478,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe Intent intent; switch (itemId) { case R.id.list_context_menu_show_on_map: - IntentUtils.showTrackOnMapDashboard(this, trackIds); + IntentDashboardUtils.startDashboard(this, trackIds); return true; case R.id.list_context_menu_share: intent = IntentUtils.newShareFileIntent(this, trackIds); diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java index dc5fc8af6..0f3ff923c 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java @@ -39,6 +39,7 @@ import de.dennisguse.opentracks.fragments.ConfirmDeleteDialogFragment; import de.dennisguse.opentracks.fragments.StatisticsRecordedFragment; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; import de.dennisguse.opentracks.settings.SettingsActivity; +import de.dennisguse.opentracks.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.TrackIconUtils; @@ -186,7 +187,7 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos startActivity(intent); return true; case R.id.track_detail_menu_show_on_map: - IntentUtils.showTrackOnMapDashboard(this, new long[]{trackId}); + IntentDashboardUtils.startDashboard(this, trackId); return true; case R.id.track_detail_markers: intent = IntentUtils.newIntent(this, MarkerListActivity.class) diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index cb1fcc2dd..23e1aabf5 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -29,6 +29,7 @@ import de.dennisguse.opentracks.fragments.StatisticsRecordingFragment; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; import de.dennisguse.opentracks.services.TrackRecordingServiceInterface; import de.dennisguse.opentracks.settings.SettingsActivity; +import de.dennisguse.opentracks.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.TrackIconUtils; @@ -338,7 +339,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc startActivity(intent); return true; case R.id.track_detail_menu_show_on_map: - IntentUtils.showTrackOnMapDashboard(this, new long[]{trackId}); + IntentDashboardUtils.startDashboard(this, trackId); return true; case R.id.track_detail_markers: intent = IntentUtils.newIntent(this, MarkerListActivity.class) diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java index 3283db399..b5ed5c144 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java @@ -9,7 +9,6 @@ import androidx.annotation.NonNull; import java.util.ArrayList; -import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.content.data.TrackPointsColumns; import de.dennisguse.opentracks.content.data.TracksColumns; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; @@ -33,7 +32,17 @@ public class IntentDashboardUtils { private IntentDashboardUtils() { } + /** + * Send intent to show tracks on a map (needs an another app) as resource URIs. + * + * @param context the context + * @param trackIds the track ids + */ public static void startDashboard(Context context, long[] trackIds) { + if (trackIds.length == 0) { + return; + } + ArrayList uris = new ArrayList<>(); String trackIdList = ContentProviderUtils.formatIdListForUri(trackIds); @@ -52,7 +61,11 @@ public class IntentDashboardUtils { clipData.addItem(new ClipData.Item(uris.get(TRACKPOINTS_URI_INDEX))); intent.setClipData(clipData); - context.startActivity(Intent.createChooser(intent, context.getString(R.string.open_track_using_dashboard))); + context.startActivity(intent); + } + + public static void startDashboard(Context context, long trackId) { + startDashboard(context, new long[]{trackId}); } public static long[] extractTrackIdsFromIntent(@NonNull Intent intent) { diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java index a687bf12f..38c7930c9 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java @@ -19,12 +19,10 @@ package de.dennisguse.opentracks.util; import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.util.Pair; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.FileProvider; import java.io.File; @@ -35,11 +33,9 @@ import java.util.Date; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.content.DescriptionGenerator; import de.dennisguse.opentracks.content.data.Track; -import de.dennisguse.opentracks.content.data.TrackPointsColumns; import de.dennisguse.opentracks.content.data.Waypoint; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.content.provider.ShareContentProvider; -import de.dennisguse.opentracks.io.file.TrackFileFormat; /** * Utilities for creating intents. @@ -52,8 +48,6 @@ public class IntentUtils { private static final String JPEG_EXTENSION = "jpeg"; - private static final TrackFileFormat SHOWONMAP_TRACKFILEFORMAT = TrackFileFormat.KMZ_WITH_TRACKDETAIL; - private IntentUtils() { } @@ -160,41 +154,6 @@ public class IntentUtils { } - /** - * Send intent to show tracks on a map (needs an another app) as resource URIs. - * - * @param context the context - * @param trackIds the track ids - */ - public static void showTrackOnMapDashboard(Context context, long[] trackIds) { - if (trackIds.length == 0) { - return; - } - - IntentDashboardUtils.startDashboard(context, trackIds); - } - - /** - * Send intent to show tracks on a map (needs an another app) as KMZ. - * - * @param context the context - * @param trackIds the track ids - */ - public static void showTrackOnMapKMZ(Context context, long[] trackIds) { - if (trackIds.length == 0) { - return; - } - - Intent intent = new Intent(android.content.Intent.ACTION_VIEW); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra(TrackPointsColumns.TRACKID, trackIds[0]); - Pair uriAndMime = ShareContentProvider.createURI(trackIds, "SharingTrack", SHOWONMAP_TRACKFILEFORMAT); - intent.setDataAndType(uriAndMime.first, uriAndMime.second); - - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - - context.startActivity(Intent.createChooser(intent, context.getString(R.string.open_track_as_trackfileformat, SHOWONMAP_TRACKFILEFORMAT.getExtension()))); - } /** * Sends a take picture request to the camera app. @@ -215,19 +174,4 @@ public class IntentUtils { .putExtra(MediaStore.EXTRA_OUTPUT, photoUri); return new Pair<>(intent, photoUri); } - - /** - * Used to convert showTrackOnMapDashboard-requests to showTrackOnMapKMZ. - */ - public static class ShowOnMapProxyActivity extends AppCompatActivity { - - protected void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - long[] trackIds = IntentDashboardUtils.extractTrackIdsFromIntent(getIntent()); - - showTrackOnMapKMZ(this, trackIds); - - finish(); - } - } } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 28acaafaf..2f2980fb9 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -96,7 +96,8 @@ limitations under the License. Open using OpenTracks-Dashboard - Open as file + Open as KMZ + Open as GPX Open as %1$s