diff --git a/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java b/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java index 1a0fb0e35..6617bfd30 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java +++ b/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java @@ -89,11 +89,10 @@ public class ShareContentProvider extends CustomContentProvider { trackIdBuilder.deleteCharAt(trackIdBuilder.lastIndexOf(TRACKID_DELIMITER)); Uri uri = Uri.parse(TracksColumns.CONTENT_URI + "/" + trackFileFormat.getPreferenceId() + "/" + trackIdBuilder + "/" + Uri.encode(filename)); - String mime = getTypeMime(uri); - Log.d(TAG, "Created uri " + uri + " with MIME " + mime); + Log.d(TAG, "Created uri " + uri + " with MIME " + trackFileFormat.getMimeType()); - return new Pair<>(uri, mime); + return new Pair<>(uri, trackFileFormat.getMimeType()); } static Set parseURI(Uri uri) { @@ -126,6 +125,7 @@ public class ShareContentProvider extends CustomContentProvider { } } + @Nullable private static TrackFileFormat getTrackFileFormat(@NonNull Uri uri) { return switch (uriMatcher.match(uri)) { case URI_GPX -> TrackFileFormat.GPX; @@ -134,16 +134,10 @@ public class ShareContentProvider extends CustomContentProvider { case URI_KMZ_WITH_TRACKDETAIL_SENSORDATA_AND_PICTURES -> TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES; case URI_CSV -> TrackFileFormat.CSV; - default -> - throw new RuntimeException("Could not derive TrackFileFormat from Uri " + uri); + default -> null; }; } - @Nullable - private static String getTypeMime(@NonNull Uri uri) { - return getTrackFileFormat(uri).getMimeType(); - } - @Override public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { if (uriMatcher.match(uri) == -1) { @@ -182,9 +176,9 @@ public class ShareContentProvider extends CustomContentProvider { @Nullable @Override public String getType(@NonNull Uri uri) { - String mime = getTypeMime(uri); - if (mime != null) { - return mime; + TrackFileFormat trackFileFormat = getTrackFileFormat(uri); + if (trackFileFormat != null) { + return trackFileFormat.getMimeType(); } return super.getType(uri); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java b/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java index 2d49cd58b..60ddd3a84 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java @@ -5,7 +5,6 @@ import android.content.res.Resources; import androidx.annotation.NonNull; -import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; @@ -31,11 +30,13 @@ public enum TrackFileFormat { return new KMLTrackExporter(context, contentProviderUtils, false); } + @NonNull @Override public String getMimeType() { return "application/vnd.google-earth.kml+xml"; } + @NonNull public String getExtension() { return "kml"; } @@ -50,11 +51,13 @@ public enum TrackFileFormat { return new KMZTrackExporter(context, contentProviderUtils, exportPhotos); } + @NonNull @Override public String getMimeType() { return "application/vnd.google-earth.kmz"; } + @NonNull public String getExtension() { return "kmz"; } @@ -72,11 +75,13 @@ public enum TrackFileFormat { return new GPXTrackExporter(contentProviderUtils, context.getString(R.string.app_name)); } + @NonNull @Override public String getMimeType() { return "application/gpx+xml"; } + @NonNull public String getExtension() { return "gpx"; } @@ -88,11 +93,13 @@ public enum TrackFileFormat { return new CSVTrackExporter(contentProviderUtils); } + @NonNull @Override public String getMimeType() { return "text/csv"; } + @NonNull @Override public String getExtension() { return "csv"; @@ -115,16 +122,10 @@ public enum TrackFileFormat { return preferenceIdLabelMap; } - public static TrackFileFormat valueOfPreferenceId(final String preferenceId) { - return Arrays.stream(values()) - .filter(trackFileFormat -> trackFileFormat.getPreferenceId().equals(preferenceId)) - .findFirst() - .orElse(null); - } - /** * Returns the mime type for each format. */ + @NonNull public abstract String getMimeType(); /** @@ -137,6 +138,7 @@ public enum TrackFileFormat { /** * Returns the file extension for each format. */ + @NonNull public abstract String getExtension(); /** @@ -149,6 +151,7 @@ public enum TrackFileFormat { /** * The identifier to be stored in the preferences. */ + @NonNull public String getPreferenceId() { return preferenceId; }