diff --git a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs index d8cd173183..31c4d0c60c 100644 --- a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs +++ b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs @@ -159,7 +159,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder public Task CreateFileAsync(string name) { var mimeType = MimeTypeMap.Singleton?.GetMimeTypeFromExtension(MimeTypeMap.GetFileExtensionFromUrl(name)) ?? "application/octet-stream"; - var treeUri = DocumentsContract.BuildDocumentUriUsingTree(Uri, DocumentsContract.GetTreeDocumentId(Uri)); + var treeUri = GetTreeUri().treeUri; var newFile = DocumentsContract.CreateDocument(Activity.ContentResolver!, treeUri!, mimeType, name); if(newFile == null) { @@ -171,7 +171,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder public Task CreateFolderAsync(string name) { - var treeUri = DocumentsContract.BuildDocumentUriUsingTree(Uri, DocumentsContract.GetTreeDocumentId(Uri)); + var treeUri = GetTreeUri().treeUri; var newFolder = DocumentsContract.CreateDocument(Activity.ContentResolver!, treeUri!, DocumentsContract.Document.MimeTypeDir, name); if (newFolder == null) { @@ -207,7 +207,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder } } - var treeUri = DocumentsContract.BuildDocumentUriUsingTree(storageFolder.Uri, DocumentsContract.GetTreeDocumentId(storageFolder.Uri)); + var treeUri = GetTreeUri().treeUri; DocumentsContract.DeleteDocument(Activity.ContentResolver!, treeUri!); } } @@ -230,9 +230,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder yield break; } - var root = PermissionRoot ?? Uri; - var folderId = root != Uri ? DocumentsContract.GetDocumentId(Uri) : DocumentsContract.GetTreeDocumentId(Uri); - var childrenUri = DocumentsContract.BuildChildDocumentsUriUsingTree(root, folderId); + var (root, childrenUri) = GetTreeUri(); var projection = new[] { @@ -311,9 +309,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder return null; } - var root = PermissionRoot ?? Uri; - var folderId = root != Uri ? DocumentsContract.GetDocumentId(Uri) : DocumentsContract.GetTreeDocumentId(Uri); - var childrenUri = DocumentsContract.BuildChildDocumentsUriUsingTree(root, folderId); + var (root, childrenUri) = GetTreeUri(); var projection = new[] { @@ -370,6 +366,13 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder var file = await GetItemAsync(name, false); return (IStorageFile?)file; } + + private (AndroidUri root, AndroidUri? treeUri) GetTreeUri() + { + var root = PermissionRoot ?? Uri; + var folderId = root != Uri ? DocumentsContract.GetDocumentId(Uri) : DocumentsContract.GetTreeDocumentId(Uri); + return (root, DocumentsContract.BuildChildDocumentsUriUsingTree(root, folderId)); + } } internal sealed class WellKnownAndroidStorageFolder : AndroidStorageFolder