Browse Source

Fixed the creation of files/folders in a subfolder, as well as its deletion on android (#20578) (#20750)

* fix creation of files/folders in subfolder (instead of the root folder)

* fix delete subfolder (instead of the root folder)

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
Co-authored-by: Emmanuel Hansen <emmausssss@gmail.com>
pull/20776/head
Paulsams 4 weeks ago
committed by GitHub
parent
commit
8631bc1bc7
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 21
      src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs

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

@ -159,7 +159,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
public Task<IStorageFile?> CreateFileAsync(string name) public Task<IStorageFile?> CreateFileAsync(string name)
{ {
var mimeType = MimeTypeMap.Singleton?.GetMimeTypeFromExtension(MimeTypeMap.GetFileExtensionFromUrl(name)) ?? "application/octet-stream"; 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); var newFile = DocumentsContract.CreateDocument(Activity.ContentResolver!, treeUri!, mimeType, name);
if(newFile == null) if(newFile == null)
{ {
@ -171,7 +171,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
public Task<IStorageFolder?> CreateFolderAsync(string name) public Task<IStorageFolder?> 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); var newFolder = DocumentsContract.CreateDocument(Activity.ContentResolver!, treeUri!, DocumentsContract.Document.MimeTypeDir, name);
if (newFolder == null) 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!); DocumentsContract.DeleteDocument(Activity.ContentResolver!, treeUri!);
} }
} }
@ -230,9 +230,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
yield break; yield break;
} }
var root = PermissionRoot ?? Uri; var (root, childrenUri) = GetTreeUri();
var folderId = root != Uri ? DocumentsContract.GetDocumentId(Uri) : DocumentsContract.GetTreeDocumentId(Uri);
var childrenUri = DocumentsContract.BuildChildDocumentsUriUsingTree(root, folderId);
var projection = new[] var projection = new[]
{ {
@ -311,9 +309,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
return null; return null;
} }
var root = PermissionRoot ?? Uri; var (root, childrenUri) = GetTreeUri();
var folderId = root != Uri ? DocumentsContract.GetDocumentId(Uri) : DocumentsContract.GetTreeDocumentId(Uri);
var childrenUri = DocumentsContract.BuildChildDocumentsUriUsingTree(root, folderId);
var projection = new[] var projection = new[]
{ {
@ -370,6 +366,13 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder
var file = await GetItemAsync(name, false); var file = await GetItemAsync(name, false);
return (IStorageFile?)file; 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 internal sealed class WellKnownAndroidStorageFolder : AndroidStorageFolder

Loading…
Cancel
Save