[NUI] Resolve many problems relative with BaseHandle
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / Input / AutofillContainer.cs
1 /*
2  * Copyright(c) 2021 Samsung Electronics Co., Ltd.
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
18 using System;
19 using System.Runtime.InteropServices;
20 using System.ComponentModel;
21
22 namespace Tizen.NUI
23 {
24     /// <summary>
25     /// AutofillContainer controls several text input boxes.
26     /// </summary>
27     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
28     [EditorBrowsable(EditorBrowsableState.Never)]
29     public class AutofillContainer : BaseHandle
30     {
31         private AuthenticationEventCallbackType authenticationCallback;
32         private ListEventCallbackType listCallback;
33
34         private event EventHandler<AuthenticationEventArgs> authenticationEventHandler;
35         private event EventHandler<ListEventArgs> listEventHandler;
36
37         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
38         private delegate void AuthenticationEventCallbackType(IntPtr autofillContainer);
39         private delegate void ListEventCallbackType(IntPtr control);
40
41         /// <summary>
42         /// AutofillContainer Authentication Service Event.
43         /// </summary>
44         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
45         [EditorBrowsable(EditorBrowsableState.Never)]
46         public event EventHandler<AuthenticationEventArgs> ServiceEvent
47         {
48             add
49             {
50                 if (authenticationEventHandler == null)
51                 {
52                     authenticationCallback = OnServiceEvent;
53                     AutofillServiceEventSignal().Connect(authenticationCallback);
54                 }
55
56                 authenticationEventHandler += value;
57             }
58             remove
59             {
60                 authenticationEventHandler -= value;
61
62                 if (authenticationEventHandler == null && authenticationCallback != null)
63                 {
64                     AutofillServiceEventSignal().Disconnect(authenticationCallback);
65                 }
66             }
67         }
68
69         /// <summary>
70         /// AutofillContainer Fill List Event.
71         /// </summary>
72         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
73         [EditorBrowsable(EditorBrowsableState.Never)]
74         public event EventHandler<ListEventArgs> ListEvent
75         {
76             add
77             {
78                 if (listEventHandler == null)
79                 {
80                     listCallback = OnListEvent;
81                     AutofillListEventSignal().Connect(listCallback);
82                 }
83
84                 listEventHandler += value;
85             }
86             remove
87             {
88                 listEventHandler -= value;
89
90                 if (listEventHandler == null && listCallback != null)
91                 {
92                     AutofillListEventSignal().Disconnect(listCallback);
93                 }
94             }
95         }
96
97         /// <summary>
98         /// Constructor.
99         /// </summary>
100         /// <param name="name"> The AutofillContainer name</param>
101         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
102         [EditorBrowsable(EditorBrowsableState.Never)]
103         public AutofillContainer(string name) : this(Interop.AutofillContainer.New(name), true)
104         {
105             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
106         }
107
108         internal AutofillContainer(global::System.IntPtr cPtr, bool cMemoryOwn) : this(cPtr, cMemoryOwn, cMemoryOwn)
109         {
110         }
111
112         internal AutofillContainer(global::System.IntPtr cPtr, bool cMemoryOwn, bool cRegister) : base(cPtr, cMemoryOwn, cRegister)
113         {
114         }
115
116         internal AutofillContainer(AutofillContainer autofillContainer) : this(Interop.AutofillContainer.NewAutofillContainer(AutofillContainer.getCPtr(autofillContainer)), true, false)
117         {
118             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
119         }
120
121         internal AutofillContainer Assign(AutofillContainer autofillContainer)
122         {
123             AutofillContainer ret = new AutofillContainer(Interop.AutofillContainer.Assign(SwigCPtr, AutofillContainer.getCPtr(autofillContainer)), false);
124             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
125             return ret;
126         }
127
128         internal static AutofillContainer DownCast(BaseHandle handle)
129         {
130             AutofillContainer ret = new AutofillContainer(Interop.AutofillContainer.DownCast(BaseHandle.getCPtr(handle)), true);
131             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
132             return ret;
133         }
134
135         /// <summary>
136         /// Adds View and its Autofill item information to Autofill Container.
137         /// </summary>
138         /// <param name="view"> The view to be added to Autofill Container</param>
139         /// <param name="propertyIndex">The Property to be filled automatically of each View</param>
140         /// <param name="id"> A unique ID that does not always change on each launching</param>
141         /// <param name="label"> An auxiliary means to guess heuristically what data is</param>
142         /// <param name="hint"> The Hint - id (username), name, password, phone, credit card number, organization, and so on</param>
143         /// <param name="isSensitive"> Whether this information is a sensitive data or not</param>
144         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
145         [EditorBrowsable(EditorBrowsableState.Never)]
146         public void AddAutofillView(BaseComponents.View view, int propertyIndex, string id, string label, AutofillContainer.ItemHint hint, bool isSensitive)
147         {
148             Interop.AutofillContainer.AddAutofillView(SwigCPtr, BaseComponents.View.getCPtr(view), propertyIndex, id, label, (uint)hint, isSensitive);
149             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
150         }
151
152         /// <summary>
153         /// Removes View and its AutofillItem information to Autofill Container.
154         /// </summary>
155         /// <param name="view"> The view to be removed to Autofill Container</param>
156         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
157         [EditorBrowsable(EditorBrowsableState.Never)]
158         public void RemoveAutofillItem(BaseComponents.View view)
159         {
160             Interop.AutofillContainer.RemoveAutofillItem(SwigCPtr, BaseComponents.View.getCPtr(view));
161             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
162         }
163
164         /// <summary>
165         /// Stores autofill data.
166         /// </summary>
167         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
168         [EditorBrowsable(EditorBrowsableState.Never)]
169         public void SaveAutofillData()
170         {
171             Interop.AutofillContainer.SaveAutofillData(SwigCPtr);
172             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
173         }
174
175         /// <summary>
176         /// Sends a request for filling the data.
177         /// </summary>
178         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
179         [EditorBrowsable(EditorBrowsableState.Never)]
180         public void RequestFillData()
181         {
182             Interop.AutofillContainer.RequestFillData(SwigCPtr);
183             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
184         }
185
186         /// <summary>
187         /// Gets the Autofill Service Name.
188         /// </summary>
189         /// <returns>Autofill Service Name</returns>
190         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
191         [EditorBrowsable(EditorBrowsableState.Never)]
192         public string GetAutofillServiceName()
193         {
194             string ret = Interop.AutofillContainer.GetAutofillServiceName(SwigCPtr);
195             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
196             return ret;
197         }
198
199         /// <summary>
200         /// Gets the Autofill Service Message.
201         /// </summary>
202         /// <returns>Autofill Service Message</returns>
203         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
204         [EditorBrowsable(EditorBrowsableState.Never)]
205         public string GetAutofillServiceMessage()
206         {
207             string ret = Interop.AutofillContainer.GetAutofillServiceMessage(SwigCPtr);
208             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
209             return ret;
210         }
211
212         /// <summary>
213         /// Gets the Autofill Service Image Path.
214         /// </summary>
215         /// <returns>Autofill Service Image Path</returns>
216         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
217         [EditorBrowsable(EditorBrowsableState.Never)]
218         public string GetAutofillServiceImagePath()
219         {
220             string ret = Interop.AutofillContainer.GetAutofillServiceImagePath(SwigCPtr);
221             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
222             return ret;
223         }
224
225         /// <summary>
226         /// Gets the number of list items. (The presentation text of Autofill)
227         /// </summary>
228         /// <returns>The number of list items</returns>
229         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
230         [EditorBrowsable(EditorBrowsableState.Never)]
231         public uint GetListItemCount()
232         {
233             uint ret = Interop.AutofillContainer.GetListItemCount(SwigCPtr);
234             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
235             return ret;
236         }
237
238         /// <summary>
239         /// Gets the list item of the index.
240         /// </summary>
241         /// <param name="index">The index for the list</param>
242         /// <returns>The list item of the index</returns>
243         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
244         [EditorBrowsable(EditorBrowsableState.Never)]
245         public string GetListItem(uint index)
246         {
247             string ret = Interop.AutofillContainer.GetListItem(SwigCPtr, index);
248             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
249             return ret;
250         }
251
252         /// <summary>
253         /// Sets the selected item to fill out.
254         /// </summary>
255         /// <param name="selected">The selected item</param>
256         /// <since_tizen> 5 </since_tizen>
257         public void SetSelectedItem(string selected)
258         {
259             Interop.AutofillContainer.SetSelectedItem(SwigCPtr, selected);
260             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
261         }
262
263         internal AuthenticationSignalType AutofillServiceEventSignal()
264         {
265
266             AuthenticationSignalType ret = new AuthenticationSignalType(Interop.AutofillContainer.AutofillServiceEventSignal(SwigCPtr), false);
267             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
268             return ret;
269         }
270
271         internal ListEventSignalType AutofillListEventSignal()
272         {
273             ListEventSignalType ret = new ListEventSignalType(Interop.AutofillContainer.AutofillListEventSignal(SwigCPtr), false);
274             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
275             return ret;
276         }
277
278         /// <summary>
279         /// Dispose.
280         /// </summary>
281         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
282         [EditorBrowsable(EditorBrowsableState.Never)]
283         protected override void Dispose(DisposeTypes type)
284         {
285             if (disposed)
286             {
287                 return;
288             }
289
290             //Release your own unmanaged resources here.
291             //You should not access any managed member here except static instance.
292             //because the execution order of Finalizes is non-deterministic.
293             if (this != null)
294             {
295                 if (authenticationCallback != null)
296                 {
297                     AutofillServiceEventSignal().Disconnect(authenticationCallback);
298                 }
299
300                 if (listCallback != null)
301                 {
302                     AutofillListEventSignal().Disconnect(listCallback);
303                 }
304             }
305
306             base.Dispose(type);
307         }
308
309         /// This will not be public opened.
310         [EditorBrowsable(EditorBrowsableState.Never)]
311         protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
312         {
313             Interop.AutofillContainer.DeleteAutofillContainer(swigCPtr);
314         }
315
316         private void OnServiceEvent(IntPtr autofillContainer)
317         {
318             AuthenticationEventArgs e = new AuthenticationEventArgs();
319             e.AutofillContainer = Registry.GetManagedBaseHandleFromNativePtr(autofillContainer) as AutofillContainer;
320
321             if (authenticationEventHandler != null)
322             {
323                 authenticationEventHandler(this, e);
324             }
325         }
326
327         private void OnListEvent(IntPtr control)
328         {
329             ListEventArgs e = new ListEventArgs();
330             e.Control = Registry.GetManagedBaseHandleFromNativePtr(control) as BaseComponents.View;
331
332             if (listEventHandler != null)
333             {
334                 listEventHandler(this, e);
335             }
336         }
337
338         /// <summary>
339         /// Event arguments that passed via the Authentication event.
340         /// </summary>
341         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
342         [EditorBrowsable(EditorBrowsableState.Never)]
343         public class AuthenticationEventArgs : EventArgs
344         {
345             /// <summary>
346             /// The instance of AutofillContainer
347             /// </summary>
348             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
349             [EditorBrowsable(EditorBrowsableState.Never)]
350             public AutofillContainer AutofillContainer
351             {
352                 get;
353                 set;
354             }
355         }
356
357         /// <summary>
358         /// AutofillContainer list event arguments.
359         /// </summary>
360         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
361         [EditorBrowsable(EditorBrowsableState.Never)]
362         public class ListEventArgs : EventArgs
363         {
364             /// <summary>
365             /// The instance of AutofillContainer
366             /// </summary>
367             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
368             [EditorBrowsable(EditorBrowsableState.Never)]
369             public BaseComponents.View Control
370             {
371                 get;
372                 set;
373             }
374
375         }
376
377         /// <summary>
378         /// Enumeration for hint of the autofill item.
379         /// </summary>
380         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
381         [EditorBrowsable(EditorBrowsableState.Never)]
382         public enum ItemHint
383         {
384             /// <summary>
385             /// Autofill hint for a credit card expiration date
386             /// </summary>
387             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
388             [EditorBrowsable(EditorBrowsableState.Never)]
389             CreditCardExpirationData,
390             /// <summary>
391             /// Autofill hint for a credit card expiration day
392             /// </summary>
393             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
394             [EditorBrowsable(EditorBrowsableState.Never)]
395             CreditCardExpirationDay,
396             /// <summary>
397             /// Autofill hint for a credit card expiration month
398             /// </summary>
399             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
400             [EditorBrowsable(EditorBrowsableState.Never)]
401             CreditCardExpirationMonth,
402             /// <summary>
403             /// Autofill hint for a credit card expiration year
404             /// </summary>
405             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
406             [EditorBrowsable(EditorBrowsableState.Never)]
407             CreditCardExpirationYear,
408             /// <summary>
409             /// Autofill hint for a credit card number
410             /// </summary>
411             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
412             [EditorBrowsable(EditorBrowsableState.Never)]
413             CreditCardNumber,
414             /// <summary>
415             /// Autofill hint for an email address
416             /// </summary>
417             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
418             [EditorBrowsable(EditorBrowsableState.Never)]
419             EmailAddress,
420             /// <summary>
421             /// Autofill hint for a user's real name
422             /// </summary>
423             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
424             [EditorBrowsable(EditorBrowsableState.Never)]
425             Name,
426             /// <summary>
427             /// Autofill hint for a phone number
428             /// </summary>
429             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
430             [EditorBrowsable(EditorBrowsableState.Never)]
431             Phone,
432             /// <summary>
433             /// Autofill hint for a postal address
434             /// </summary>
435             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
436             [EditorBrowsable(EditorBrowsableState.Never)]
437             PostalAddress,
438             /// <summary>
439             /// Autofill hint for a postal code
440             /// </summary>
441             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
442             [EditorBrowsable(EditorBrowsableState.Never)]
443             PostalCode,
444             /// <summary>
445             /// Autofill hint for a user's ID
446             /// </summary>
447             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
448             [EditorBrowsable(EditorBrowsableState.Never)]
449             Id,
450             /// <summary>
451             /// Autofill hint for password
452             /// </summary>
453             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
454             [EditorBrowsable(EditorBrowsableState.Never)]
455             Password,
456             /// <summary>
457             /// Autofill hint for a credit card security code
458             /// </summary>
459             /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
460             [EditorBrowsable(EditorBrowsableState.Never)]
461             CreditCardSecurityCode
462         }
463     }
464 }