+ * 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(PreferencesUtils.getSharedPreferences(context), context);
+ 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.formatAltitude(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/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java
index 8911f1929..3cf9f6f8a 100644
--- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java
+++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java
@@ -330,7 +330,12 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
private void setExportTrackFileFormatOptions() {
- final TrackFileFormat[] trackFileFormats = {TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES, TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA, TrackFileFormat.KML_WITH_TRACKDETAIL_AND_SENSORDATA, TrackFileFormat.GPX};
+ final TrackFileFormat[] trackFileFormats = {
+ TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES,
+ TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA,
+ TrackFileFormat.KML_WITH_TRACKDETAIL_AND_SENSORDATA,
+ TrackFileFormat.GPX
+ };
String[] entries = new String[trackFileFormats.length];
String[] entryValues = new String[trackFileFormats.length];
diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java
index 6775446fb..204a1a5d7 100644
--- a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java
+++ b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java
@@ -29,6 +29,7 @@ import androidx.core.content.FileProvider;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import de.dennisguse.opentracks.R;
@@ -37,6 +38,7 @@ import de.dennisguse.opentracks.content.data.Marker;
import de.dennisguse.opentracks.content.data.Track;
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.
@@ -81,8 +83,6 @@ public class IntentUtils {
trackDescription = track == null ? "" : new DescriptionGenerator(context).generateTrackDescription(track, false);
}
- String mime = "";
-
ArrayList