From 53b267150b16e71eaedfb608b41cae6e715015c0 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 20 May 2020 11:40:44 +0200 Subject: [PATCH] Export/Import: TrackFileFormat is now selected via settings only. --- .../io/file/importer/ExportImportTest.java | 4 +- .../opentracks/util/PreferencesUtilsTest.java | 4 +- .../fragments/FileTypeDialogFragment.java | 126 ------------------ .../io/file/exporter/ExportActivity.java | 48 +++---- .../io/file/importer/ImportActivity.java | 42 ++---- .../opentracks/util/PreferencesUtils.java | 5 +- src/main/res/values/settings.xml | 2 + src/main/res/xml/settings.xml | 1 + 8 files changed, 40 insertions(+), 192 deletions(-) delete mode 100644 src/main/java/de/dennisguse/opentracks/fragments/FileTypeDialogFragment.java diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java index 4983546fa..bf3520000 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java @@ -97,7 +97,7 @@ public class ExportImportTest { Track track = contentProviderUtils.getTrack(trackId); TrackFileFormat trackFileFormat = TrackFileFormat.KML_WITH_TRACKDETAIL; - TrackExporter trackExporter = trackFileFormat.newTrackExporter(context, new Track[]{track}, null); + TrackExporter trackExporter = trackFileFormat.newTrackExporter(context, new Track[]{track}); // when // 1. export @@ -169,7 +169,7 @@ public class ExportImportTest { Track track = contentProviderUtils.getTrack(trackId); TrackFileFormat trackFileFormat = TrackFileFormat.GPX; - TrackExporter trackExporter = trackFileFormat.newTrackExporter(context, new Track[]{track}, null); + TrackExporter trackExporter = trackFileFormat.newTrackExporter(context, new Track[]{track}); // when // 1. export diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java index 70093164e..46b9a3af6 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java @@ -43,7 +43,7 @@ public class PreferencesUtilsTest { TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(context); // then - Assert.assertEquals(TrackFileFormat.KML_ONLY_TRACK, trackFileFormat); + Assert.assertEquals(TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA, trackFileFormat); } @Test @@ -57,6 +57,6 @@ public class PreferencesUtilsTest { TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(context); // then - Assert.assertEquals(TrackFileFormat.KML_ONLY_TRACK, trackFileFormat); + Assert.assertEquals(TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA, trackFileFormat); } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/fragments/FileTypeDialogFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/FileTypeDialogFragment.java deleted file mode 100644 index 8fac538ac..000000000 --- a/src/main/java/de/dennisguse/opentracks/fragments/FileTypeDialogFragment.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package de.dennisguse.opentracks.fragments; - -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.FragmentManager; - -import java.util.Locale; - -import de.dennisguse.opentracks.R; -import de.dennisguse.opentracks.io.file.TrackFileFormat; - -/** - * A DialogFragment to select a file type, gpx, kml, etc. - * - * @author Jimmy Shih - */ -public class FileTypeDialogFragment extends DialogFragment { - - private static final String FILE_TYPE_DIALOG_TAG = "fileType"; - private static final String KEY_TITLE_ID = "titleId"; - private static final String KEY_OPTION_ID = "optionId"; - - private FileTypeCaller caller; - - public static void showDialog(FragmentManager fragmentManager, int titleId, int optionId) { - Bundle bundle = new Bundle(); - bundle.putInt(KEY_TITLE_ID, titleId); - bundle.putInt(KEY_OPTION_ID, optionId); - - FileTypeDialogFragment fileTypeDialogFragment = new FileTypeDialogFragment(); - fileTypeDialogFragment.setArguments(bundle); - fileTypeDialogFragment.show(fragmentManager, FILE_TYPE_DIALOG_TAG); - } - - @Override - public void onAttach(@NonNull Context context) { - super.onAttach(context); - try { - caller = (FileTypeCaller) context; - } catch (ClassCastException e) { - throw new ClassCastException(context + " must implement " + FileTypeCaller.class.getSimpleName()); - } - } - - @Override - @NonNull - public Dialog onCreateDialog(Bundle savedInstanceState) { - int optionId = getArguments().getInt(KEY_OPTION_ID); - final int titleId = getArguments().getInt(KEY_TITLE_ID); - - 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[] choices = new String[trackFileFormats.length]; - for (int i = 0; i < choices.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; - String trackFileFormatDisplayName = String.format("%s (%s)", trackFileFormatUpperCase, getString(photoMessageId)); - choices[i] = getString(optionId, trackFileFormatDisplayName); - } - return new AlertDialog.Builder(getActivity()) - .setNegativeButton(R.string.generic_cancel, new OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - onDismissed(); - } - }) - .setPositiveButton(R.string.generic_ok, new OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - int position = ((AlertDialog) dialog).getListView().getCheckedItemPosition(); - caller.onFileTypeDone(trackFileFormats[position]); - } - }) - .setSingleChoiceItems(choices, 0, null) - .setTitle(titleId) - .create(); - } - - @Override - public void onCancel(@NonNull DialogInterface dialog) { - onDismissed(); - } - - private void onDismissed() { - dismiss(); - caller.onDismissed(); - } - - /** - * Interface for caller of this dialog fragment. - * - * @author Jimmy Shih - */ - public interface FileTypeCaller { - - /** - * Called when file type selection is done. - */ - void onFileTypeDone(TrackFileFormat trackFileFormat); - - void onDismissed(); - } -} \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportActivity.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportActivity.java index a31ca7852..cb060c745 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportActivity.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportActivity.java @@ -30,17 +30,17 @@ import androidx.documentfile.provider.DocumentFile; import androidx.fragment.app.FragmentActivity; import de.dennisguse.opentracks.R; -import de.dennisguse.opentracks.fragments.FileTypeDialogFragment; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.util.DialogUtils; import de.dennisguse.opentracks.util.FileUtils; +import de.dennisguse.opentracks.util.PreferencesUtils; /** * An activity for saving tracks to the external storage. * * @author Rodrigo Damazio */ -public class ExportActivity extends FragmentActivity implements FileTypeDialogFragment.FileTypeCaller { +public class ExportActivity extends FragmentActivity { private static final int DIRECTORY_PICKER_REQUEST_CODE = 6; @@ -55,8 +55,6 @@ public class ExportActivity extends FragmentActivity implements FileTypeDialogFr private int processedTrackCount; private int totalTrackCount; - private Uri directoryUri; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -71,36 +69,24 @@ public class ExportActivity extends FragmentActivity implements FileTypeDialogFr super.onActivityResult(requestCode, resultCode, resultData); if (requestCode == DIRECTORY_PICKER_REQUEST_CODE) { if (resultCode == Activity.RESULT_OK) { - directoryUri = resultData.getData(); - fileTypeDialogStart(); + Uri directoryUri = resultData.getData(); + DocumentFile pickedDirectory = DocumentFile.fromTreeUri(this, directoryUri); + DocumentFile exportDirectory = pickedDirectory.findFile(FileUtils.EXPORT_DIR); + if (exportDirectory == null) { + exportDirectory = pickedDirectory.createDirectory(FileUtils.EXPORT_DIR); + } + + TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(this); + + directoryDisplayName = FileUtils.getPath(exportDirectory); + exportAsyncTask = new ExportAsyncTask(this, trackFileFormat, exportDirectory); + exportAsyncTask.execute(); } else { finish(); } } } - private void fileTypeDialogStart() { - FileTypeDialogFragment.showDialog(getSupportFragmentManager(), R.string.export_all_title, R.string.export_all_option); - } - - @Override - public void onFileTypeDone(TrackFileFormat trackFileFormat) { - DocumentFile pickedDirectory = DocumentFile.fromTreeUri(this, directoryUri); - DocumentFile exportDirectory = pickedDirectory.findFile(FileUtils.EXPORT_DIR); - if (exportDirectory == null) { - exportDirectory = pickedDirectory.createDirectory(FileUtils.EXPORT_DIR); - } - - directoryDisplayName = FileUtils.getPath(exportDirectory); - exportAsyncTask = new ExportAsyncTask(this, trackFileFormat, exportDirectory); - exportAsyncTask.execute(); - } - - @Override - public void onDismissed() { - finish(); - } - @Override protected Dialog onCreateDialog(int id) { switch (id) { @@ -112,7 +98,7 @@ public class ExportActivity extends FragmentActivity implements FileTypeDialogFr public void onCancel(DialogInterface dialog) { exportAsyncTask.cancel(true); dialog.dismiss(); - onDismissed(); + finish(); } }, directoryDisplayName); return progressDialog; @@ -138,13 +124,13 @@ public class ExportActivity extends FragmentActivity implements FileTypeDialogFr @Override public void onCancel(DialogInterface dialog) { dialog.dismiss(); - onDismissed(); + finish(); } }).setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int arg1) { dialog.dismiss(); - onDismissed(); + finish(); } }).setTitle(titleId); return builder.create(); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java index f33f3ea34..b09a20e88 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportActivity.java @@ -30,17 +30,17 @@ import androidx.documentfile.provider.DocumentFile; import androidx.fragment.app.FragmentActivity; import de.dennisguse.opentracks.R; -import de.dennisguse.opentracks.fragments.FileTypeDialogFragment; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.util.DialogUtils; import de.dennisguse.opentracks.util.FileUtils; +import de.dennisguse.opentracks.util.PreferencesUtils; /** * An activity to import files from the external storage. * * @author Rodrigo Damazio */ -public class ImportActivity extends FragmentActivity implements FileTypeDialogFragment.FileTypeCaller { +public class ImportActivity extends FragmentActivity { private static final int DIRECTORY_PICKER_REQUEST_CODE = 6; @@ -55,8 +55,6 @@ public class ImportActivity extends FragmentActivity implements FileTypeDialogFr private int importedTrackCount; private int totalTrackCount; - private Uri directoryUri; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -72,34 +70,20 @@ public class ImportActivity extends FragmentActivity implements FileTypeDialogFr super.onActivityResult(requestCode, resultCode, resultData); if (requestCode == DIRECTORY_PICKER_REQUEST_CODE) { if (resultCode == Activity.RESULT_OK) { - directoryUri = resultData.getData(); - fileTypeDialogStart(); + Uri directoryUri = resultData.getData(); + DocumentFile pickedDirectory = DocumentFile.fromTreeUri(this, directoryUri); + + directoryDisplayName = FileUtils.getPath(pickedDirectory); + TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(this); + + importAsyncTask = new ImportAsyncTask(this, trackFileFormat, pickedDirectory); + importAsyncTask.execute(); } else { finish(); } } } - - private void fileTypeDialogStart() { - FileTypeDialogFragment.showDialog(getSupportFragmentManager(), R.string.import_selection_title, R.string.import_selection_option); - } - - @Override - public void onFileTypeDone(TrackFileFormat trackFileFormat) { - DocumentFile pickedDirectory = DocumentFile.fromTreeUri(this, directoryUri); - - directoryDisplayName = FileUtils.getPath(pickedDirectory); - - importAsyncTask = new ImportAsyncTask(this, trackFileFormat, pickedDirectory); - importAsyncTask.execute(); - } - - @Override - public void onDismissed() { - finish(); - } - @Override protected Dialog onCreateDialog(int id) { switch (id) { @@ -110,7 +94,7 @@ public class ImportActivity extends FragmentActivity implements FileTypeDialogFr public void onCancel(DialogInterface dialog) { importAsyncTask.cancel(true); dialog.dismiss(); - onDismissed(); + finish(); } }, directoryDisplayName); return progressDialog; @@ -140,13 +124,13 @@ public class ImportActivity extends FragmentActivity implements FileTypeDialogFr @Override public void onCancel(DialogInterface dialogInterface) { dialogInterface.dismiss(); - onDismissed(); + finish(); } }).setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int which) { dialogInterface.dismiss(); - onDismissed(); + finish(); } }).setTitle(titleId).create(); default: diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index 776665f09..f88914259 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -322,11 +322,12 @@ public class PreferencesUtils { } public static TrackFileFormat getExportTrackFileFormat(Context context) { - String trackFileFormatName = getString(context, R.string.export_trackfileformat_key, null); + final String TRACKFILEFORMAT_NAME_DEFAULT = getString(context, R.string.export_trackfileformat_default, null); + String trackFileFormatName = getString(context, R.string.export_trackfileformat_key, TRACKFILEFORMAT_NAME_DEFAULT); try { return TrackFileFormat.valueOf(trackFileFormatName); } catch (Exception e) { - return TrackFileFormat.KML_ONLY_TRACK; + return TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA; } } diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index 4743595c7..4888a7cbc 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -221,6 +221,8 @@ exportTrackFileFormat + + KMZ_WITH_TRACKDETAIL_AND_SENSORDATA settingsRecordingKey \ No newline at end of file diff --git a/src/main/res/xml/settings.xml b/src/main/res/xml/settings.xml index ce0b52f8d..051073bab 100644 --- a/src/main/res/xml/settings.xml +++ b/src/main/res/xml/settings.xml @@ -144,6 +144,7 @@ limitations under the License. android:targetPackage="@string/applicationId" />