79 lines
2.9 KiB
Java

package de.tadris.fitness.util;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
import org.apache.commons.io.IOUtils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import de.tadris.fitness.R;
public class FileUtils {
public static void saveOrShareFile(Activity activity, Uri uri, String suffix) {
String[] colors = {activity.getString(R.string.share), activity.getString(R.string.save)};
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setItems(colors, (dialog, which) -> {
if (which == 0) {
shareFile(activity, uri);
} else {
try {
saveFile(activity, uri, suffix);
Toast.makeText(activity, R.string.savedToDownloads, Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(activity, R.string.savingFailed, Toast.LENGTH_LONG).show();
}
}
});
builder.show();
}
private static void saveFile(Activity activity, Uri fileUri, String suffix) throws IOException {
File target = new File(Environment.getExternalStorageDirectory(), "Download/fitotrack" + System.currentTimeMillis() + "." + suffix);
if (!target.createNewFile()) {
throw new IOException("Cannot write to file " + target);
}
copyFile(activity, fileUri, Uri.fromFile(target));
}
private static void copyFile(Activity activity, Uri sourceUri, Uri targetUri) throws IOException {
InputStream input = activity.getContentResolver().openInputStream(sourceUri);
if (input == null) {
throw new IOException("Source file not found");
}
OutputStream output = activity.getContentResolver().openOutputStream(targetUri);
IOUtils.copy(input, output);
}
private static void shareFile(Activity activity, Uri uri) {
Intent intentShareFile = new Intent(Intent.ACTION_SEND);
intentShareFile.setDataAndType(uri, activity.getContentResolver().getType(uri));
intentShareFile.putExtra(Intent.EXTRA_STREAM, uri);
intentShareFile.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
activity.startActivity(Intent.createChooser(intentShareFile, activity.getString(R.string.shareFile)));
Log.d("Export", uri.toString());
Log.d("Export", activity.getContentResolver().getType(uri));
try {
Log.d("Export", new BufferedInputStream(activity.getContentResolver().openInputStream(uri)).toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}