|
@@ -138,27 +138,43 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
|
|
|
return Array.Empty<IStorageItem>();
|
|
|
}
|
|
|
|
|
|
- using var javaFile = new JavaFile(Uri.Path!);
|
|
|
+ List<IStorageItem> files = new List<IStorageItem>();
|
|
|
|
|
|
- // Java file represents files AND directories. Don't be confused.
|
|
|
- var files = await javaFile.ListFilesAsync().ConfigureAwait(false);
|
|
|
- if (files is null)
|
|
|
+ var contentResolver = Activity.ContentResolver;
|
|
|
+ if (contentResolver == null)
|
|
|
{
|
|
|
- return Array.Empty<IStorageItem>();
|
|
|
+ return files;
|
|
|
}
|
|
|
|
|
|
- return files
|
|
|
- .Select(f => (file: f, uri: AndroidUri.FromFile(f)))
|
|
|
- .Where(t => t.uri is not null)
|
|
|
- .Select(t => t.file switch
|
|
|
- {
|
|
|
- { IsFile: true } => (IStorageItem)new AndroidStorageFile(Activity, t.uri!),
|
|
|
- { IsDirectory: true } => new AndroidStorageFolder(Activity, t.uri!, false),
|
|
|
- _ => null
|
|
|
- })
|
|
|
- .Where(i => i is not null)
|
|
|
- .ToArray()!;
|
|
|
- }
|
|
|
+ var childrenUri = DocumentsContract.BuildChildDocumentsUriUsingTree(Uri!, DocumentsContract.GetTreeDocumentId(Uri));
|
|
|
+
|
|
|
+ var projection = new[]
|
|
|
+ {
|
|
|
+ DocumentsContract.Document.ColumnDocumentId,
|
|
|
+ DocumentsContract.Document.ColumnMimeType
|
|
|
+ };
|
|
|
+ if (childrenUri != null)
|
|
|
+ {
|
|
|
+ using var cursor = contentResolver.Query(childrenUri, projection, null, null, null);
|
|
|
+
|
|
|
+ if (cursor != null)
|
|
|
+ while (cursor.MoveToNext())
|
|
|
+ {
|
|
|
+ var mime = cursor.GetString(1);
|
|
|
+ var id = cursor.GetString(0);
|
|
|
+ var uri = DocumentsContract.BuildDocumentUriUsingTree(Uri!, id);
|
|
|
+ if (uri == null)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ files.Add(mime == DocumentsContract.Document.MimeTypeDir ? new AndroidStorageFolder(Activity, uri, false) :
|
|
|
+ new AndroidStorageFile(Activity, uri));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return files;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
internal sealed class WellKnownAndroidStorageFolder : AndroidStorageFolder
|