Browse Source

Locator ftw

pull/7756/head
Dan Walmsley 5 years ago
parent
commit
d7d6f8decb
  1. 17
      src/Android/Avalonia.Android/AndroidPlatform.cs
  2. 23
      src/Android/Avalonia.Android/AvaloniaActivity.cs

17
src/Android/Avalonia.Android/AndroidPlatform.cs

@ -18,24 +18,17 @@ namespace Avalonia
{
public static class AndroidApplicationExtensions
{
class SingleViewLifetime : ISingleViewApplicationLifetime
{
public AvaloniaView View;
public Control MainView
{
get => (Control)View.Content;
set => View.Content = value;
}
}
public static T UseAndroid<T>(this T builder) where T : AppBuilderBase<T>, new()
public static T UseAndroid<T>(this T builder, AvaloniaView view) where T : AppBuilderBase<T>, new()
{
var options = AvaloniaLocator.Current.GetService<AndroidPlatformOptions>() ?? new AndroidPlatformOptions();
var lifetime = AvaloniaLocator.Current.GetService<ISingleViewApplicationLifetime>();
return builder
.UseWindowingSubsystem(() => AndroidPlatform.Initialize(options), "Android")
.UseSkia()
.SetupWithLifetime(new SingleViewLifetime());
.SetupWithLifetime(lifetime);
}
}
}

23
src/Android/Avalonia.Android/AvaloniaActivity.cs

@ -1,15 +1,30 @@
using Android.App;
using Android.OS;
using Android.Views;
using Android.Content.PM;
using AndroidX.AppCompat.App;
using Android.Content.Res;
using AndroidX.Lifecycle;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Controls;
namespace Avalonia.Android
{
public abstract class AvaloniaActivity : AppCompatActivity
{
class SingleViewLifetime : ISingleViewApplicationLifetime
{
public SingleViewLifetime(AvaloniaView view)
{
View = view;
}
public AvaloniaView View;
public Control MainView
{
get => (Control)View.Content;
set => View.Content = value;
}
}
internal AvaloniaView View;
internal AvaloniaViewModel _viewModel;
protected override void OnCreate(Bundle savedInstanceState)
@ -24,6 +39,8 @@ namespace Avalonia.Android
View.Content = _viewModel.Content;
}
AvaloniaLocator.CurrentMutable.Bind<ISingleViewApplicationLifetime>().ToConstant(new SingleViewLifetime(View));
base.OnCreate(savedInstanceState);
}
public object Content

Loading…
Cancel
Save