Follow formatting NUI
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / XamlBinding / OnPlatform.cs
1 using System;
2 using System.Collections.Generic;
3 using Tizen.NUI.Xaml;
4
5 namespace Tizen.NUI.Binding
6 {
7     [ContentProperty("Platforms")]
8     internal class OnPlatform<T>
9     {
10         public OnPlatform()
11         {
12             Platforms = new List<On>();
13         }
14
15         bool useLegacyFallback;
16         T android;
17         [Obsolete]
18         public T Android
19         {
20             get { return android; }
21             set
22             {
23                 useLegacyFallback = true;
24                 android = value;
25             }
26         }
27
28         T ios;
29         [Obsolete]
30         public T iOS
31         {
32             get { return ios; }
33             set
34             {
35                 useLegacyFallback = true;
36                 ios = value;
37             }
38         }
39
40         T winPhone;
41         [Obsolete]
42         public T WinPhone
43         {
44             get { return winPhone; }
45             set
46             {
47                 useLegacyFallback = true;
48                 winPhone = value;
49             }
50         }
51
52         bool hasDefault;
53         T @default;
54         public T Default
55         {
56             get { return @default; }
57             set
58             {
59                 hasDefault = true;
60                 @default = value;
61             }
62         }
63
64         public IList<On> Platforms { get; private set; }
65
66 #pragma warning disable RECS0108 // Warns about static fields in generic types
67         static readonly IValueConverterProvider s_valueConverter = DependencyService.Get<IValueConverterProvider>();
68 #pragma warning restore RECS0108 // Warns about static fields in generic types
69
70         public static implicit operator T(OnPlatform<T> onPlatform)
71         {
72             foreach (var onPlat in onPlatform.Platforms)
73             {
74                 if (onPlat.Platform == null)
75                     continue;
76                 if (null != Device.RuntimePlatform && !onPlat.Platform.Contains(Device.RuntimePlatform))
77                     continue;
78                 if (s_valueConverter == null)
79                     continue;
80                 return (T)s_valueConverter.Convert(onPlat.Value, typeof(T), null, null);
81             }
82
83             if (!onPlatform.useLegacyFallback)
84                 return onPlatform.hasDefault ? onPlatform.@default : default(T);
85
86             //legacy fallback
87 #pragma warning disable 0618, 0612
88             return Device.OnPlatform(iOS: onPlatform.iOS, Android: onPlatform.Android, WinPhone: onPlatform.WinPhone);
89 #pragma warning restore 0618, 0612
90         }
91     }
92
93     [ContentProperty("Value")]
94     internal class On
95     {
96         [TypeConverter(typeof(ListStringTypeConverter))]
97         public IList<string> Platform { get; set; }
98         public object Value { get; set; }
99     }
100 }