Browse Source
* add lifetime with view factory on android * rename android lifetime interface * add warning when using ISingleViewApplicationLifetime for android, set current main activity reference on OnResume * fix nitpull/19123/head
committed by
GitHub
8 changed files with 78 additions and 52 deletions
@ -0,0 +1,28 @@ |
|||||
|
using System; |
||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Controls.ApplicationLifetimes; |
||||
|
using Avalonia.Logging; |
||||
|
|
||||
|
namespace Avalonia.Android; |
||||
|
|
||||
|
internal class ApplicationLifetime : IActivityApplicationLifetime, ISingleViewApplicationLifetime |
||||
|
{ |
||||
|
private Control? _mainView; |
||||
|
|
||||
|
public Func<Control>? MainViewFactory { get; set; } |
||||
|
|
||||
|
public Control? MainView |
||||
|
{ |
||||
|
get => _mainView; set |
||||
|
{ |
||||
|
_mainView = value; |
||||
|
|
||||
|
Logger.TryGet(LogEventLevel.Warning, LogArea.AndroidPlatform)?.Log(this, "ISingleViewApplicationLifetime.MainView is not fully supported on Android." + |
||||
|
" Consider setting IActivityApplicationLifetime.MainViewFactory."); |
||||
|
if (_mainView != null) |
||||
|
MainViewFactory = () => _mainView; |
||||
|
else |
||||
|
MainViewFactory = null; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,46 +0,0 @@ |
|||||
using System.Diagnostics.CodeAnalysis; |
|
||||
using Avalonia.Controls; |
|
||||
using Avalonia.Controls.ApplicationLifetimes; |
|
||||
|
|
||||
namespace Avalonia.Android; |
|
||||
|
|
||||
internal class SingleViewLifetime : ISingleViewApplicationLifetime, ISingleTopLevelApplicationLifetime |
|
||||
{ |
|
||||
private Control? _mainView; |
|
||||
private AvaloniaMainActivity? _activity; |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// Since Main Activity can be swapped, we should adjust lifetime as well.
|
|
||||
/// </summary>
|
|
||||
public AvaloniaMainActivity Activity |
|
||||
{ |
|
||||
[return: MaybeNull] get => _activity!; |
|
||||
internal set |
|
||||
{ |
|
||||
if (_activity != null) |
|
||||
{ |
|
||||
_activity.Content = null; |
|
||||
} |
|
||||
_activity = value; |
|
||||
_activity.Content = _mainView; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public Control? MainView |
|
||||
{ |
|
||||
get => _mainView; |
|
||||
set |
|
||||
{ |
|
||||
if (_mainView != value) |
|
||||
{ |
|
||||
_mainView = value; |
|
||||
if (_activity != null) |
|
||||
{ |
|
||||
_activity.Content = _mainView; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public TopLevel? TopLevel => _activity?._view?.TopLevel; |
|
||||
} |
|
||||
@ -0,0 +1,11 @@ |
|||||
|
using System; |
||||
|
using Avalonia.Metadata; |
||||
|
|
||||
|
namespace Avalonia.Controls.ApplicationLifetimes |
||||
|
{ |
||||
|
[NotClientImplementable] |
||||
|
public interface IActivityApplicationLifetime : IApplicationLifetime |
||||
|
{ |
||||
|
Func<Control>? MainViewFactory { get; set; } |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue