2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 using System.Threading.Tasks;
20 namespace Tizen.Network.Mtp
22 internal static class EventHandlerExtension
24 internal static void SafeInvoke(this EventHandler evt, object sender, EventArgs e)
32 internal static void SafeInvoke<T>(this EventHandler<T> evt, object sender, T e) where T : EventArgs
42 internal partial class MtpManagerImpl
44 private event EventHandler<MtpStateChangedEventArgs> _mtpStateChanged;
46 private Interop.Mtp.MptStateChangedCallback _mtpStateChangedCallback;
48 internal event EventHandler<MtpStateChangedEventArgs> MtpStateChanged
52 if (_mtpStateChanged == null)
54 RegisterMtpStateChangedEvent();
56 _mtpStateChanged += value;
60 _mtpStateChanged -= value;
61 if (_mtpStateChanged == null)
63 UnregisterMtpStateChangedEvent();
68 private void RegisterMtpStateChangedEvent()
70 _mtpStateChangedCallback = (int eventType, int eventParameter, IntPtr userData) =>
72 MtpEventType _eventType = (MtpEventType)eventType;
73 int _eventParameter = eventParameter;
74 MtpStateChangedEventArgs e = new MtpStateChangedEventArgs(_eventType, _eventParameter);
75 _mtpStateChanged.SafeInvoke(null, e);
78 int ret = Interop.Mtp.AddMtpStateChangedCallback(_mtpStateChangedCallback, IntPtr.Zero);
79 if (ret != (int)MtpError.None)
81 Log.Error(Globals.LogTag, "Failed to add mtp state changed callback, Error - " + (MtpError)ret);
85 private void UnregisterMtpStateChangedEvent()
87 int ret = Interop.Mtp.RemoveMtpStateChangedCallback(_mtpStateChangedCallback);
89 if (ret != (int)MtpError.None)
91 Log.Error(Globals.LogTag, "Failed to remove mtp state changed callback, Error - " + (MtpError)ret);