aboutsummaryrefslogtreecommitdiff
path: root/ohmysaf/src/main/java/moe/yuuta/ohmysaf/OhMySAF.java
diff options
context:
space:
mode:
Diffstat (limited to 'ohmysaf/src/main/java/moe/yuuta/ohmysaf/OhMySAF.java')
-rw-r--r--ohmysaf/src/main/java/moe/yuuta/ohmysaf/OhMySAF.java23
1 files changed, 23 insertions, 0 deletions
diff --git a/ohmysaf/src/main/java/moe/yuuta/ohmysaf/OhMySAF.java b/ohmysaf/src/main/java/moe/yuuta/ohmysaf/OhMySAF.java
index 94175ae..f38af8b 100644
--- a/ohmysaf/src/main/java/moe/yuuta/ohmysaf/OhMySAF.java
+++ b/ohmysaf/src/main/java/moe/yuuta/ohmysaf/OhMySAF.java
@@ -2,6 +2,8 @@ package moe.yuuta.ohmysaf;
import android.content.Context;
import android.net.Uri;
+import android.os.Build;
+import android.provider.DocumentsContract;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -23,4 +25,25 @@ public class OhMySAF {
if (file == null) return null;
return new SafFile(file);
}
+
+ /**
+ * Auto detect whatever the given uri is a tree uri or a file uri.
+ */
+ public static SafFile ohMyUri(@NonNull Context context, @NonNull Uri uri) {
+ if (isTreeUri(uri)) {
+ return ohMyTree(context, uri);
+ } else {
+ return ohMyFile(context, uri);
+ }
+ }
+
+ public static boolean isTreeUri(@NonNull Uri uri) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return false;
+ try {
+ DocumentsContract.getTreeDocumentId(uri);
+ return true;
+ } catch (IllegalArgumentException ignored) {
+ return false;
+ }
+ }
}