|
@@ -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)
|
|
|
};
|
|
|
}
|
|
|
|