From 094c97f78d640d65737029e768d8904500398be4 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 14 Feb 2022 21:38:03 +0100 Subject: [PATCH] Share: removed PNG share pic. Fixes #1127. --- .../opentracks/data/ShareContentProvider.java | 5 -- .../opentracks/io/file/TrackFileFormat.java | 18 ---- .../exporter/SharePictureTrackExporter.java | 88 ------------------- .../opentracks/share/ShareUtils.java | 11 ++- src/main/res/layout/track_share_picture.xml | 87 ------------------ 5 files changed, 5 insertions(+), 204 deletions(-) delete mode 100644 src/main/java/de/dennisguse/opentracks/io/file/exporter/SharePictureTrackExporter.java delete mode 100644 src/main/res/layout/track_share_picture.xml diff --git a/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java b/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java index 9105a8878..fd59b5707 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java +++ b/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java @@ -66,8 +66,6 @@ public class ShareContentProvider extends CustomContentProvider { uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, TracksColumns.TABLE_NAME + "/" + TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA.getName() + "/*/*", URI_KMZ_WITH_TRACKDETAIL_AND_SENSORDATA); uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, TracksColumns.TABLE_NAME + "/" + TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES.getName() + "/*/*", URI_KMZ_WITH_TRACKDETAIL_SENSORDATA_AND_PICTURES); - - uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, TracksColumns.TABLE_NAME + "/" + TrackFileFormat.SHARE_PICTURE_PNG.getName() + "/*/*", URI_SHARE_PICTURE); } /** @@ -148,9 +146,6 @@ public class ShareContentProvider extends CustomContentProvider { case URI_KMZ_WITH_TRACKDETAIL_SENSORDATA_AND_PICTURES: return TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES; - case URI_SHARE_PICTURE: - return TrackFileFormat.SHARE_PICTURE_PNG; - default: throw new RuntimeException("Could not derive TrackFileFormat from Uri " + 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 96a0f15f3..8a52cae79 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java @@ -1,7 +1,6 @@ package de.dennisguse.opentracks.io.file; import android.content.Context; -import android.graphics.Bitmap; import java.util.Locale; @@ -10,7 +9,6 @@ import de.dennisguse.opentracks.data.ContentProviderUtils; import de.dennisguse.opentracks.io.file.exporter.GPXTrackExporter; import de.dennisguse.opentracks.io.file.exporter.KMLTrackExporter; import de.dennisguse.opentracks.io.file.exporter.KmzTrackExporter; -import de.dennisguse.opentracks.io.file.exporter.SharePictureTrackExporter; import de.dennisguse.opentracks.io.file.exporter.TrackExporter; /** @@ -102,22 +100,6 @@ public enum TrackFileFormat { public String getExtension() { return "gpx"; } - }, - - SHARE_PICTURE_PNG { - @Override - public TrackExporter createTrackExporter(Context context) { - return new SharePictureTrackExporter(context, Bitmap.CompressFormat.PNG); - } - - @Override - public String getMimeType() { - return "image/png"; - } - - public String getExtension() { - return "png"; - } }; private static final String MIME_KMZ = "application/vnd.google-earth.kmz"; diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/SharePictureTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/SharePictureTrackExporter.java deleted file mode 100644 index 292c76859..000000000 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/SharePictureTrackExporter.java +++ /dev/null @@ -1,88 +0,0 @@ -package de.dennisguse.opentracks.io.file.exporter; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; - -import androidx.annotation.NonNull; - -import java.io.OutputStream; - -import de.dennisguse.opentracks.data.models.Track; -import de.dennisguse.opentracks.databinding.TrackSharePictureBinding; -import de.dennisguse.opentracks.settings.PreferencesUtils; -import de.dennisguse.opentracks.stats.TrackStatistics; -import de.dennisguse.opentracks.util.StringUtils; - -/** - * Create a share picture for a track. - * Here a layout is inflated and converted to PNG. - *

- * TODO - * If this classes is used with non-visual context (e.g., ApplicationContext), it may not work in the future. - * API31 introduces `ncorrectContextUseViolation`, which may thrown during runtime. - * This code was tested on API30. - * Some more information: https://stackoverflow.com/questions/68539083/inflate-layout-from-applicationcontext-i-e-in-a-contentprovider/68567186#68567186 - *

- * Future plan: draw directly on a view. - */ -public class SharePictureTrackExporter implements TrackExporter { - - private static final String TAG = SharePictureTrackExporter.class.getSimpleName(); - - private final static int imageWidth = 1024; - - private final Context context; - - private final Bitmap.CompressFormat compressFormat; - - public SharePictureTrackExporter(Context context, Bitmap.CompressFormat compressFormat) { - this.context = context; - this.compressFormat = compressFormat; - } - - @Override - public boolean writeTrack(Track[] tracks, @NonNull OutputStream outputStream) { - if (tracks.length > 1) { - Log.e(TAG, "Not yet implemented."); - return false; - } - - return writeTrack(tracks[0], outputStream); - } - - @Override - public boolean writeTrack(Track track, @NonNull OutputStream outputStream) { - int imageHeight = imageWidth / 4 * 3; - - TrackSharePictureBinding viewBinding = TrackSharePictureBinding.inflate(LayoutInflater.from(context)); - viewBinding.sharePictureCategory.setText(track.getCategory()); - - boolean metricUnits = PreferencesUtils.isMetricUnits(); - TrackStatistics trackStatistics = track.getTrackStatistics(); - - viewBinding.sharePictureTotalTime.setText(StringUtils.formatElapsedTimeWithHour(track.getTrackStatistics().getTotalTime())); - viewBinding.sharePictureTotalDistance.setText(StringUtils.formatDistance(context, track.getTrackStatistics().getTotalDistance(), metricUnits)); - viewBinding.sharePictureGain.setText(StringUtils.formatAltitudeChange(context, trackStatistics.getTotalAltitudeGain(), metricUnits)); - - // prepare rendering - View view = viewBinding.getRoot(); - int widthSpec = View.MeasureSpec.makeMeasureSpec(imageWidth, View.MeasureSpec.EXACTLY); - int heightSpec = View.MeasureSpec.makeMeasureSpec(imageHeight, View.MeasureSpec.EXACTLY); - view.measure(widthSpec, heightSpec); - view.layout(0, 0, imageWidth, imageHeight); - - // draw - Canvas canvas = new Canvas(); - Bitmap bitmap = Bitmap.createBitmap(imageWidth, imageHeight, Bitmap.Config.ARGB_8888); - canvas.setBitmap(bitmap); - - view.draw(canvas); - - // store - return bitmap.compress(compressFormat, 100, outputStream); - } -} diff --git a/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java b/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java index 97729262c..8cf4a62e3 100644 --- a/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java +++ b/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java @@ -9,14 +9,12 @@ import android.util.Pair; import androidx.annotation.Nullable; import java.util.ArrayList; -import java.util.Arrays; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.ContentProviderUtils; import de.dennisguse.opentracks.data.ShareContentProvider; import de.dennisguse.opentracks.data.models.Marker; import de.dennisguse.opentracks.data.models.Track; -import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.util.FileUtils; @@ -47,6 +45,7 @@ public class ShareUtils { trackDescription = track == null ? "" : new DescriptionGenerator(context).generateTrackDescription(track, false); } + String mime = ""; ArrayList uris = new ArrayList<>(); for (Track.Id trackId : trackIds) { Track track = contentProviderUtils.getTrack(trackId); @@ -56,14 +55,14 @@ public class ShareUtils { } String trackName = FileUtils.sanitizeFileName(track.getName()); - Pair uriTrackFile = ShareContentProvider.createURI(trackId, trackName, PreferencesUtils.getExportTrackFileFormat()); - Pair uriSharePicture = ShareContentProvider.createURI(trackId, trackName, TrackFileFormat.SHARE_PICTURE_PNG); + Pair uriAndMime = ShareContentProvider.createURI(trackId, trackName, PreferencesUtils.getExportTrackFileFormat()); - uris.addAll(Arrays.asList(uriSharePicture.first, uriTrackFile.first)); + uris.add(uriAndMime.first); + mime = uriAndMime.second; } return new Intent(Intent.ACTION_SEND_MULTIPLE) - .setType("image/*") + .setType(mime) .putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris) .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) .putExtra(Intent.EXTRA_SUBJECT, context.getString(R.string.share_track_subject)) diff --git a/src/main/res/layout/track_share_picture.xml b/src/main/res/layout/track_share_picture.xml deleted file mode 100644 index ba1247876..000000000 --- a/src/main/res/layout/track_share_picture.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file