Browse Source

Merge branch 'master' into patch-1

pull/10553/head
tkefauver 4 years ago
committed by GitHub
parent
commit
6f3b5e90fc
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 50
      src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs

50
src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs

@ -138,27 +138,43 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
return Array.Empty<IStorageItem>(); 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 contentResolver = Activity.ContentResolver;
var files = await javaFile.ListFilesAsync().ConfigureAwait(false); if (contentResolver == null)
if (files is null)
{ {
return Array.Empty<IStorageItem>(); return files;
} }
return files var childrenUri = DocumentsContract.BuildChildDocumentsUriUsingTree(Uri!, DocumentsContract.GetTreeDocumentId(Uri));
.Select(f => (file: f, uri: AndroidUri.FromFile(f)))
.Where(t => t.uri is not null) var projection = new[]
.Select(t => t.file switch {
{ DocumentsContract.Document.ColumnDocumentId,
{ IsFile: true } => (IStorageItem)new AndroidStorageFile(Activity, t.uri!), DocumentsContract.Document.ColumnMimeType
{ IsDirectory: true } => new AndroidStorageFolder(Activity, t.uri!, false), };
_ => null if (childrenUri != null)
}) {
.Where(i => i is not null) using var cursor = contentResolver.Query(childrenUri, projection, null, null, null);
.ToArray()!;
} 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 internal sealed class WellKnownAndroidStorageFolder : AndroidStorageFolder

Loading…
Cancel
Save