From 9e989684a13a2b02aad601fb597619d6783d97c1 Mon Sep 17 00:00:00 2001 From: Filip Strajnar Date: Sun, 20 Oct 2024 18:18:27 +0200 Subject: [PATCH] Created WriteTofile helper class. --- .../proculite/logmylocation/WriteToFile.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 app/src/main/java/com/proculite/logmylocation/WriteToFile.java diff --git a/app/src/main/java/com/proculite/logmylocation/WriteToFile.java b/app/src/main/java/com/proculite/logmylocation/WriteToFile.java new file mode 100644 index 0000000..fb1d4f9 --- /dev/null +++ b/app/src/main/java/com/proculite/logmylocation/WriteToFile.java @@ -0,0 +1,72 @@ +package com.proculite.logmylocation; + +import android.content.Context; +import android.net.Uri; +import android.os.ParcelFileDescriptor; +import android.util.Log; + +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; + +import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class WriteToFile implements ActivityResultCallback { + private final String TAG = WriteToFile.class.getName(); + private final InputStream fileContents; + private final AppCompatActivity activityCompat; + + public WriteToFile(AppCompatActivity activity, String fileName, String fileMimeType, InputStream fileContents) + { + this.fileContents = fileContents; + this.activityCompat = activity; + ActivityResultLauncher launcher = + activity.registerForActivityResult(new ActivityResultContracts.CreateDocument(fileMimeType), this); + launcher.launch(fileName); + } + + @Override + public void onActivityResult(Uri o) { + if(o == null || o.getPath() == null) + { + Log.d(TAG, "Attempting to write to null path."); + return; + } + + Log.d(TAG, String.format("Writing to file: %s", o.getPath())); + + try { + try (ParcelFileDescriptor fileDescriptor = this.activityCompat.getContentResolver().openFileDescriptor(o, "w")) { + if (fileDescriptor == null) { + Log.e(TAG, "Parcel file descriptor is null."); + return; + } + try (FileOutputStream fileOutputStream = new FileOutputStream(fileDescriptor.getFileDescriptor())) { + while (fileContents.available() > 0) { + fileOutputStream.write(fileContents.read()); + } + } + } + } catch (IOException e) { + Log.e(TAG, "Failed to write to file."); + } + } + + public static WriteToFile WriteBytes(AppCompatActivity activity, String fileName, String fileMimeType, byte[] fileContents){ + return new WriteToFile(activity, fileName, fileMimeType, new ByteArrayInputStream(fileContents)); + } + + public static WriteToFile WriteString(AppCompatActivity activity, String fileName, String fileMimeType, String fileContents){ + return WriteBytes(activity, fileName, fileMimeType, fileContents.getBytes(StandardCharsets.UTF_8)); + } +}