Browse Source

Remove useless Android external permission check (#21628)

pull/21634/head
Julien Lebosquain 3 months ago
committed by GitHub
parent
commit
7467c0cf0f
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 3
      src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs
  2. 43
      src/Android/Avalonia.Android/Platform/Storage/AndroidStorageProvider.cs

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

@ -118,7 +118,8 @@ internal abstract class AndroidStorageItem : IStorageBookmarkItem
protected async Task<bool> EnsureExternalFilesPermission(bool write)
{
if (!_needsExternalFilesPermission)
// Starting in API level 33, this permission has no effect.
if (!_needsExternalFilesPermission || OperatingSystem.IsAndroidVersionAtLeast(33))
{
return true;
}

43
src/Android/Avalonia.Android/Platform/Storage/AndroidStorageProvider.cs

@ -55,15 +55,20 @@ internal class AndroidStorageProvider : IStorageProvider
return null;
}
await EnsureUriReadPermission(androidUri);
// About the READ_EXTERNAL_STORAGE permission:
// https://developer.android.com/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE
// - "Starting in API level 33, this permission has no effect."
// - "Also starting in API level 19, this permission is not required
// to read or write files in your application-specific directories [...]"
// Consequently, we don't try to check for that permission here anymore.
var javaFile = new JavaFile(androidUriPath);
if (javaFile.Exists() && javaFile.IsFile)
{
return null;
return new AndroidStorageFile(_activity, androidUri);
}
return new AndroidStorageFile(_activity, androidUri);
return null;
}
public async Task<IStorageFolder?> TryGetFolderFromPathAsync(Uri folderPath)
@ -84,15 +89,13 @@ internal class AndroidStorageProvider : IStorageProvider
return null;
}
await EnsureUriReadPermission(androidUri);
var javaFile = new JavaFile(androidUriPath);
if (javaFile.Exists() && javaFile.IsDirectory)
{
return null;
return new AndroidStorageFolder(_activity, androidUri, false);
}
return new AndroidStorageFolder(_activity, androidUri, false);
return null;
}
public Task<IStorageFolder?> TryGetWellKnownFolderAsync(WellKnownFolder wellKnownFolder)
@ -284,30 +287,4 @@ internal class AndroidStorageProvider : IStorageProvider
return intent;
}
private async Task EnsureUriReadPermission(AndroidUri androidUri)
{
bool hasPerms = false;
Exception? innerEx = null;
try
{
hasPerms = _activity.CheckUriPermission(androidUri,
global::Android.OS.Process.MyPid(),
global::Android.OS.Process.MyUid(),
ActivityFlags.GrantReadUriPermission)
== global::Android.Content.PM.Permission.Granted;
// TODO: call RequestPermission or add proper permissions API, something like in Browser File API.
hasPerms = hasPerms || await _activity.CheckPermission(Manifest.Permission.ReadExternalStorage);
}
catch (Exception ex)
{
innerEx = ex;
}
if (!hasPerms)
{
throw new InvalidOperationException("Application doesn't have READ_EXTERNAL_STORAGE permission. Make sure android manifest has this permission defined and user allowed it.", innerEx);
}
}
}

Loading…
Cancel
Save