Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.Network.Mtp / Tizen.Network.Mtp / MtpManagerEvent.cs
1 /*
2  * Copyright (c) 2016 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 using System.Threading.Tasks;
19
20 namespace Tizen.Network.Mtp
21 {
22     internal static class EventHandlerExtension
23     {
24         internal static void SafeInvoke(this EventHandler evt, object sender, EventArgs e)
25         {
26             var handler = evt;
27             if (handler != null)
28             {
29                 handler(sender, e);
30             }
31         }
32         internal static void SafeInvoke<T>(this EventHandler<T> evt, object sender, T e) where T : EventArgs
33         {
34             var handler = evt;
35             if (handler != null)
36             {
37                 handler(sender, e);
38             }
39         }
40     }
41
42     internal partial class MtpManagerImpl
43     {
44         private event EventHandler<MtpStateChangedEventArgs> _mtpStateChanged;
45
46         private Interop.Mtp.MptStateChangedCallback _mtpStateChangedCallback;
47
48         internal event EventHandler<MtpStateChangedEventArgs> MtpStateChanged
49         {
50             add
51             {
52                 if (_mtpStateChanged == null)
53                 {
54                     RegisterMtpStateChangedEvent();
55                 }
56                 _mtpStateChanged += value;
57             }
58             remove
59             {
60                 _mtpStateChanged -= value;
61                 if (_mtpStateChanged == null)
62                 {
63                     UnregisterMtpStateChangedEvent();
64                 }
65             }
66         }
67
68         private void RegisterMtpStateChangedEvent()
69         {
70             _mtpStateChangedCallback = (int eventType, int eventParameter, IntPtr userData) =>
71             {
72                 MtpEventType _eventType = (MtpEventType)eventType;
73                 int _eventParameter = eventParameter;
74                 MtpStateChangedEventArgs e = new MtpStateChangedEventArgs(_eventType, _eventParameter);
75                 _mtpStateChanged.SafeInvoke(null, e);
76             };
77
78             int ret = Interop.Mtp.AddMtpStateChangedCallback(_mtpStateChangedCallback, IntPtr.Zero);
79             if (ret != (int)MtpError.None)
80             {
81                 Log.Error(Globals.LogTag, "Failed to add mtp state changed callback, Error - " + (MtpError)ret);
82             }
83         }
84
85         private void UnregisterMtpStateChangedEvent()
86         {
87             int ret = Interop.Mtp.RemoveMtpStateChangedCallback(_mtpStateChangedCallback);
88
89             if (ret != (int)MtpError.None)
90             {
91                 Log.Error(Globals.LogTag, "Failed to remove mtp state changed callback, Error - " + (MtpError)ret);
92             }
93         }
94     }
95 }