apply FSL(Flora Software License)
[apps/native/ug-wifi-direct.git] / popup-wifidirect / src / wfd-app-popup-view.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
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  * This file implements wifi direct system popup view  functions.
19  *
20  * @file    wfd-app-popup-view.c
21  * @author  Sungsik Jang (sungsik.jang@samsung.com)
22  * @version 0.1
23  */
24
25 #include <libintl.h>
26 #include <glib.h>
27
28 #include "wifi-direct.h"
29 #include "wfd-app.h"
30 #include "wfd-app-strings.h"
31 #include "wfd-app-util.h"
32
33 extern wfd_appdata_t *g_wfd_ad;
34 extern wfd_popup_t *g_wfd_pop;
35 extern unsigned char g_wfd_peer_mac[6];
36 extern unsigned char g_wfd_peer_name[32];
37
38 static void __popup_resp_cb(void *data, Evas_Object * obj, void *event_info)
39 {
40     __WFD_APP_FUNC_ENTER__;
41
42     wfd_appdata_t *ad = wfd_get_appdata();
43     int result = -1;
44     int resp = (int) data;
45     Evas_Object *btn = obj;
46
47     WFD_APP_LOG(WFD_APP_LOG_HIGH, "popup resp : %d\n", resp);
48
49     switch (resp)
50     {
51     case WFD_POP_RESP_APRV_CONNECT_PBC_YES:
52         {
53             WFD_APP_LOG(WFD_APP_LOG_HIGH,
54                         "WFD_POP_RESP_APRV_CONNECT_PBC_YES\n");
55
56             result = wifi_direct_accept_connection(ad->peer_mac);
57             WFD_APP_LOG(WFD_APP_LOG_LOW,
58                         "wifi_direct_accept_connection() result=[%d]\n",
59                         result);
60             if (result == WIFI_DIRECT_ERROR_NONE)
61             {
62                 wfd_prepare_popup(WFD_POP_PROG_CONNECT, NULL);
63             }
64             else
65             {
66                 WFD_APP_LOG(WFD_APP_LOG_ERROR,
67                             "wifi_direct_accept_connection() FAILED!!\n");
68                 evas_object_hide(ad->win);
69             }
70         }
71         break;
72
73     case WFD_POP_RESP_APRV_CONNECT_DISPLAY_YES:
74         {
75             WFD_APP_LOG(WFD_APP_LOG_HIGH,
76                         "WFD_POP_RESP_APRV_CONNECT_DISPLAY_YES\n");
77
78             result = wifi_direct_accept_connection(ad->peer_mac);
79             WFD_APP_LOG(WFD_APP_LOG_LOW,
80                         "wifi_direct_accept_connection() result=[%d]\n",
81                         result);
82             if (result == WIFI_DIRECT_ERROR_NONE)
83             {
84                 wfd_prepare_popup(WFD_POP_PROG_CONNECT_WITH_PIN,
85                                   ad->pin_number);
86             }
87             else
88             {
89                 WFD_APP_LOG(WFD_APP_LOG_ERROR,
90                             "wifi_direct_client_send_connect_request() FAILED!!\n");
91                 evas_object_hide(ad->win);
92             }
93         }
94         break;
95
96     case WFD_POP_RESP_PROG_CONNECT_KEYPAD_OK:
97     case WFD_POP_RESP_APRV_CONNECT_KEYPAD_YES:
98         {
99             WFD_APP_LOG(WFD_APP_LOG_HIGH,
100                         "WFD_POP_RESP_APRV_CONNECT_KEYPAD_YES\n");
101
102             int len = strlen(ad->pin_number);
103             WFD_APP_LOG(WFD_APP_LOG_LOW, "button ok: pin [%s]", ad->pin_number);
104
105             if (len > 7 && len < 64)
106             {
107                 int result = 0;
108                 WFD_APP_LOG(WFD_APP_LOG_LOW, "pin=[%s]\n", ad->pin_number);
109
110                 result = wifi_direct_set_wps_pin(ad->pin_number);
111
112                 if (result != WIFI_DIRECT_ERROR_NONE)
113                 {
114                     wfd_prepare_popup(WFD_POP_FAIL_CONNECT, NULL);
115                     return;
116                 }
117
118                 result = wifi_direct_activate_pushbutton();
119                 result = wifi_direct_accept_connection(ad->peer_mac);
120                 WFD_APP_LOG(WFD_APP_LOG_LOW,
121                             "wifi_direct_accept_connection(%s) result=[%d]\n",
122                             ad->peer_mac, result);
123                 if (result == WIFI_DIRECT_ERROR_NONE)
124                 {
125                     wfd_prepare_popup(WFD_POP_PROG_CONNECT_WITH_PIN,
126                                       ad->pin_number);
127                 }
128                 else
129                 {
130                     WFD_APP_LOG(WFD_APP_LOG_ERROR,
131                                 "wifi_direct_accept_connection() FAILED!!\n");
132                     evas_object_hide(ad->win);
133                 }
134             }
135             else
136             {
137                 WFD_APP_LOG(WFD_APP_LOG_ERROR, "Error, Incorrect PIN!!\n");
138                 wfd_prepare_popup(WFD_POP_INCORRECT_PIN, NULL);
139                 return;
140             }
141         }
142         break;
143
144     case WFD_POP_RESP_APRV_CONNECT_NO:
145         {
146             WFD_APP_LOG(WFD_APP_LOG_HIGH,
147                         "WFD_POP_RESP_APRV_CONNECT_NO: destroy_popup...\n");
148
149             wfd_destroy_popup();
150         }
151         break;
152
153     case WFD_POP_RESP_PROG_CONNECT_CANCEL:
154         {
155             WFD_APP_LOG(WFD_APP_LOG_HIGH, "WFD_POP_RESP_PROG_CONNECT_CANCEL\n");
156             result = wifi_direct_disconnect(ad->peer_mac);
157             WFD_APP_LOG(WFD_APP_LOG_LOW,
158                         "wifi_direct_disconnect[%s] result=[%d]\n",
159                         ad->peer_mac, result);
160
161             if (result == WIFI_DIRECT_ERROR_NONE)
162             {
163                 wfd_prepare_popup(WFD_POP_PROG_CONNECT_CANCEL, NULL);
164             }
165             else
166             {
167                 WFD_APP_LOG(WFD_APP_LOG_ERROR,
168                             "wifi_direct_disconnect() FAILED!!\n");
169                 wfd_prepare_popup(WFD_POP_FAIL_CONNECT, NULL);
170             }
171         }
172         break;
173
174     default:
175         {
176             WFD_APP_LOG(WFD_APP_LOG_ERROR, "Unknown respone\n");
177             evas_object_hide(ad->win);
178         }
179         break;
180     }
181
182     __WFD_APP_FUNC_EXIT__;
183 }
184
185 static Evas_Object *__create_progress_layout(Evas_Object * parent,
186                                              const char *text)
187 {
188     __WFD_APP_FUNC_ENTER__;
189
190     if (parent == NULL || text == NULL)
191     {
192         WFD_APP_LOG(WFD_APP_LOG_ERROR, "param is NULL\n");
193         return NULL;
194     }
195
196     Evas_Object *progressbar = NULL, *layout = NULL;
197     Evas_Object *label = NULL;
198     int w = 0, h = 0;
199
200     layout = elm_layout_add(parent);
201     if (layout == NULL)
202     {
203         WFD_APP_LOG(WFD_APP_LOG_ERROR, "layout is NULL\n");
204         return NULL;
205     }
206
207     elm_layout_file_set(layout, EDJ_NAME, "progress_popup");
208     evas_object_size_hint_weight_set(layout,
209                                      EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
210
211     progressbar = elm_progressbar_add(layout);
212     if (progressbar == NULL)
213     {
214         WFD_APP_LOG(WFD_APP_LOG_ERROR, "progressbar is NULL\n");
215         evas_object_del(layout);
216         return NULL;
217     }
218     elm_object_style_set(progressbar, "list_process");
219     evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
220     evas_object_size_hint_weight_set(progressbar,
221                                      EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
222     elm_object_part_content_set(layout, "popup_pb", progressbar);
223     elm_progressbar_pulse(progressbar, EINA_TRUE);
224
225     label = elm_label_add(layout);
226     if (label == NULL)
227     {
228         WFD_APP_LOG(WFD_APP_LOG_ERROR, "label is NULL\n");
229         evas_object_del(layout);
230         evas_object_del(progressbar);
231         return NULL;
232     }
233     elm_object_style_set(label, "popup_description/default");
234     elm_object_part_content_set(layout, "popup_progress_text", label);
235     edje_object_part_geometry_get(layout, "popup_progress_text", NULL, NULL, &w,
236                                   &h);
237     elm_label_line_wrap_set(label, ELM_WRAP_WORD);
238     elm_label_wrap_width_set(label, w);
239     elm_object_text_set(label, text);
240
241     evas_object_show(layout);
242
243     __WFD_APP_FUNC_EXIT__;
244
245     return layout;
246 }
247
248
249 void wfd_destroy_popup()
250 {
251     __WFD_APP_FUNC_ENTER__;
252
253     wfd_appdata_t *ad = wfd_get_appdata();
254
255     if (ad == NULL)
256     {
257         WFD_APP_LOG(WFD_APP_LOG_ERROR, "ad is NULL\n");
258         return;
259     }
260
261     if (ad->popup)
262     {
263         //evas_object_smart_callback_del(ad->popup, "response", __popup_resp_cb);
264         evas_object_del(ad->popup);
265         ad->popup = NULL;
266     }
267
268     if (ad->popup_timeout_handle > 0)
269     {
270         g_source_remove(ad->popup_timeout_handle);
271         ad->popup_timeout_handle = 0;
272     }
273
274     evas_object_hide(ad->win);
275
276     __WFD_APP_FUNC_EXIT__;
277     return;
278 }
279
280 static Evas_Object *wfd_draw_pop_type_a(Evas_Object * win, wfd_popup_t * pop)
281 {
282     __WFD_APP_FUNC_ENTER__;
283
284     Evas_Object *popup;
285
286     popup = elm_popup_add(win);
287     evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
288     elm_object_text_set(popup, pop->text);
289     elm_popup_timeout_set(popup, pop->timeout);
290     evas_object_show(popup);
291     evas_object_show(win);
292
293     __WFD_APP_FUNC_EXIT__;
294     return popup;
295 }
296
297 static Evas_Object *wfd_draw_pop_type_b(Evas_Object * win, wfd_popup_t * pop)
298 {
299     __WFD_APP_FUNC_ENTER__;
300
301     Evas_Object *popup = NULL;
302     Evas_Object *btn = NULL;
303
304     popup = elm_popup_add(win);
305     evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
306     elm_object_text_set(popup, pop->text);
307
308     btn = elm_button_add(popup);
309     elm_object_text_set(btn, pop->label1);
310     elm_object_part_content_set(popup, "button1", btn);
311     evas_object_smart_callback_add(btn, "clicked", __popup_resp_cb,
312                                    (void *) pop->resp_data1);
313
314     evas_object_show(popup);
315     evas_object_show(win);
316
317     __WFD_APP_FUNC_EXIT__;
318     return popup;
319 }
320
321 static Evas_Object *wfd_draw_pop_type_c(Evas_Object * win, wfd_popup_t * pop)
322 {
323     __WFD_APP_FUNC_ENTER__;
324
325     Evas_Object *popup = NULL;
326     Evas_Object *btn1 = NULL, *btn2 = NULL;
327
328     popup = elm_popup_add(win);
329     evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
330     elm_object_text_set(popup, pop->text);
331
332     btn1 = elm_button_add(popup);
333     elm_object_text_set(btn1, pop->label1);
334     elm_object_part_content_set(popup, "button1", btn1);
335     evas_object_smart_callback_add(btn1, "clicked", __popup_resp_cb,
336                                    (void *) pop->resp_data1);
337
338     btn2 = elm_button_add(popup);
339     elm_object_text_set(btn2, pop->label2);
340     elm_object_part_content_set(popup, "button2", btn2);
341     evas_object_smart_callback_add(btn2, "clicked", __popup_resp_cb,
342                                    (void *) pop->resp_data2);
343
344     evas_object_show(popup);
345     evas_object_show(win);
346
347     __WFD_APP_FUNC_EXIT__;
348     return popup;
349 }
350
351 static Evas_Object *wfd_draw_pop_type_d(Evas_Object * win, wfd_popup_t * pop)
352 {
353     __WFD_APP_FUNC_ENTER__;
354
355     Evas_Object *popup;
356     Evas_Object *layout;
357
358     popup = elm_popup_add(win);
359     evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
360     elm_object_style_set(popup, "customstyle");
361     layout = __create_progress_layout(popup, pop->text);
362     elm_popup_timeout_set(popup, pop->timeout);
363     elm_object_content_set(popup, layout);
364     evas_object_show(popup);
365     evas_object_show(win);
366
367     __WFD_APP_FUNC_EXIT__;
368     return popup;
369 }
370
371 static void __popup_block_clicked_cb(void *data, Evas_Object * obj,
372                                      void *event_info)
373 {
374     wfd_appdata_t *ad = wfd_get_appdata();
375     wfd_popup_t *pop = NULL;
376
377     if (ad != NULL)
378         pop = ad->popup;
379
380     if (ad->win != NULL)
381         evas_object_hide(ad->win);
382
383     if (ad->popup_timeout_handle > 0)
384     {
385         g_source_remove(ad->popup_timeout_handle);
386         ad->popup_timeout_handle = 0;
387     }
388 }
389
390 gboolean __popup_remove_timeout_cb(gpointer user_data)
391 {
392     wfd_appdata_t *ad = wfd_get_appdata();
393     wfd_popup_t *pop = NULL;
394
395     if (ad != NULL)
396         pop = ad->popup;
397     else
398         return false;
399
400     if (pop != user_data)
401         return false;
402
403     if (ad->win != NULL)
404         evas_object_hide(ad->win);
405
406     ad->popup_timeout_handle = 0;
407     return false;
408 }
409
410 static Evas_Object *wfd_draw_pop_type_e(Evas_Object * win, wfd_popup_t * pop)
411 {
412     __WFD_APP_FUNC_ENTER__;
413
414     wfd_appdata_t *ad = wfd_get_appdata();
415     Evas_Object *popup;
416
417     if (ad == NULL)
418         return NULL;
419
420     popup = elm_popup_add(win);
421     evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
422     elm_object_text_set(popup, pop->text);
423     evas_object_smart_callback_add(popup, "block,clicked",
424                                    __popup_block_clicked_cb, NULL);
425     ad->popup_timeout_handle =
426         g_timeout_add(3000, __popup_remove_timeout_cb, popup);
427     evas_object_show(popup);
428     evas_object_show(win);
429
430     __WFD_APP_FUNC_EXIT__;
431     return popup;
432 }
433
434
435 static void _smart_ime_cb(void *data, Evas_Object * obj, void *event_info)
436 {
437     __WFD_APP_FUNC_ENTER__;
438     wfd_appdata_t *ad = wfd_get_appdata();
439
440     Ecore_IMF_Context *imf_context = NULL;
441     imf_context = (Ecore_IMF_Context *) ad->pin_entry;
442
443     if (NULL == imf_context)
444     {
445         WFD_APP_LOG(WFD_APP_LOG_ERROR, "Error!!! Ecore_IMF_Context is NULL!!");
446         return;
447     }
448
449     const char *txt =
450         elm_entry_markup_to_utf8(elm_entry_entry_get
451                                  ((const Evas_Object *) imf_context));
452
453     if (NULL != txt)
454     {
455         WFD_APP_LOG(WFD_APP_LOG_LOW, "* text [%s], len=[%d]", txt, strlen(txt));
456         strncpy(ad->pin_number, txt, sizeof(ad->pin_number));
457     }
458     else
459     {
460         WFD_APP_LOG(WFD_APP_LOG_LOW, "Err!");
461     }
462
463     __WFD_APP_FUNC_EXIT__;
464 }
465
466 Evas_Object *wfd_draw_pop_type_keypad(Evas_Object * win, wfd_popup_t * pop)
467 {
468     __WFD_APP_FUNC_ENTER__;
469     wfd_appdata_t *ad = wfd_get_appdata();
470
471     Evas_Object *conformant = NULL;
472     Evas_Object *layout = NULL;
473     Evas_Object *pinpopup = NULL;
474     Evas_Object *btn1 = NULL, *btn2 = NULL;
475
476     conformant = elm_conformant_add(win);
477     assertm_if(NULL == conformant, "conformant is NULL!!");
478     elm_win_conformant_set(win, EINA_TRUE);
479     elm_win_resize_object_add(win, conformant);
480     evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND,
481                                      EVAS_HINT_EXPAND);
482     evas_object_size_hint_align_set(conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
483     evas_object_show(conformant);
484
485     pinpopup = NULL;
486     layout = elm_layout_add(conformant);
487     elm_object_content_set(conformant, layout);
488     pinpopup = elm_popup_add(layout);
489     assertm_if(NULL == pinpopup, "pinpopup is NULL!!");
490     elm_object_part_text_set(pinpopup, "title,text", pop->text);
491
492     Evas_Object *box = elm_box_add(pinpopup);
493     evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
494     evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
495     evas_object_show(box);
496
497     Evas_Object *editfield = elm_layout_add(box);
498     elm_layout_theme_set(editfield, "layout", "editfield", "default");
499     Evas_Object *editfield_entry = elm_layout_add(box);
500     elm_object_part_content_set(editfield, "elm.swallow.content",
501                                 editfield_entry);
502     elm_object_part_text_set(editfield, "elm.text", _("Enter PIN"));
503     elm_entry_single_line_set(editfield_entry, EINA_TRUE);
504     elm_entry_scrollable_set(editfield_entry, EINA_TRUE);
505     elm_object_signal_emit(editfield_entry, "elm,state,eraser,show", "elm");
506     evas_object_size_hint_weight_set(editfield, EVAS_HINT_EXPAND,
507                                      EVAS_HINT_EXPAND);
508     evas_object_size_hint_align_set(editfield, EVAS_HINT_FILL, EVAS_HINT_FILL);
509     ad->pin_entry = editfield_entry;
510     evas_object_smart_callback_add(ad->pin_entry, "changed", _smart_ime_cb,
511                                    NULL);
512     evas_object_show(editfield);
513     elm_box_pack_end(box, editfield);
514
515     elm_object_content_set(pinpopup, box);
516
517     btn1 = elm_button_add(pinpopup);
518     elm_object_text_set(pinpopup, pop->label1);
519     elm_object_part_content_set(pinpopup, "button1", btn1);
520     evas_object_smart_callback_add(btn1, "clicked", __popup_resp_cb,
521                                    (void *) pop->resp_data1);
522
523     btn2 = elm_button_add(pinpopup);
524     elm_object_text_set(btn2, pop->label2);
525     elm_object_part_content_set(pinpopup, "button2", btn2);
526     evas_object_smart_callback_add(btn1, "clicked", __popup_resp_cb,
527                                    (void *) pop->resp_data2);
528
529     evas_object_show(pinpopup);
530     evas_object_show(win);
531     elm_object_focus_set(ad->pin_entry, EINA_TRUE);
532
533     __WFD_APP_FUNC_EXIT__;
534
535     return pinpopup;
536 }
537
538 void wfd_prepare_popup(int type, void *userdata)
539 {
540     __WFD_APP_FUNC_ENTER__;
541     wfd_appdata_t *ad = wfd_get_appdata();
542     wfd_popup_t *pop = ad->popup_data;
543
544     wfd_destroy_popup();
545
546     memset(pop, 0, sizeof(wfd_popup_t));
547
548     pop->type = type;
549
550     switch (pop->type)
551     {
552
553     case WFD_POP_APRV_CONNECTION_WPS_PUSHBUTTON_REQ:
554         {
555             snprintf(pop->text, sizeof(pop->text), _("IDS_WFD_POP_CONNECT_Q"),
556                      ad->peer_name);
557             snprintf(pop->label1, sizeof(pop->label1), "%s",
558                      dgettext("sys_string", "IDS_COM_SK_YES"));
559             snprintf(pop->label2, sizeof(pop->label2), "%s",
560                      dgettext("sys_string", "IDS_COM_SK_NO"));
561             pop->resp_data1 = WFD_POP_RESP_APRV_CONNECT_PBC_YES;
562             pop->resp_data2 = WFD_POP_RESP_APRV_CONNECT_NO;
563
564             ad->popup = wfd_draw_pop_type_c(ad->win, pop);
565         }
566         break;
567
568     case WFD_POP_APRV_CONNECTION_WPS_DISPLAY_REQ:
569         {
570             char *pin = (char *) userdata;
571             snprintf(pop->text, sizeof(pop->text),
572                      _("IDS_WFD_POP_CONNECT_WITH_PIN_Q"), ad->peer_name,
573                      ad->pin_number);
574             snprintf(pop->label1, sizeof(pop->label1), "%s",
575                      dgettext("sys_string", "IDS_COM_SK_YES"));
576             snprintf(pop->label2, sizeof(pop->label2), "%s",
577                      dgettext("sys_string", "IDS_COM_SK_NO"));
578
579             pop->resp_data1 = WFD_POP_RESP_APRV_CONNECT_DISPLAY_YES;
580             pop->resp_data2 = WFD_POP_RESP_APRV_CONNECT_NO;
581
582             ad->popup = wfd_draw_pop_type_c(ad->win, pop);
583         }
584         break;
585
586     case WFD_POP_APRV_CONNECTION_WPS_KEYPAD_REQ:
587         {
588             char *pin = (char *) userdata;
589             snprintf(pop->text, sizeof(pop->text), _("IDS_WFD_POP_CONNECT_Q"),
590                      ad->peer_name);
591             snprintf(pop->label1, sizeof(pop->label1), "%s",
592                      dgettext("sys_string", "IDS_COM_SK_YES"));
593             snprintf(pop->label2, sizeof(pop->label2), "%s",
594                      dgettext("sys_string", "IDS_COM_SK_NO"));
595             pop->resp_data1 = WFD_POP_RESP_APRV_CONNECT_KEYPAD_YES;
596             pop->resp_data2 = WFD_POP_RESP_APRV_CONNECT_NO;
597
598             ad->popup = wfd_draw_pop_type_keypad(ad->win, pop);
599         }
600         break;
601
602     case WFD_POP_PROG_CONNECT:
603         {
604             snprintf(pop->text, sizeof(pop->text), "%s",
605                      _("IDS_WFD_POP_CONNECTING"));
606             snprintf(pop->label1, sizeof(pop->label1), "%s",
607                      dgettext("sys_string", "IDS_COM_POP_CANCEL"));
608             pop->timeout = WFD_POP_TIMER_120;
609             pop->resp_data1 = WFD_POP_RESP_PROG_CONNECT_CANCEL;
610
611             ad->popup = wfd_draw_pop_type_b(ad->win, pop);
612         }
613         break;
614
615     case WFD_POP_PROG_CONNECT_WITH_KEYPAD:
616         {
617             snprintf(pop->text, sizeof(pop->text), "%s",
618                      _("IDS_WFD_POP_ENTER_PIN"));
619             snprintf(pop->label1, sizeof(pop->label1), "%s",
620                      dgettext("sys_string", "IDS_COM_SK_OK"));
621             snprintf(pop->label2, sizeof(pop->label2), "%s",
622                      dgettext("sys_string", "IDS_COM_POP_CANCEL"));
623             pop->timeout = WFD_POP_TIMER_120;
624             pop->resp_data1 = WFD_POP_RESP_PROG_CONNECT_KEYPAD_OK;
625             pop->resp_data2 = WFD_POP_RESP_PROG_CONNECT_CANCEL;
626
627             ad->popup = wfd_draw_pop_type_keypad(ad->win, pop);
628         }
629         break;
630
631     case WFD_POP_PROG_CONNECT_WITH_PIN:
632         snprintf(pop->text, sizeof(pop->text), "%s %s",
633                  _("IDS_WFD_POP_CONNECTING_WITH_PIN"), ad->pin_number);
634         snprintf(pop->label1, sizeof(pop->label1), "%s",
635                  dgettext("sys_string", "IDS_COM_POP_CANCEL"));
636         pop->timeout = WFD_POP_TIMER_120;
637         pop->resp_data1 = WFD_POP_RESP_PROG_CONNECT_CANCEL;
638
639         ad->popup = wfd_draw_pop_type_c(ad->win, pop);
640         break;
641
642     case WFD_POP_PROG_CONNECT_CANCEL:
643         {
644             snprintf(pop->text, sizeof(pop->text), "%s",
645                      dgettext("sys_string", "IDS_COM_POP_CANCEL"));
646             pop->timeout = WFD_POP_TIMER_120;
647             ad->popup = wfd_draw_pop_type_a(ad->win, pop);
648         }
649         break;
650
651     case WFD_POP_INCORRECT_PIN:
652         snprintf(pop->text, sizeof(pop->text), "%s",
653                  _("IDS_WFD_POP_PIN_INVALID"));
654         snprintf(pop->label1, sizeof(pop->label1), "%s",
655                  dgettext("sys_string", "IDS_COM_SK_OK"));
656         pop->timeout = WFD_POP_TIMER_3;
657         pop->resp_data1 = WFD_POP_RESP_OK;
658         break;
659
660     case WFD_POP_NOTI_CONNECTED:
661         snprintf(pop->text, sizeof(pop->text), "%s",
662                  _("IDS_WFD_POP_CONNECTED"));
663         pop->timeout = WFD_POP_TIMER_3;
664
665         ad->popup = wfd_draw_pop_type_e(ad->win, pop);
666         break;
667
668     case WFD_POP_FAIL_CONNECT:
669         snprintf(pop->text, sizeof(pop->text), "%s",
670                  _("IDS_WFD_POP_ERROR_OCCURRED"));
671         pop->timeout = WFD_POP_TIMER_3;
672
673         ad->popup = wfd_draw_pop_type_e(ad->win, pop);
674         break;
675
676     default:
677         break;
678     }
679
680     __WFD_APP_FUNC_EXIT__;
681     return;
682 }