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.Nfc
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 NfcManagerImpl
44 private event EventHandler<ActivationChangedEventArgs> _activationChanged;
45 private event EventHandler<NdefMessageDiscoveredEventArgs> _ndefMessageDiscovered;
47 private Interop.Nfc.ActivationChangedCallback _activationChangedCallback;
48 private Interop.Nfc.NdefMessageDiscoveredCallback _ndefMessageDiscoveredCallback;
50 internal event EventHandler<ActivationChangedEventArgs> ActivationChanged
54 if (_activationChanged == null)
56 RegisterActivationChangedEvent();
58 _activationChanged += value;
62 _activationChanged -= value;
63 if (_activationChanged == null)
65 UnregisterActivationChangedEvent();
70 internal event EventHandler<NdefMessageDiscoveredEventArgs> NdefMessageDiscovered
74 if (_ndefMessageDiscovered == null)
76 RegisterNdefMessageDiscoveredEvent();
78 _ndefMessageDiscovered += value;
82 _ndefMessageDiscovered -= value;
83 if (_ndefMessageDiscovered == null)
85 UnregisterNdefMessageDiscoveredEvent();
90 internal void RemoveAllRegisteredEvent()
92 //unregister all remaining events when this object is released.
93 if (_activationChanged != null)
95 UnregisterActivationChangedEvent();
99 private void RegisterActivationChangedEvent()
101 _activationChangedCallback = (bool activated, IntPtr userData) =>
103 bool isActivated = activated;
104 ActivationChangedEventArgs e = new ActivationChangedEventArgs(isActivated);
105 _activationChanged.SafeInvoke(null, e);
107 int ret = Interop.Nfc.SetActivationChangedCallback(_activationChangedCallback, IntPtr.Zero);
108 if (ret != (int)NfcError.None)
110 Log.Error(Globals.LogTag, "Failed to set activation changed callback, Error - " + (NfcError)ret);
114 private void UnregisterActivationChangedEvent()
116 Interop.Nfc.UnsetActivationChangedCallback();
119 private void RegisterNdefMessageDiscoveredEvent()
121 _ndefMessageDiscoveredCallback = (IntPtr ndefMessageHandle, IntPtr userData) =>
123 NdefMessageDiscoveredEventArgs e = new NdefMessageDiscoveredEventArgs(ndefMessageHandle);
124 _ndefMessageDiscovered.SafeInvoke(null, e);
127 int ret = Interop.Nfc.SetNdefDiscoveredCallback(_ndefMessageDiscoveredCallback, IntPtr.Zero);
128 if (ret != (int)NfcError.None)
130 Log.Error(Globals.LogTag, "Failed to set ndef message discovered callback, Error - " + (NfcError)ret);
134 private void UnregisterNdefMessageDiscoveredEvent()
136 Interop.Nfc.UnsetNdefDiscoveredCallback();