9405f15afa413f0f633ba9b07894fde2d3642098
[platform/core/csapi/tizenfx.git] / src / Tizen.System.Information / RuntimeInfo / RuntimeInfoEventHandler.cs
1 /*
2 * Copyright (c) 2016 - 2017 Samsung Electronics Co., Ltd All Rights Reserved
3 *
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 using System;
18
19 namespace Tizen.System
20 {
21     internal class RuntimeInfoEventHandler
22     {
23         private RuntimeInfoKey Key;
24         private event EventHandler<RuntimeFeatureStatusChangedEventArgs> Handler;
25
26         internal RuntimeInfoEventHandler(RuntimeInfoKey key)
27         {
28             Key = key;
29             Handler = null;
30         }
31
32         private static Interop.RuntimeInfo.RuntimeInformationChangedCallback __callback;
33
34         internal event EventHandler<RuntimeFeatureStatusChangedEventArgs> EventHandler
35         {
36             add
37             {
38                 if (Handler == null)
39                 {
40                     __callback = (RuntimeInfoKey num, IntPtr userData) =>
41                     {
42                         string strKey = "Invalid";
43
44                         if (num > 0 && Information.EnumStringMapping.ContainsKey(num))
45                         {
46                             strKey = Information.EnumStringMapping[num];
47                         }
48
49                         RuntimeFeatureStatusChangedEventArgs eventArgs = new RuntimeFeatureStatusChangedEventArgs()
50                         {
51                             Key = Information.HttpPrefix + Information.RuntimeInfoStringKeyPrefix + strKey
52                         };
53
54                         Handler?.Invoke(null, eventArgs);
55                     };
56
57                     InformationError ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(Key, __callback, IntPtr.Zero);
58                     if (ret != InformationError.None)
59                     {
60                         Log.Error(InformationErrorFactory.LogTag, "Interop failed to add event handler");
61                         InformationErrorFactory.ThrowException(ret);
62                     }
63                 }
64                 Handler += value;
65             }
66             remove
67             {
68                 Handler -= value;
69                 if (Handler == null)
70                 {
71                     InformationError ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(Key);
72                     if (ret != InformationError.None)
73                     {
74                         Log.Error(InformationErrorFactory.LogTag, "Interop failed to add event handler");
75                         InformationErrorFactory.ThrowException(ret);
76                     }
77                 }
78             }
79         }
80     }
81 }