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