From dfc09e87bbff6cfef451213c993c9bc79d03a0b2 Mon Sep 17 00:00:00 2001 From: Aaron Culliney Date: Thu, 31 Oct 2019 17:34:28 -0700 Subject: [PATCH] Correctly set the filename from chooser activity --- .../apple2ix/Apple2DiskChooserActivity.java | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2DiskChooserActivity.java b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2DiskChooserActivity.java index 933f360f..62ccd080 100644 --- a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2DiskChooserActivity.java +++ b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2DiskChooserActivity.java @@ -14,6 +14,7 @@ package org.deadc0de.apple2ix; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -21,6 +22,8 @@ import android.os.ParcelFileDescriptor; import android.provider.DocumentsContract; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; + +import android.provider.OpenableColumns; import android.util.Log; import java.util.concurrent.atomic.AtomicBoolean; @@ -58,6 +61,34 @@ public class Apple2DiskChooserActivity extends AppCompatActivity { return pfd; } + @Nullable + public static String getFileNameFromUri(Context ctx, Uri uri) { + + String fileName = null; + + try { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + throw new RuntimeException("SDK Version not allowed access"); + } + + if (!DocumentsContract.isDocumentUri(ctx, uri)) { + throw new RuntimeException("Not a Document URI for " + uri); + } + + ContentResolver resolver = ctx.getContentResolver(); + + Cursor returnCursor = resolver.query(uri, null, null, null, null); + int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); + returnCursor.moveToFirst(); + fileName = returnCursor.getString(nameIndex); + + } catch (Throwable t) { + Log.e(TAG, "OOPS, could not get filename from URI ( " + uri + " ) : " + t); + } + + return fileName; + } + @Override protected void onSaveInstanceState(Bundle outState) { outState.putBoolean("ran", true); @@ -142,6 +173,7 @@ public class Apple2DiskChooserActivity extends AppCompatActivity { if (chosenUri != null) { chosenPfd = openFileDescriptorFromUri(this, chosenUri); + chosenFileName = getFileNameFromUri(this, chosenUri); } } @@ -157,7 +189,7 @@ public class Apple2DiskChooserActivity extends AppCompatActivity { @Override public void finish() { sDiskChooserIsChoosing.set(false); - String name = chosenUri == null ? "" : chosenUri.toString(); + String name = chosenFileName == null ? (chosenUri == null ? "" : chosenUri.toString()) : chosenFileName; if (sDisksCallback != null) { sDisksCallback.onDisksChosen(new DiskArgs(name, chosenUri, chosenPfd)); } @@ -168,6 +200,8 @@ public class Apple2DiskChooserActivity extends AppCompatActivity { private ParcelFileDescriptor chosenPfd; + private String chosenFileName; + private static final String TAG = "A2DiskChooserActivity"; private static final int EDIT_REQUEST_CODE = 44;