- add default export directory

- add instant post workout track export
This commit is contained in:
thrillfall
2020-08-06 13:56:27 +02:00
committed by Dennis Guse
parent 257d8c1276
commit b270c45691
14 changed files with 253 additions and 5 deletions
@@ -0,0 +1,37 @@
package de.dennisguse.opentracks.io.file;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import de.dennisguse.opentracks.io.file.exporter.ExportActivity;
import de.dennisguse.opentracks.io.file.importer.DirectoryChooserActivity;
import de.dennisguse.opentracks.util.IntentUtils;
import de.dennisguse.opentracks.util.PreferencesUtils;
public class InitiateExportActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Uri directoryUri = PreferencesUtils.getDefaultExportDirectoryUri(this);
if (directoryUri != null) {
startActivity(createExportAllIntent(directoryUri));
finish();
return;
}
Intent intent = IntentUtils.newIntent(this, DirectoryChooserActivity.ExportDirectoryChooserActivity.class);
startActivity(intent);
finish();
}
protected Intent createExportAllIntent(Uri directoryUri) {
Intent intent = IntentUtils.newIntent(this, ExportActivity.class);
intent.putExtra(ExportActivity.EXTRA_DIRECTORY_URI_KEY, directoryUri);
intent.putExtra(ExportActivity.EXTRA_TRACKFILEFORMAT_KEY, PreferencesUtils.getExportTrackFileFormat(this));
return intent;
}
}
@@ -0,0 +1,40 @@
package de.dennisguse.opentracks.io.file.exporter;
import android.content.Context;
import android.net.Uri;
import android.util.Log;
import android.widget.Toast;
import androidx.documentfile.provider.DocumentFile;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.content.data.Track;
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
import de.dennisguse.opentracks.io.file.ExportFile;
import de.dennisguse.opentracks.io.file.TrackFileFormat;
public class InstantPostWorkoutExport {
private static final String TAG = InstantPostWorkoutExport.class.getSimpleName();
public static void exportTrackToUri(Uri directoryUri, Context context, ContentProviderUtils contentProviderUtils, TrackFileFormat trackFileFormat, Track.Id trackId) {
DocumentFile directory = DocumentFile.fromTreeUri(context, directoryUri);
Track track = contentProviderUtils.getTrack(trackId);
DocumentFile file = ExportFile.getExportDocumentFile(trackId, trackFileFormat.getExtension(), directory, trackFileFormat.getExtension());
try (OutputStream outputStream = context.getContentResolver().openOutputStream(file.getUri())) {
TrackExportThread trackExportThread = new TrackExportThread(outputStream, context, trackFileFormat, track);
trackExportThread.run();
Toast.makeText(context, R.string.toast_message_instant_track_was_exported, Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
Log.e(TAG, "Unable to open file " + file.getName(), e);
} catch (IOException e) {
Log.e(TAG, "Unable to close file output stream", e);
}
}
}
@@ -0,0 +1,31 @@
package de.dennisguse.opentracks.io.file.exporter;
import android.content.Context;
import java.io.OutputStream;
import de.dennisguse.opentracks.content.data.Track;
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
import de.dennisguse.opentracks.io.file.TrackFileFormat;
import de.dennisguse.opentracks.io.file.exporter.TrackExporter;
public class TrackExportThread extends Thread {
private OutputStream outputStream;
private Context context;
private TrackFileFormat trackFileFormat;
private Track track;
public TrackExportThread(OutputStream outputStream, Context context, TrackFileFormat trackFileFormat, Track track) {
this.outputStream = outputStream;
this.context = context;
this.trackFileFormat = trackFileFormat;
this.track = track;
}
@Override
public void run() {
TrackExporter trackExporter = trackFileFormat.newTrackExporter(context);
trackExporter.writeTrack(track, outputStream);
}
}
@@ -0,0 +1,45 @@
package de.dennisguse.opentracks.io.file.importer;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.util.PreferencesUtils;
import static de.dennisguse.opentracks.util.IntentUtils.persistDirectoryAccessPermission;
public class DefaultTrackExportDirectoryChooserActivity extends AppCompatActivity {
private static final int DIRECTORY_PICKER_REQUEST_CODE = 6;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(intent, DIRECTORY_PICKER_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);
if (requestCode == DIRECTORY_PICKER_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
Uri directoryUri = resultData.getData();
PreferencesUtils.setDefaultExportDirectoryUri(this, directoryUri);
persistDirectoryAccessPermission(getApplicationContext(), resultData, directoryUri);
}
finish();
}
}
}