Skip to content

Commit

Permalink
fix(android): handle raw: uri for some devices
Browse files Browse the repository at this point in the history
  • Loading branch information
andelf committed Aug 11, 2022
1 parent 2d1fb05 commit a887810
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 18 deletions.
36 changes: 18 additions & 18 deletions android/app/src/main/java/com/logseq/app/FileUtil.java
Expand Up @@ -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 {
Expand All @@ -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];
Expand All @@ -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();
}

Expand Down
2 changes: 2 additions & 0 deletions android/app/src/main/java/com/logseq/app/FolderPicker.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit a887810

Please sign in to comment.