Skip to content

Commit 20c99fb

Browse files
authored
Merge pull request #139 from quantum-byte/fix-broken-non-primary-external-storage-document-paths
Bugfix for "non-primary" external storage provider folder uris.
2 parents c044f11 + 2066bb4 commit 20c99fb

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

app/src/main/java/de/lolhens/resticui/util/ASFUriHelper.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,17 @@
77
import android.os.Environment;
88
import android.provider.DocumentsContract;
99
import android.provider.MediaStore;
10+
import androidx.documentfile.provider.DocumentFile;
11+
12+
import java.io.File;
13+
import java.util.Arrays;
14+
import java.util.List;
1015

1116
// https://gist.github.com/asifmujteba/d89ba9074bc941de1eaa#file-asfurihelper
1217
public class ASFUriHelper {
18+
19+
private static final List<String> documentUriTypes = Arrays.asList(Environment.DIRECTORY_MUSIC, Environment.DIRECTORY_PODCASTS, Environment.DIRECTORY_RINGTONES, Environment.DIRECTORY_ALARMS, Environment.DIRECTORY_NOTIFICATIONS, Environment.DIRECTORY_PICTURES, Environment.DIRECTORY_MOVIES, Environment.DIRECTORY_DOWNLOADS, Environment.DIRECTORY_DCIM, Environment.DIRECTORY_DOCUMENTS);
20+
1321
public static String getPath(final Context context, final Uri uri) {
1422
if (DocumentsContract.isDocumentUri(context, uri)) { // DocumentProvider
1523
if (isExternalStorageDocument(uri)) { // ExternalStorageProvider
@@ -23,9 +31,24 @@ public static String getPath(final Context context, final Uri uri) {
2331
} else {
2432
return Environment.getExternalStorageDirectory() + "/";
2533
}
34+
} else {
35+
final DocumentFile documentUriRoot = DocumentFile.fromTreeUri(context, DocumentsContract.buildTreeDocumentUri(
36+
uri.getAuthority(), type + ":"));
37+
if (documentUriRoot != null && documentUriRoot.exists() && ASFUriHelper.documentUriTypes.contains(documentUriRoot.getName())) {
38+
final String basePath = Environment.getExternalStoragePublicDirectory(documentUriRoot.getName()).getAbsolutePath();
39+
final String fullPath;
40+
if (split.length > 1)
41+
fullPath = basePath + "/" + split[1];
42+
else {
43+
fullPath = basePath + "/";
44+
}
45+
if (new File(fullPath).exists()) {
46+
return fullPath;
47+
}
48+
}
49+
2650
}
2751

28-
// TODO handle non-primary volumes
2952
} else if (isDownloadsDocument(uri)) { // DownloadsProvider
3053
try {
3154
final Uri contentUri = ContentUris.withAppendedId(

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ allprojects {
2323

2424
task clean(type: Delete) {
2525
delete rootProject.buildDir
26-
}
26+
}

0 commit comments

Comments
 (0)