[NUI] Move WeakEvent to public and remove unused WeakEventHandler class
[platform/core/csapi/tizenfx.git] / src / Tizen.Network.Nfc / Tizen.Network.Nfc / NfcNdefMessage.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.Runtime.InteropServices;
19 using System.Collections.Generic;
20
21 namespace Tizen.Network.Nfc
22 {
23     /// <summary>
24     /// A class for the NDEF Message information. It allows applications to use the NDEF Message information.
25     /// </summary>
26     /// <since_tizen> 3 </since_tizen>
27     public class NfcNdefMessage : IDisposable
28     {
29         private bool disposed = false;
30         private IntPtr _messageHandle = IntPtr.Zero;
31         private List<NfcNdefRecord> _recordList = new List<NfcNdefRecord>();
32
33         /// <summary>
34         /// The number of records in the NDEF message.
35         /// </summary>
36         /// <since_tizen> 3 </since_tizen>
37         public int RecordCount
38         {
39             get
40             {
41                 int recordCount;
42                 int ret = Interop.Nfc.NdefMessage.GetRecordCount(_messageHandle, out recordCount);
43                 if (ret != (int)NfcError.None)
44                 {
45                     Log.Error(Globals.LogTag, "Failed to get record count, Error - " + (NfcError)ret);
46                 }
47                 return recordCount;
48             }
49         }
50
51         /// <summary>
52         /// Creates an object for the access point.
53         /// </summary>
54         /// <since_tizen> 3 </since_tizen>
55         /// <exception cref="NotSupportedException">Thrown when the NFC is not supported.</exception>
56         /// <exception cref="InvalidOperationException">Thrown when the method fails due to an invalid operation.</exception>
57         public NfcNdefMessage()
58         {
59             int ret = Interop.Nfc.NdefMessage.Create(out _messageHandle);
60
61             if (ret != (int)NfcError.None)
62             {
63                 Log.Error(Globals.LogTag, "Failed to create Ndef message, Error - " + (NfcError)ret);
64                 NfcErrorFactory.ThrowNfcException(ret);
65             }
66         }
67
68         internal NfcNdefMessage(IntPtr messageHandle)
69         {
70             _messageHandle = messageHandle;
71         }
72
73         /// <summary>
74         /// NfcNdefMessage destructor.
75         /// </summary>
76         ~NfcNdefMessage()
77         {
78             Dispose(false);
79         }
80
81         /// <summary>
82         /// Dispose
83         /// </summary>
84         /// <since_tizen> 3 </since_tizen>
85         public void Dispose()
86         {
87             Dispose(true);
88             GC.SuppressFinalize(this);
89         }
90
91         private void Dispose(bool disposing)
92         {
93             if (disposed)
94                 return;
95
96             if (disposing)
97             {
98                 // Free managed objects.
99                 int ret = Interop.Nfc.NdefMessage.Destroy(_messageHandle);
100
101                 if (ret != (int)NfcError.None)
102                 {
103                     Log.Error(Globals.LogTag, "Failed to destroy ndef message, Error - " + (NfcError)ret);
104                 }
105             }
106             //Free unmanaged objects
107             disposed = true;
108         }
109
110         /// <summary>
111         /// Appends a record into the NDEF message.
112         /// </summary>
113         /// <since_tizen> 3 </since_tizen>
114         /// <returns>Whether the record is appended successfully.</returns>
115         /// <param name="record">The NfcNdefRecord object that will be appended into the NDEF message.</param>
116         public bool AppendRecord(NfcNdefRecord record)
117         {
118             bool isSuccess = true;
119
120             int ret = Interop.Nfc.NdefMessage.AppendRecord(_messageHandle, record.GetHandle());
121             if (ret != (int)NfcError.None)
122             {
123                 Log.Error(Globals.LogTag, "Failed to append record, Error - " + (NfcError)ret);
124                 isSuccess = false;
125             }
126             else
127             {
128                 _recordList.Add(record);
129             }
130
131             return isSuccess;
132         }
133
134         /// <summary>
135         /// Inserts a record at the index into the NDEF message.
136         /// </summary>
137         /// <since_tizen> 3 </since_tizen>
138         /// <returns>Whether inserting the record succeeded.</returns>
139         /// <param name="index">The index of a record ( starts from 0 ).</param>
140         /// <param name="record">The NfcNdefRecord object that will be appended into the NDEF message.</param>
141         public bool InsertRecord(int index, NfcNdefRecord record)
142         {
143             bool isSuccess = true;
144
145             int ret = Interop.Nfc.NdefMessage.InsertRecord(_messageHandle, index, record.GetHandle());
146             if (ret != (int)NfcError.None)
147             {
148                 Log.Error(Globals.LogTag, "Failed to insert record, Error - " + (NfcError)ret);
149                 isSuccess = false;
150             }
151             else
152             {
153                 _recordList.Add(record);
154             }
155
156             return isSuccess;
157         }
158
159         /// <summary>
160         /// Removes a record at the index into the NDEF message.
161         /// </summary>
162         /// <since_tizen> 3 </since_tizen>
163         /// <returns>Whether removing the record succeeded.</returns>
164         /// <param name="index">The index of a record ( starts from 0 ).</param>
165         public bool RemoveRecord(int index)
166         {
167             bool isSuccess = true;
168
169             int ret = Interop.Nfc.NdefMessage.RemoveRecord(_messageHandle, index);
170             if (ret != (int)NfcError.None)
171             {
172                 Log.Error(Globals.LogTag, "Failed to remove record, Error - " + (NfcError)ret);
173                 isSuccess = false;
174             }
175
176             return isSuccess;
177         }
178
179         /// <summary>
180         /// Gets a record by the index.
181         /// </summary>
182         /// <since_tizen> 3 </since_tizen>
183         /// <returns>The NfcNdefRecord object.</returns>
184         /// <param name="index">The index of a record ( starts from 0 ).</param>
185         public NfcNdefRecord GetRecord(int index)
186         {
187             IntPtr recordHandle;
188             NfcNdefRecord recordObject = null;
189
190             int ret = Interop.Nfc.NdefMessage.GetRecord(_messageHandle, index, out recordHandle);
191             if (ret != (int)NfcError.None)
192             {
193                 Log.Error(Globals.LogTag, "Failed to remove record, Error - " + (NfcError)ret);
194             }
195
196             foreach (NfcNdefRecord recordElement in _recordList)
197             {
198                 if(recordElement.GetHandle() == recordHandle)
199                 {
200                     Log.Debug(Globals.LogTag, "Find record handle");
201                     recordObject = recordElement;
202                     break;
203                 }
204             }
205
206             return recordObject;
207         }
208
209         internal IntPtr GetHandle()
210         {
211             return _messageHandle;
212         }
213     }
214 }