diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java new file mode 100644 index 000000000..70093164e --- /dev/null +++ b/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java @@ -0,0 +1,62 @@ +package de.dennisguse.opentracks.util; + +import android.content.Context; +import android.content.SharedPreferences; + +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.io.file.TrackFileFormat; + +@RunWith(AndroidJUnit4.class) +public class PreferencesUtilsTest { + + private final Context context = ApplicationProvider.getApplicationContext(); + + @Test + public void ExportTrackFileFormat_ok() { + // given + SharedPreferences.Editor editor = PreferencesUtils.getSharedPreferences(context).edit(); + editor.putString(context.getString(R.string.export_trackfileformat_key), TrackFileFormat.KMZ_WITH_TRACKDETAIL.name()); + editor.commit(); + + // when + TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(context); + + // then + Assert.assertEquals(TrackFileFormat.KMZ_WITH_TRACKDETAIL, trackFileFormat); + } + + @Test + public void ExportTrackFileFormat_invalid() { + // given + SharedPreferences.Editor editor = PreferencesUtils.getSharedPreferences(context).edit(); + editor.putString(context.getString(R.string.export_trackfileformat_key), "invalid"); + editor.commit(); + + // when + TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(context); + + // then + Assert.assertEquals(TrackFileFormat.KML_ONLY_TRACK, trackFileFormat); + } + + @Test + public void ExportTrackFileFormat_noValue() { + // given + SharedPreferences.Editor editor = PreferencesUtils.getSharedPreferences(context).edit(); + editor.clear(); + editor.commit(); + + // when + TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(context); + + // then + Assert.assertEquals(TrackFileFormat.KML_ONLY_TRACK, trackFileFormat); + } +} \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index 5eccca161..5017e2d97 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -11,8 +11,11 @@ import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import java.util.Locale; + import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; +import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.settings.bluetooth.BluetoothLeCyclingCadenceAndSpeedPreference; import de.dennisguse.opentracks.settings.bluetooth.BluetoothLeHeartRatePreference; import de.dennisguse.opentracks.settings.bluetooth.BluetoothLeSensorPreference; @@ -89,6 +92,8 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit setPreferencesFromResource(R.xml.settings, rootKey); } + + setExportTrackFileFormatOptions(); } @Override @@ -172,5 +177,24 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit HackUtils.invalidatePreference(statsRatePreferences); } + + + 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}; + String[] entries = new String[trackFileFormats.length]; + String[] entryValues = new String[trackFileFormats.length]; + + for (int i = 0; i < entries.length; i++) { + TrackFileFormat trackFileFormat = trackFileFormats[i]; + String trackFileFormatUpperCase = trackFileFormat.getExtension().toUpperCase(Locale.US); //ASCII upper case + int photoMessageId = trackFileFormat.includesPhotos() ? R.string.export_with_photos : R.string.export_without_photos; + entries[i] = String.format("%s (%s)", trackFileFormatUpperCase, getString(photoMessageId)); + entryValues[i] = trackFileFormat.name(); + } + + ListPreference listPreference = findPreference(getString(R.string.export_trackfileformat_key)); + listPreference.setEntries(entries); + listPreference.setEntryValues(entryValues); + } } } diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java index 7cb7d2b9f..a1b911bac 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java @@ -92,9 +92,10 @@ public class IntentUtils { Track track = contentProviderUtils.getTrack(trackId); if (track == null) { Log.e(TAG, "TrackId " + trackId + " could not be resolved."); + continue; } - Pair uriAndMime = ShareContentProvider.createURI(new long[]{trackId}, track.getName(), TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES); + Pair uriAndMime = ShareContentProvider.createURI(new long[]{trackId}, track.getName(), PreferencesUtils.getExportTrackFileFormat(context)); uris.add(uriAndMime.first); mime = uriAndMime.second; } diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index e1359692c..776665f09 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -24,6 +24,7 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceManager; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.io.file.TrackFileFormat; /** * Utilities to access preferences stored in {@link SharedPreferences}. @@ -320,6 +321,15 @@ public class PreferencesUtils { return getInt(context, R.string.recording_gps_accuracy_key, RECORDING_GPS_ACCURACY); } + public static TrackFileFormat getExportTrackFileFormat(Context context) { + String trackFileFormatName = getString(context, R.string.export_trackfileformat_key, null); + try { + return TrackFileFormat.valueOf(trackFileFormatName); + } catch (Exception e) { + return TrackFileFormat.KML_ONLY_TRACK; + } + } + public static boolean isRecording(Context context) { long recordingTrackId = getRecordingTrackId(context); return isRecording(recordingTrackId); diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index b78b2cfd7..4743595c7 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -220,5 +220,7 @@ @string/settings_recording_track_name_number_option + exportTrackFileFormat + settingsRecordingKey \ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 52cea5f71..834ce5f2a 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -333,6 +333,7 @@ limitations under the License. Show Advanced + Export/sharing file format By distance By time diff --git a/src/main/res/xml/settings.xml b/src/main/res/xml/settings.xml index 21dea0da6..ce0b52f8d 100644 --- a/src/main/res/xml/settings.xml +++ b/src/main/res/xml/settings.xml @@ -143,6 +143,10 @@ limitations under the License. android:targetClass="de.dennisguse.opentracks.io.file.exporter.ExportActivity" android:targetPackage="@string/applicationId" /> +