committed by
GitHub
13 changed files with 158 additions and 144 deletions
@ -1,105 +0,0 @@ |
|||||
using Android.OS; |
|
||||
using AndroidX.AppCompat.App; |
|
||||
using Android.Content.Res; |
|
||||
using AndroidX.Lifecycle; |
|
||||
using Avalonia.Controls.ApplicationLifetimes; |
|
||||
using Avalonia.Controls; |
|
||||
using Android.Runtime; |
|
||||
using Android.App; |
|
||||
using Android.Content; |
|
||||
using System; |
|
||||
|
|
||||
namespace Avalonia.Android |
|
||||
{ |
|
||||
public abstract class AvaloniaActivity : AppCompatActivity |
|
||||
{ |
|
||||
internal class SingleViewLifetime : ISingleViewApplicationLifetime |
|
||||
{ |
|
||||
public AvaloniaView View { get; internal set; } |
|
||||
|
|
||||
public Control MainView |
|
||||
{ |
|
||||
get => (Control)View.Content; |
|
||||
set => View.Content = value; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
internal Action<int, Result, Intent> ActivityResult; |
|
||||
internal AvaloniaView View; |
|
||||
internal AvaloniaViewModel _viewModel; |
|
||||
|
|
||||
protected abstract AppBuilder CreateAppBuilder(); |
|
||||
|
|
||||
protected override void OnCreate(Bundle savedInstanceState) |
|
||||
{ |
|
||||
var builder = CreateAppBuilder(); |
|
||||
|
|
||||
|
|
||||
var lifetime = new SingleViewLifetime(); |
|
||||
|
|
||||
builder.AfterSetup(x => |
|
||||
{ |
|
||||
_viewModel = new ViewModelProvider(this).Get(Java.Lang.Class.FromType(typeof(AvaloniaViewModel))) as AvaloniaViewModel; |
|
||||
|
|
||||
View = new AvaloniaView(this); |
|
||||
if (_viewModel.Content != null) |
|
||||
{ |
|
||||
View.Content = _viewModel.Content; |
|
||||
} |
|
||||
|
|
||||
SetContentView(View); |
|
||||
lifetime.View = View; |
|
||||
|
|
||||
View.Prepare(); |
|
||||
}); |
|
||||
|
|
||||
builder.SetupWithLifetime(lifetime); |
|
||||
|
|
||||
base.OnCreate(savedInstanceState); |
|
||||
} |
|
||||
public object Content |
|
||||
{ |
|
||||
get |
|
||||
{ |
|
||||
return _viewModel.Content; |
|
||||
} |
|
||||
set |
|
||||
{ |
|
||||
_viewModel.Content = value; |
|
||||
if (View != null) |
|
||||
View.Content = value; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public override void OnConfigurationChanged(Configuration newConfig) |
|
||||
{ |
|
||||
base.OnConfigurationChanged(newConfig); |
|
||||
} |
|
||||
|
|
||||
protected override void OnDestroy() |
|
||||
{ |
|
||||
View.Content = null; |
|
||||
|
|
||||
base.OnDestroy(); |
|
||||
} |
|
||||
|
|
||||
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) |
|
||||
{ |
|
||||
base.OnActivityResult(requestCode, resultCode, data); |
|
||||
|
|
||||
ActivityResult?.Invoke(requestCode, resultCode, data); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public abstract class AvaloniaActivity<TApp> : AvaloniaActivity where TApp : Application, new() |
|
||||
{ |
|
||||
protected virtual AppBuilder CustomizeAppBuilder(AppBuilder builder) => builder.UseAndroid(); |
|
||||
|
|
||||
protected override AppBuilder CreateAppBuilder() |
|
||||
{ |
|
||||
var builder = AppBuilder.Configure<TApp>(); |
|
||||
|
|
||||
return CustomizeAppBuilder(builder); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -0,0 +1,72 @@ |
|||||
|
using System; |
||||
|
using Android.App; |
||||
|
using Android.Content; |
||||
|
using Android.Content.Res; |
||||
|
using Android.OS; |
||||
|
using Android.Runtime; |
||||
|
using AndroidX.AppCompat.App; |
||||
|
using AndroidX.Lifecycle; |
||||
|
|
||||
|
namespace Avalonia.Android |
||||
|
{ |
||||
|
public abstract class AvaloniaMainActivity : AppCompatActivity |
||||
|
{ |
||||
|
internal static object ViewContent; |
||||
|
|
||||
|
internal Action<int, Result, Intent> ActivityResult; |
||||
|
internal AvaloniaView View; |
||||
|
|
||||
|
protected override void OnCreate(Bundle savedInstanceState) |
||||
|
{ |
||||
|
View = new AvaloniaView(this); |
||||
|
if (ViewContent != null) |
||||
|
{ |
||||
|
View.Content = ViewContent; |
||||
|
} |
||||
|
|
||||
|
View.Prepare(); |
||||
|
|
||||
|
if (Avalonia.Application.Current.ApplicationLifetime is SingleViewLifetime lifetime) |
||||
|
{ |
||||
|
lifetime.View = View; |
||||
|
} |
||||
|
|
||||
|
base.OnCreate(savedInstanceState); |
||||
|
|
||||
|
SetContentView(View); |
||||
|
} |
||||
|
|
||||
|
public object Content |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return ViewContent; |
||||
|
} |
||||
|
set |
||||
|
{ |
||||
|
ViewContent = value; |
||||
|
if (View != null) |
||||
|
View.Content = value; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public override void OnConfigurationChanged(Configuration newConfig) |
||||
|
{ |
||||
|
base.OnConfigurationChanged(newConfig); |
||||
|
} |
||||
|
|
||||
|
protected override void OnDestroy() |
||||
|
{ |
||||
|
View.Content = null; |
||||
|
|
||||
|
base.OnDestroy(); |
||||
|
} |
||||
|
|
||||
|
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) |
||||
|
{ |
||||
|
base.OnActivityResult(requestCode, resultCode, data); |
||||
|
|
||||
|
ActivityResult?.Invoke(requestCode, resultCode, data); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,34 @@ |
|||||
|
using Android.OS; |
||||
|
using AndroidX.AppCompat.App; |
||||
|
using AndroidX.Lifecycle; |
||||
|
|
||||
|
namespace Avalonia.Android |
||||
|
{ |
||||
|
public abstract class AvaloniaSplashActivity : AppCompatActivity |
||||
|
{ |
||||
|
protected abstract AppBuilder CreateAppBuilder(); |
||||
|
|
||||
|
protected override void OnCreate(Bundle? savedInstanceState) |
||||
|
{ |
||||
|
base.OnCreate(savedInstanceState); |
||||
|
|
||||
|
var builder = CreateAppBuilder(); |
||||
|
|
||||
|
var lifetime = new SingleViewLifetime(); |
||||
|
|
||||
|
builder.SetupWithLifetime(lifetime); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public abstract class AvaloniaSplashActivity<TApp> : AvaloniaSplashActivity where TApp : Application, new() |
||||
|
{ |
||||
|
protected virtual AppBuilder CustomizeAppBuilder(AppBuilder builder) => builder.UseAndroid(); |
||||
|
|
||||
|
protected override AppBuilder CreateAppBuilder() |
||||
|
{ |
||||
|
var builder = AppBuilder.Configure<TApp>(); |
||||
|
|
||||
|
return CustomizeAppBuilder(builder); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,11 +0,0 @@ |
|||||
using System; |
|
||||
using System.Collections.Generic; |
|
||||
using System.Text; |
|
||||
|
|
||||
namespace Avalonia.Android |
|
||||
{ |
|
||||
internal class AvaloniaViewModel : AndroidX.Lifecycle.ViewModel |
|
||||
{ |
|
||||
public object Content { get; set; } |
|
||||
} |
|
||||
} |
|
||||
@ -0,0 +1,26 @@ |
|||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Controls.ApplicationLifetimes; |
||||
|
|
||||
|
namespace Avalonia.Android |
||||
|
{ |
||||
|
internal class SingleViewLifetime : ISingleViewApplicationLifetime |
||||
|
{ |
||||
|
private AvaloniaView _view; |
||||
|
|
||||
|
public AvaloniaView View |
||||
|
{ |
||||
|
get => _view; internal set |
||||
|
{ |
||||
|
if (_view != null) |
||||
|
{ |
||||
|
_view.Content = null; |
||||
|
_view.Dispose(); |
||||
|
} |
||||
|
_view = value; |
||||
|
_view.Content = MainView; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public Control MainView { get; set; } |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue