AndroidPlatform.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using Avalonia.Controls;
  3. using Avalonia.Android;
  4. using Avalonia.Android.Platform;
  5. using Avalonia.Android.Platform.Input;
  6. using Avalonia.Input;
  7. using Avalonia.Input.Platform;
  8. using Avalonia.OpenGL.Egl;
  9. using Avalonia.Platform;
  10. using Avalonia.Rendering;
  11. using Avalonia.Rendering.Composition;
  12. using Avalonia.OpenGL;
  13. namespace Avalonia
  14. {
  15. public static class AndroidApplicationExtensions
  16. {
  17. public static T UseAndroid<T>(this T builder) where T : AppBuilderBase<T>, new()
  18. {
  19. return builder
  20. .UseWindowingSubsystem(() => AndroidPlatform.Initialize(), "Android")
  21. .UseSkia();
  22. }
  23. }
  24. }
  25. namespace Avalonia.Android
  26. {
  27. class AndroidPlatform : IPlatformSettings
  28. {
  29. public static readonly AndroidPlatform Instance = new AndroidPlatform();
  30. public static AndroidPlatformOptions Options { get; private set; }
  31. /// <inheritdoc cref="IPlatformSettings.TouchDoubleClickSize"/>
  32. public Size TouchDoubleClickSize => new Size(4, 4);
  33. /// <inheritdoc cref="IPlatformSettings.TouchDoubleClickTime"/>
  34. public TimeSpan TouchDoubleClickTime => TimeSpan.FromMilliseconds(200);
  35. public Size DoubleClickSize => TouchDoubleClickSize;
  36. public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500);
  37. internal static Compositor Compositor { get; private set; }
  38. public static void Initialize()
  39. {
  40. Options = AvaloniaLocator.Current.GetService<AndroidPlatformOptions>() ?? new AndroidPlatformOptions();
  41. AvaloniaLocator.CurrentMutable
  42. .Bind<IClipboard>().ToTransient<ClipboardImpl>()
  43. .Bind<ICursorFactory>().ToTransient<CursorFactory>()
  44. .Bind<IWindowingPlatform>().ToConstant(new WindowingPlatformStub())
  45. .Bind<IKeyboardDevice>().ToSingleton<AndroidKeyboardDevice>()
  46. .Bind<IPlatformSettings>().ToConstant(Instance)
  47. .Bind<IPlatformThreadingInterface>().ToConstant(new AndroidThreadingInterface())
  48. .Bind<IPlatformIconLoader>().ToSingleton<PlatformIconLoaderStub>()
  49. .Bind<IRenderTimer>().ToConstant(new ChoreographerTimer())
  50. .Bind<IRenderLoop>().ToConstant(new RenderLoop())
  51. .Bind<PlatformHotkeyConfiguration>().ToSingleton<PlatformHotkeyConfiguration>();
  52. if (Options.UseGpu)
  53. {
  54. EglPlatformOpenGlInterface.TryInitialize();
  55. }
  56. if (Options.UseCompositor)
  57. {
  58. Compositor = new Compositor(
  59. AvaloniaLocator.Current.GetRequiredService<IRenderLoop>(),
  60. AvaloniaLocator.Current.GetService<IPlatformOpenGlInterface>());
  61. }
  62. }
  63. }
  64. public sealed class AndroidPlatformOptions
  65. {
  66. public bool UseDeferredRendering { get; set; } = false;
  67. public bool UseGpu { get; set; } = true;
  68. public bool UseCompositor { get; set; } = true;
  69. }
  70. }