Browse Source

Merge branch 'master' into patch-1

pull/10553/head
tkefauver 3 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>();
}
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

Loading…
Cancel
Save