|
|
|
@ -19,11 +19,6 @@ public class OnPlatformExtension<TReturn> : IAddChild<On> |
|
|
|
{ |
|
|
|
private readonly Dictionary<string, TReturn?> _values = new(); |
|
|
|
|
|
|
|
public OnPlatformExtension() |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public OnPlatformExtension(TReturn defaultValue) |
|
|
|
{ |
|
|
|
Default = defaultValue; |
|
|
|
@ -36,6 +31,10 @@ public class OnPlatformExtension<TReturn> : IAddChild<On> |
|
|
|
public TReturn? Android { get => _values.TryGetValue(nameof(Android), out var value) ? value : default; set { _values[nameof(Android)] = value; } } |
|
|
|
public TReturn? iOS { get => _values.TryGetValue(nameof(iOS), out var value) ? value : default; set { _values[nameof(iOS)] = value; } } |
|
|
|
public TReturn? Browser { get => _values.TryGetValue(nameof(Browser), out var value) ? value : default; set { _values[nameof(Browser)] = value; } } |
|
|
|
|
|
|
|
public TReturn? Desktop { get => _values.TryGetValue(nameof(Desktop), out var value) ? value : default; set { _values[nameof(Desktop)] = value; } } |
|
|
|
public TReturn? Mobile { get => _values.TryGetValue(nameof(Mobile), out var value) ? value : default; set { _values[nameof(Mobile)] = value; } } |
|
|
|
|
|
|
|
|
|
|
|
public object? ProvideValue() |
|
|
|
{ |
|
|
|
@ -48,19 +47,52 @@ public class OnPlatformExtension<TReturn> : IAddChild<On> |
|
|
|
return !hasValue ? AvaloniaProperty.UnsetValue : value; |
|
|
|
} |
|
|
|
|
|
|
|
private (TReturn? value, bool hasValue) TryGetFormFactorValues(RuntimePlatformInfo runtimeInfo) |
|
|
|
{ |
|
|
|
if (runtimeInfo.IsDesktop) |
|
|
|
{ |
|
|
|
if (_values.TryGetValue(nameof(Desktop), out var val1)) |
|
|
|
{ |
|
|
|
return (val1, true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (runtimeInfo.IsMobile) |
|
|
|
{ |
|
|
|
if (_values.TryGetValue(nameof(Mobile), out var val1)) |
|
|
|
{ |
|
|
|
return (val1, true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return default; |
|
|
|
} |
|
|
|
|
|
|
|
private (TReturn? value, bool hasValue) TryGetValueForPlatform() |
|
|
|
{ |
|
|
|
var runtimeInfo = AvaloniaLocator.Current.GetRequiredService<IRuntimePlatform>().GetRuntimeInfo(); |
|
|
|
|
|
|
|
return runtimeInfo.OperatingSystem switch |
|
|
|
{ |
|
|
|
OperatingSystemType.WinNT => _values.TryGetValue(nameof(Windows), out var val) ? (val, true) : default, |
|
|
|
OperatingSystemType.OSX => _values.TryGetValue(nameof(macOS), out var val) ? (val, true) : default, |
|
|
|
OperatingSystemType.Linux => _values.TryGetValue(nameof(Linux), out var val) ? (val, true) : default, |
|
|
|
OperatingSystemType.Android => _values.TryGetValue(nameof(Android), out var val) ? (val, true) : default, |
|
|
|
OperatingSystemType.iOS => _values.TryGetValue(nameof(iOS), out var val) ? (val, true) : default, |
|
|
|
OperatingSystemType.Browser => _values.TryGetValue(nameof(Browser), out var val) ? (val, true) : default, |
|
|
|
_ => _values.TryGetValue(nameof(Default), out var val) ? (val, true) : default |
|
|
|
OperatingSystemType.WinNT => _values.TryGetValue(nameof(Windows), out var val) ? |
|
|
|
(val, true) : |
|
|
|
TryGetFormFactorValues(runtimeInfo), |
|
|
|
OperatingSystemType.OSX => _values.TryGetValue(nameof(macOS), out var val) ? |
|
|
|
(val, true) : |
|
|
|
TryGetFormFactorValues(runtimeInfo), |
|
|
|
OperatingSystemType.Linux => _values.TryGetValue(nameof(Linux), out var val) ? |
|
|
|
(val, true) : |
|
|
|
TryGetFormFactorValues(runtimeInfo), |
|
|
|
OperatingSystemType.Android => _values.TryGetValue(nameof(Android), out var val) ? |
|
|
|
(val, true) : |
|
|
|
TryGetFormFactorValues(runtimeInfo), |
|
|
|
OperatingSystemType.iOS => _values.TryGetValue(nameof(iOS), out var val) ? |
|
|
|
(val, true) : |
|
|
|
TryGetFormFactorValues(runtimeInfo), |
|
|
|
OperatingSystemType.Browser => _values.TryGetValue(nameof(Browser), out var val) ? |
|
|
|
(val, true) : |
|
|
|
TryGetFormFactorValues(runtimeInfo), |
|
|
|
_ => _values.TryGetValue(nameof(Default), out var val) ? (val, true) : TryGetFormFactorValues(runtimeInfo) |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
|