diff --git a/android/app/src/main/java/com/logseq/app/FileUtil.java b/android/app/src/main/java/com/logseq/app/FileUtil.java index 281658285cf..d2f0b861d84 100644 --- a/android/app/src/main/java/com/logseq/app/FileUtil.java +++ b/android/app/src/main/java/com/logseq/app/FileUtil.java @@ -9,6 +9,8 @@ import android.os.Environment; import android.provider.DocumentsContract; import android.provider.MediaStore; +import android.text.TextUtils; + // https://stackoverflow.com/questions/29713587/how-to-get-the-real-path-with-action-open-document-tree-intent // https://gist.github.com/asifmujteba/d89ba9074bc941de1eaa#file-asfurihelper public class FileUtil { @@ -30,18 +32,20 @@ public static String getPath(final Context context, final Uri uri) { } // TODO handle non-primary volumes - } - // DownloadsProvider - else if (isDownloadsDocument(uri)) { - + } else if (isDownloadsDocument(uri)) { final String id = DocumentsContract.getDocumentId(uri); - final Uri contentUri = ContentUris.withAppendedId( - Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); - - return getDataColumn(context, contentUri, null, null); - } - // MediaProvider - else if (isMediaDocument(uri)) { + if (!TextUtils.isEmpty(id)) { + if (id.startsWith("raw:")) { + return id.replaceFirst("raw:", ""); + } + try { + final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); + return getDataColumn(context, contentUri, null, null); + } catch (NumberFormatException e) { + return null; + } + } + } else if (isMediaDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; @@ -56,24 +60,20 @@ else if (isMediaDocument(uri)) { } final String selection = "_id=?"; - final String[] selectionArgs = new String[] { + final String[] selectionArgs = new String[]{ split[1] }; return getDataColumn(context, contentUri, selection, selectionArgs); } - } - // MediaStore (and general) - else if ("content".equalsIgnoreCase(uri.getScheme())) { + } else if ("content".equalsIgnoreCase(uri.getScheme())) { // Return the remote address if (isGooglePhotosUri(uri)) return uri.getLastPathSegment(); return getDataColumn(context, uri, null, null); - } - // File - else if ("file".equalsIgnoreCase(uri.getScheme())) { + } else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } diff --git a/android/app/src/main/java/com/logseq/app/FolderPicker.java b/android/app/src/main/java/com/logseq/app/FolderPicker.java index 132d2f53eaa..da313dd542a 100644 --- a/android/app/src/main/java/com/logseq/app/FolderPicker.java +++ b/android/app/src/main/java/com/logseq/app/FolderPicker.java @@ -8,6 +8,7 @@ import android.os.Build; import android.provider.DocumentsContract; import android.provider.Settings; +import android.util.Log; import androidx.activity.result.ActivityResult; import androidx.documentfile.provider.DocumentFile; @@ -56,6 +57,7 @@ private void folderPickerResult(PluginCall call, ActivityResult result) { Uri treeUri = result.getData().getData(); Uri docUri = DocumentsContract.buildDocumentUriUsingTree(treeUri, DocumentsContract.getTreeDocumentId(treeUri)); + Log.i("Logseq/FolderPicker", "Got uri " + docUri); ret.put("path", FileUtil.getPath(context, docUri)); call.resolve(ret); }