From 87b72e897e796471a334ada1fce2145c8ffa6d91 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Sat, 9 Mar 2024 19:51:40 +0100 Subject: [PATCH] Add Android version checks where necessary (#14896) --- .../Avalonia.Android/AvaloniaMainActivity.cs | 1 + .../Helpers/AndroidKeyboardEventsHelper.cs | 4 +++- .../Helpers/AndroidMotionEventsHelper.cs | 2 +- .../Platform/Storage/AndroidStorageItem.cs | 3 +++ .../Storage/AndroidStorageProvider.cs | 22 ++++++------------- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/Android/Avalonia.Android/AvaloniaMainActivity.cs b/src/Android/Avalonia.Android/AvaloniaMainActivity.cs index b8b3906613..eed6a68eb5 100644 --- a/src/Android/Avalonia.Android/AvaloniaMainActivity.cs +++ b/src/Android/Avalonia.Android/AvaloniaMainActivity.cs @@ -31,6 +31,7 @@ namespace Avalonia.Android remove { _onDeactivated -= value; } } + [ObsoletedOSPlatform("android33.0")] public override void OnBackPressed() { var eventArgs = new AndroidBackRequestedEventArgs(); diff --git a/src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidKeyboardEventsHelper.cs b/src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidKeyboardEventsHelper.cs index 84f7757197..7e220d3f9a 100644 --- a/src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidKeyboardEventsHelper.cs +++ b/src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidKeyboardEventsHelper.cs @@ -1,6 +1,7 @@ #nullable enable using System; +using System.Runtime.Versioning; using Android.Views; using Avalonia.Android.Platform.Input; using Avalonia.Android.Platform.SkiaPlatform; @@ -32,6 +33,7 @@ namespace Avalonia.Android.Platform.Specific.Helpers return DispatchKeyEventInternal(e, out callBase); } + [ObsoletedOSPlatform("android29.0")] static string? UnicodeTextInput(KeyEvent keyEvent) { return keyEvent.Action == KeyEventActions.Multiple @@ -43,7 +45,7 @@ namespace Avalonia.Android.Platform.Specific.Helpers private bool? DispatchKeyEventInternal(KeyEvent e, out bool callBase) { - var unicodeTextInput = UnicodeTextInput(e); + var unicodeTextInput = OperatingSystem.IsAndroidVersionAtLeast(29) ? null : UnicodeTextInput(e); if (e.Action == KeyEventActions.Multiple && unicodeTextInput == null) { diff --git a/src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidMotionEventsHelper.cs b/src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidMotionEventsHelper.cs index 3d0f3b2652..d11054da60 100644 --- a/src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidMotionEventsHelper.cs +++ b/src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidMotionEventsHelper.cs @@ -145,7 +145,7 @@ namespace Avalonia.Android.Platform.Specific.Helpers { modifiers |= RawInputModifiers.XButton2MouseButton; } - if (buttonState.HasAnyFlag(MotionEventButtonState.StylusPrimary)) + if (OperatingSystem.IsAndroidVersionAtLeast(23) && buttonState.HasAnyFlag(MotionEventButtonState.StylusPrimary)) { modifiers |= RawInputModifiers.PenBarrelButton; } diff --git a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs index 54bcb4b196..0b51350419 100644 --- a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs +++ b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs @@ -353,6 +353,9 @@ internal sealed class AndroidStorageFile : AndroidStorageItem, IStorageBookmarkF private bool IsVirtualFile(Context context, AndroidUri uri) { + if (!OperatingSystem.IsAndroidVersionAtLeast(24)) + return false; + if (!DocumentsContract.IsDocumentUri(context, uri)) return false; diff --git a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageProvider.cs b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageProvider.cs index b249020784..daf1111bea 100644 --- a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageProvider.cs +++ b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageProvider.cs @@ -150,10 +150,7 @@ internal class AndroidStorageProvider : IStorageProvider intent = intent.PutExtra(Intent.ExtraMimeTypes, mimeTypes); } - if (TryGetInitialUri(options.SuggestedStartLocation) is { } initialUri) - { - intent = intent.PutExtra(DocumentsContract.ExtraInitialUri, initialUri); - } + intent = TryAddExtraInitialUri(intent, options.SuggestedStartLocation); var pickerIntent = Intent.CreateChooser(intent, options.Title ?? "Select file"); @@ -183,10 +180,7 @@ internal class AndroidStorageProvider : IStorageProvider intent = intent.PutExtra(Intent.ExtraTitle, fileName); } - if (TryGetInitialUri(options.SuggestedStartLocation) is { } initialUri) - { - intent = intent.PutExtra(DocumentsContract.ExtraInitialUri, initialUri); - } + intent = TryAddExtraInitialUri(intent, options.SuggestedStartLocation); var pickerIntent = Intent.CreateChooser(intent, options.Title ?? "Save file"); @@ -198,10 +192,8 @@ internal class AndroidStorageProvider : IStorageProvider { var intent = new Intent(Intent.ActionOpenDocumentTree) .PutExtra(Intent.ExtraAllowMultiple, options.AllowMultiple); - if (TryGetInitialUri(options.SuggestedStartLocation) is { } initialUri) - { - intent = intent.PutExtra(DocumentsContract.ExtraInitialUri, initialUri); - } + + intent = TryAddExtraInitialUri(intent, options.SuggestedStartLocation); var pickerIntent = Intent.CreateChooser(intent, options.Title ?? "Select folder"); @@ -265,15 +257,15 @@ internal class AndroidStorageProvider : IStorageProvider } } - private static AndroidUri? TryGetInitialUri(IStorageFolder? folder) + private static Intent TryAddExtraInitialUri(Intent intent, IStorageFolder? folder) { if (OperatingSystem.IsAndroidVersionAtLeast(26) && (folder as AndroidStorageItem)?.Uri is { } uri) { - return uri; + return intent.PutExtra(DocumentsContract.ExtraInitialUri, uri); } - return null; + return intent; } private async Task EnsureUriReadPermission(AndroidUri androidUri)