Browse Source

Add Android version checks where necessary (#14896)

pull/14905/head
Julien Lebosquain 2 years ago
committed by GitHub
parent
commit
87b72e897e
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      src/Android/Avalonia.Android/AvaloniaMainActivity.cs
  2. 4
      src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidKeyboardEventsHelper.cs
  3. 2
      src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidMotionEventsHelper.cs
  4. 3
      src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs
  5. 22
      src/Android/Avalonia.Android/Platform/Storage/AndroidStorageProvider.cs

1
src/Android/Avalonia.Android/AvaloniaMainActivity.cs

@ -31,6 +31,7 @@ namespace Avalonia.Android
remove { _onDeactivated -= value; } remove { _onDeactivated -= value; }
} }
[ObsoletedOSPlatform("android33.0")]
public override void OnBackPressed() public override void OnBackPressed()
{ {
var eventArgs = new AndroidBackRequestedEventArgs(); var eventArgs = new AndroidBackRequestedEventArgs();

4
src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidKeyboardEventsHelper.cs

@ -1,6 +1,7 @@
#nullable enable #nullable enable
using System; using System;
using System.Runtime.Versioning;
using Android.Views; using Android.Views;
using Avalonia.Android.Platform.Input; using Avalonia.Android.Platform.Input;
using Avalonia.Android.Platform.SkiaPlatform; using Avalonia.Android.Platform.SkiaPlatform;
@ -32,6 +33,7 @@ namespace Avalonia.Android.Platform.Specific.Helpers
return DispatchKeyEventInternal(e, out callBase); return DispatchKeyEventInternal(e, out callBase);
} }
[ObsoletedOSPlatform("android29.0")]
static string? UnicodeTextInput(KeyEvent keyEvent) static string? UnicodeTextInput(KeyEvent keyEvent)
{ {
return keyEvent.Action == KeyEventActions.Multiple return keyEvent.Action == KeyEventActions.Multiple
@ -43,7 +45,7 @@ namespace Avalonia.Android.Platform.Specific.Helpers
private bool? DispatchKeyEventInternal(KeyEvent e, out bool callBase) 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) if (e.Action == KeyEventActions.Multiple && unicodeTextInput == null)
{ {

2
src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidMotionEventsHelper.cs

@ -145,7 +145,7 @@ namespace Avalonia.Android.Platform.Specific.Helpers
{ {
modifiers |= RawInputModifiers.XButton2MouseButton; modifiers |= RawInputModifiers.XButton2MouseButton;
} }
if (buttonState.HasAnyFlag(MotionEventButtonState.StylusPrimary)) if (OperatingSystem.IsAndroidVersionAtLeast(23) && buttonState.HasAnyFlag(MotionEventButtonState.StylusPrimary))
{ {
modifiers |= RawInputModifiers.PenBarrelButton; modifiers |= RawInputModifiers.PenBarrelButton;
} }

3
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) private bool IsVirtualFile(Context context, AndroidUri uri)
{ {
if (!OperatingSystem.IsAndroidVersionAtLeast(24))
return false;
if (!DocumentsContract.IsDocumentUri(context, uri)) if (!DocumentsContract.IsDocumentUri(context, uri))
return false; return false;

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

@ -150,10 +150,7 @@ internal class AndroidStorageProvider : IStorageProvider
intent = intent.PutExtra(Intent.ExtraMimeTypes, mimeTypes); intent = intent.PutExtra(Intent.ExtraMimeTypes, mimeTypes);
} }
if (TryGetInitialUri(options.SuggestedStartLocation) is { } initialUri) intent = TryAddExtraInitialUri(intent, options.SuggestedStartLocation);
{
intent = intent.PutExtra(DocumentsContract.ExtraInitialUri, initialUri);
}
var pickerIntent = Intent.CreateChooser(intent, options.Title ?? "Select file"); var pickerIntent = Intent.CreateChooser(intent, options.Title ?? "Select file");
@ -183,10 +180,7 @@ internal class AndroidStorageProvider : IStorageProvider
intent = intent.PutExtra(Intent.ExtraTitle, fileName); intent = intent.PutExtra(Intent.ExtraTitle, fileName);
} }
if (TryGetInitialUri(options.SuggestedStartLocation) is { } initialUri) intent = TryAddExtraInitialUri(intent, options.SuggestedStartLocation);
{
intent = intent.PutExtra(DocumentsContract.ExtraInitialUri, initialUri);
}
var pickerIntent = Intent.CreateChooser(intent, options.Title ?? "Save file"); var pickerIntent = Intent.CreateChooser(intent, options.Title ?? "Save file");
@ -198,10 +192,8 @@ internal class AndroidStorageProvider : IStorageProvider
{ {
var intent = new Intent(Intent.ActionOpenDocumentTree) var intent = new Intent(Intent.ActionOpenDocumentTree)
.PutExtra(Intent.ExtraAllowMultiple, options.AllowMultiple); .PutExtra(Intent.ExtraAllowMultiple, options.AllowMultiple);
if (TryGetInitialUri(options.SuggestedStartLocation) is { } initialUri)
{ intent = TryAddExtraInitialUri(intent, options.SuggestedStartLocation);
intent = intent.PutExtra(DocumentsContract.ExtraInitialUri, initialUri);
}
var pickerIntent = Intent.CreateChooser(intent, options.Title ?? "Select folder"); 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) if (OperatingSystem.IsAndroidVersionAtLeast(26)
&& (folder as AndroidStorageItem)?.Uri is { } uri) && (folder as AndroidStorageItem)?.Uri is { } uri)
{ {
return uri; return intent.PutExtra(DocumentsContract.ExtraInitialUri, uri);
} }
return null; return intent;
} }
private async Task EnsureUriReadPermission(AndroidUri androidUri) private async Task EnsureUriReadPermission(AndroidUri androidUri)

Loading…
Cancel
Save