AndroidPlatform.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 AppBuilder UseAndroid(this AppBuilder builder)
  18. {
  19. return builder
  20. .UseWindowingSubsystem(() => AndroidPlatform.Initialize(), "Android")
  21. .UseSkia();
  22. }
  23. }
  24. }
  25. namespace Avalonia.Android
  26. {
  27. class AndroidPlatform
  28. {
  29. public static readonly AndroidPlatform Instance = new AndroidPlatform();
  30. public static AndroidPlatformOptions Options { get; private set; }
  31. internal static Compositor Compositor { get; private set; }
  32. internal static PlatformRenderInterfaceContextManager RenderInterface { get; private set; }
  33. public static void Initialize()
  34. {
  35. Options = AvaloniaLocator.Current.GetService<AndroidPlatformOptions>() ?? new AndroidPlatformOptions();
  36. AvaloniaLocator.CurrentMutable
  37. .Bind<IClipboard>().ToTransient<ClipboardImpl>()
  38. .Bind<ICursorFactory>().ToTransient<CursorFactory>()
  39. .Bind<IWindowingPlatform>().ToConstant(new WindowingPlatformStub())
  40. .Bind<IKeyboardDevice>().ToSingleton<AndroidKeyboardDevice>()
  41. .Bind<IPlatformSettings>().ToSingleton<AndroidPlatformSettings>()
  42. .Bind<IPlatformThreadingInterface>().ToConstant(new AndroidThreadingInterface())
  43. .Bind<IPlatformIconLoader>().ToSingleton<PlatformIconLoaderStub>()
  44. .Bind<IRenderTimer>().ToConstant(new ChoreographerTimer())
  45. .Bind<IRenderLoop>().ToConstant(new RenderLoop())
  46. .Bind<PlatformHotkeyConfiguration>().ToSingleton<PlatformHotkeyConfiguration>();
  47. if (Options.UseGpu)
  48. {
  49. EglPlatformGraphics.TryInitialize();
  50. }
  51. if (Options.UseCompositor)
  52. {
  53. Compositor = new Compositor(
  54. AvaloniaLocator.Current.GetRequiredService<IRenderLoop>(),
  55. AvaloniaLocator.Current.GetService<IPlatformGraphics>());
  56. }
  57. else
  58. RenderInterface =
  59. new PlatformRenderInterfaceContextManager(AvaloniaLocator.Current
  60. .GetService<IPlatformGraphics>());
  61. }
  62. }
  63. public sealed class AndroidPlatformOptions
  64. {
  65. public bool UseDeferredRendering { get; set; } = false;
  66. public bool UseGpu { get; set; } = true;
  67. public bool UseCompositor { get; set; } = true;
  68. }
  69. }