Compare commits

..

No commits in common. "dev" and "master" have entirely different histories.
dev ... master

5 changed files with 0 additions and 187 deletions

View file

@ -1,104 +0,0 @@
package com.proculite.androidagain.common.storageaccess;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.Log;
import androidx.activity.ComponentActivity;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultCaller;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.fragment.app.Fragment;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.function.Consumer;
public class CreateDocumentGuide implements ActivityResultCallback<Uri> {
private final String TAG = ActivityResultContracts.CreateDocument.class.getName();
private final ActivityResultLauncher<String> createDocumentLauncher;
private final Context context;
private UriHandler uriHandler;
/**
* This constructor registers a request to start an activity for a result, therefore it must
* be called unconditionally, as part of the initialization path, typically as a field
* initializer of an Activity or Fragment. A suitable location to call it would be the within
* {@link android.app.Activity#onCreate(Bundle, PersistableBundle)} method.
* @param activityResultCaller Activity result callback, such as
* {@link androidx.fragment.app.Fragment} or {@link androidx.appcompat.app.AppCompatActivity}.
* @param mimeType Mime type of document.
*/
public CreateDocumentGuide(
Context context,
ActivityResultCaller activityResultCaller,
String mimeType
){
this.context = context;
ActivityResultContracts.CreateDocument createDocumentContract =
new ActivityResultContracts.CreateDocument(mimeType);
createDocumentLauncher = activityResultCaller
.registerForActivityResult(createDocumentContract, this);
}
public static CreateDocumentGuide anyMimeType(
Context context,
ActivityResultCaller activityResultCaller
){
return new CreateDocumentGuide(context, activityResultCaller, "*/*");
}
public static CreateDocumentGuide anyMimeType(
ComponentActivity componentActivity
){
return anyMimeType(componentActivity, componentActivity);
}
public static CreateDocumentGuide anyMimeType(
Fragment fragment
){
return anyMimeType(fragment.getContext(), fragment);
}
@Override
public final void onActivityResult(Uri o) {
uriHandler.handleUri(o);
}
public void writeToOutputStream(String suggestedFileName, OutputStreamHandler outputStreamHandler){
uriHandler = uri -> {
try {
OutputStream outputStream = context.getContentResolver().openOutputStream(uri);
outputStreamHandler.handleOutputStream(outputStream);
if(outputStream != null) {
outputStream.close();
}
} catch (FileNotFoundException e) {
Log.e(TAG, "FileNotFoundException occurred on write to OutputStream.");
} catch (IOException e) {
Log.e(TAG, "IOException occurred on write to OutputStream.");
}
};
createDocumentLauncher.launch(suggestedFileName);
}
public void writeBytes(String suggestedFileName, byte[] bytesToWrite){
writeToOutputStream(suggestedFileName, outputStream -> {
try {
outputStream.write(bytesToWrite);
} catch (IOException e) {
Log.e(TAG, "IOException occurred when writing bytes.");
}
});
}
public void writeString(String suggestedFileName, String stringToWrite){
writeBytes(suggestedFileName, stringToWrite.getBytes(StandardCharsets.UTF_8));
}
}

View file

@ -1,7 +0,0 @@
package com.proculite.androidagain.common.storageaccess;
import java.io.InputStream;
public interface InputStreamHandler {
void handleInputStream(InputStream inputStream);
}

View file

@ -1,62 +0,0 @@
package com.proculite.androidagain.common.storageaccess;
import android.content.Context;
import android.net.Uri;
import android.util.Log;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultCaller;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class OpenDocumentGuide implements ActivityResultCallback<Uri> {
private final String TAG = ActivityResultContracts.OpenDocument.class.getName();
private final ActivityResultLauncher<String[]> openDocumentLauncher;
private final Context context;
private UriHandler uriHandler;
public OpenDocumentGuide(
Context context,
ActivityResultCaller activityResultCaller
) {
this.context = context;
ActivityResultContracts.OpenDocument openDocumentContract =
new ActivityResultContracts.OpenDocument();
openDocumentLauncher = activityResultCaller.registerForActivityResult(openDocumentContract, this);
}
@Override
public void onActivityResult(Uri o) {
uriHandler.handleUri(o);
}
public void readFromInputStream(String[] suggestedMimeTypes, InputStreamHandler inputStreamHandler){
uriHandler = uri -> {
try {
InputStream inputStream = context.getContentResolver().openInputStream(uri);
if(inputStream == null)
{
Log.e(TAG, "Obtained input stream is null.");
return;
}
inputStreamHandler.handleInputStream(inputStream);
inputStream.close();
}catch (FileNotFoundException e){
Log.e(TAG, "FileNotFoundException occurred on read from InputStream.");
} catch (IOException e) {
Log.e(TAG, "IOException occurred on read from InputStream.");
}
};
openDocumentLauncher.launch(suggestedMimeTypes);
}
public void readFromInputStream(InputStreamHandler inputStreamHandler){
// Any MIME type.
readFromInputStream(new String[]{"*/*"},inputStreamHandler);
}
}

View file

@ -1,7 +0,0 @@
package com.proculite.androidagain.common.storageaccess;
import java.io.OutputStream;
public interface OutputStreamHandler {
void handleOutputStream(OutputStream outputStream);
}

View file

@ -1,7 +0,0 @@
package com.proculite.androidagain.common.storageaccess;
import android.net.Uri;
public interface UriHandler {
void handleUri(Uri uri);
}