csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.1 KiB
75 lines
2.1 KiB
using Android.App;
|
|
using Avalonia.Controls.ApplicationLifetimes;
|
|
|
|
namespace Avalonia.Android.Platform;
|
|
|
|
internal class AndroidActivatableLifetime : ActivatableLifetimeBase
|
|
{
|
|
private IAvaloniaActivity? _mainActivity, _intendActivity;
|
|
|
|
/// <summary>
|
|
/// While we primarily handle main activity lifecycle events.
|
|
/// Any secondary activity might send protocol or file activation.
|
|
/// </summary>
|
|
public IAvaloniaActivity? CurrentIntendActivity
|
|
{
|
|
get => _intendActivity;
|
|
set
|
|
{
|
|
if (_intendActivity is not null)
|
|
{
|
|
_intendActivity.Activated -= IntendActivityOnActivated;
|
|
}
|
|
|
|
_intendActivity = value;
|
|
|
|
if (_intendActivity is not null)
|
|
{
|
|
_intendActivity.Activated += IntendActivityOnActivated;
|
|
}
|
|
}
|
|
}
|
|
|
|
public IAvaloniaActivity? CurrentMainActivity
|
|
{
|
|
get => _mainActivity;
|
|
set
|
|
{
|
|
if (_mainActivity is not null)
|
|
{
|
|
_mainActivity.Activated -= MainActivityOnActivated;
|
|
_mainActivity.Deactivated -= MainActivityOnDeactivated;
|
|
}
|
|
|
|
_mainActivity = value;
|
|
|
|
if (_mainActivity is not null)
|
|
{
|
|
_mainActivity.Activated += MainActivityOnActivated;
|
|
_mainActivity.Deactivated += MainActivityOnDeactivated;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override bool TryEnterBackground() => (_mainActivity as Activity)?.MoveTaskToBack(true) == true;
|
|
|
|
private void MainActivityOnDeactivated(object? sender, ActivatedEventArgs e) => OnDeactivated(e);
|
|
|
|
private void MainActivityOnActivated(object? sender, ActivatedEventArgs e)
|
|
{
|
|
if (!IsIntendActivation(e.Kind))
|
|
{
|
|
OnActivated(e);
|
|
}
|
|
}
|
|
|
|
private void IntendActivityOnActivated(object? sender, ActivatedEventArgs e)
|
|
{
|
|
if (IsIntendActivation(e.Kind))
|
|
{
|
|
OnActivated(e);
|
|
}
|
|
}
|
|
|
|
private static bool IsIntendActivation(ActivationKind kind) => kind is ActivationKind.File or ActivationKind.OpenUri;
|
|
}
|
|
|