tizen 2.3 release
[apps/home/settings.git] / setting-common / src / setting-common-draw-popup.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <setting-common-draw-widget.h>
23 #include <glib.h>
24 #include <utilX.h>
25 #include <Ecore_X.h>
26 #include <efl_assist.h>
27 #include <notification.h>
28 #include <notification_internal.h>
29
30 #define SUPPORT_BACK_KEY_GRAB   1
31 static void __ignore_back_key_cb(void *data, Evas_Object *obj, void *event_info);
32
33 EXPORT_PUBLIC void popup_handle_hardkey(void *data, Evas_Object *popup)
34 {
35         SETTING_TRACE_BEGIN;
36         ret_if(!popup);
37         evas_object_hide(popup);
38         double timeout = elm_popup_timeout_get(popup);
39         if (timeout > 0)
40         {
41                 evas_object_smart_callback_call(popup, "timeout", data);
42         }
43         else
44         {
45                 char *btn_part_str[3] = {
46                         _("button1"), _("button2"), _("button3")
47                 };
48                 int i = 0;
49                 Evas_Object *btn = NULL;
50                 Evas_Object *first_btn = NULL;
51                 for (; i < 3; i++) {
52                         btn = elm_object_part_content_get(popup, btn_part_str[i]);
53                         if (btn)
54                         {
55                                 first_btn = btn;
56                                 break;
57                         }
58                 }
59
60                 if (!first_btn)
61                 {
62                         evas_object_smart_callback_call(popup, "block,clicked", data);
63                 }
64                 else
65                 {
66                         const char *btn_str = elm_object_text_get(first_btn);
67                          if(0 == safeStrCmp(btn_str, _("IDS_ST_BUTTON_ONLY_VIBRATE"))
68                                 || 0 == safeStrCmp(btn_str, _("IDS_COM_SK_OK")))
69                          {
70                                 // 1. special process for "Vibration" button
71                                 // 2. Assistive light popup has only one button, OK. In this case, do not call smart callback.
72                                 evas_object_del(popup);
73                          }
74                          else
75                          {
76                                  evas_object_smart_callback_call(first_btn, "clicked", data);
77                          }
78                 }
79         }
80 }
81
82
83 static void __hardkey_mouseup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
84 {
85         SETTING_TRACE_BEGIN;
86         Evas_Event_Mouse_Up *ev = event_info;
87         if (ev->button == 3) // if mouse right button is up
88         {
89                 //evas_object_hide(obj); // you can call evas_object_del(obj); to remove popup if you want
90                 popup_handle_hardkey(data, obj);
91         }
92 }
93 static void __hardkey_keyup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
94 {
95         SETTING_TRACE_BEGIN;
96         Evas_Event_Key_Down *ev = event_info;
97         if (!strcmp(ev->keyname, KEY_BACK))
98         {
99                 //evas_object_hide(obj); // you can call evas_object_del(obj); to remove popup if you want
100                 popup_handle_hardkey(data, obj);
101         }
102 }
103
104 EXPORT_PUBLIC void ea_popup_back_cb_2(void *data, Evas_Object *obj, void *event_info)
105 {
106         SETTING_TRACE_BEGIN;
107         popup_handle_hardkey(data, obj);
108         return;
109 }
110
111
112 static void __popup_del_cb2(void *data, Evas *e, Evas_Object *obj, void *event_info)
113
114 {
115         SETTING_TRACE_BEGIN;
116         ret_if(!obj);
117 #if SUPPORT_BACK_KEY_GRAB
118         //ungrab the "back key"
119         Ecore_X_Display *disp = ecore_x_display_get();
120         Ecore_X_Window xwin = elm_win_xwindow_get(obj);
121         int ret = utilx_ungrab_key(disp, xwin, KEY_BACK);
122         if (ret) {
123                   SETTING_TRACE_ERROR("KEY_BACK ungrab error ret[%d]", ret);
124         }
125 #endif
126         evas_object_event_callback_del(obj, EVAS_CALLBACK_KEY_UP, __hardkey_keyup_cb);
127         evas_object_event_callback_del(obj, EVAS_CALLBACK_MOUSE_UP, __hardkey_mouseup_cb);
128 }
129
130 EXPORT_PUBLIC void setting_popup_lang_update(Evas_Object *popup)
131 {
132         SETTING_TRACE_BEGIN;
133         setting_retm_if(NULL == popup, "data is NULL");
134         char *title = evas_object_data_get(popup, "title");
135         char *text1 = evas_object_data_get(popup, "text");
136         char *text0 = evas_object_data_get(popup, "text0");
137         //SETTING_TRACE("title:%s", title);
138         //SETTING_TRACE("text1:%s", text1);
139         //SETTING_TRACE("text0:%s", text0);
140
141         char text[MAX_COMMON_BUFFER_LEN + 1]={0,};
142         if (text0)
143         {
144                 snprintf(text, MAX_COMMON_BUFFER_LEN, "%s<br>%s", _(text0), _(text1));
145         }
146         else
147         {
148                 snprintf(text, MAX_COMMON_BUFFER_LEN, "%s", text1);
149         }
150         //char *eo_view_t = evas_object_type_get(popup);
151         if (title)
152                 elm_object_part_text_set(popup, "title,text", _(title));
153
154         Evas_Object *layout = elm_object_content_get(popup);
155         if (layout)
156         {
157                 Evas_Object *eo_view = elm_object_part_content_get(layout, "elm.swallow.content");
158                 if (eo_view)
159                 {
160                         const char *eo_view_t = evas_object_type_get(eo_view);
161                         //SETTING_TRACE("eo_view_t:%s", eo_view_t);
162                         if (!safeStrCmp("elm_gengrid", eo_view_t))
163                                 elm_gengrid_realized_items_update(eo_view);
164                         else if(!safeStrCmp("elm_genlist", eo_view_t))
165                                 elm_genlist_realized_items_update(eo_view);
166                         else if(!safeStrCmp("elm_label", eo_view_t))
167                                 if (!isEmptyStr(text)) elm_object_text_set(eo_view, _(text));
168
169                 }
170
171                 eo_view = elm_object_part_content_get(layout, "elm.swallow.end");
172                 if (eo_view)
173                 {
174                         const char *eo_view_t = evas_object_type_get(eo_view);
175                         //SETTING_TRACE("eo_view_t:%s", eo_view_t);
176                         if(!safeStrCmp("elm_check", eo_view_t))
177                         {
178
179                                 char *check_str = evas_object_data_get(popup, "check_str");
180                                 //SETTING_TRACE("check_str:%s", check_str);
181                                 if (check_str) elm_object_text_set(eo_view, _(check_str));
182                         }
183                 }
184         }
185         else
186         {
187                 //SETTING_TRACE("text:%s", text);
188                 if (!isEmptyStr(text))
189                         elm_object_text_set(popup, _(text));
190         }
191
192         char *btn_part_str[3] = {
193                 _("button1"), _("button2"), _("button3")
194         };
195         int i = 0;
196         Evas_Object *btn = NULL;
197
198         //SETTING_TRACE("button1...:%s", evas_object_data_get(popup, "button1"));
199         //SETTING_TRACE("button2...:%s", evas_object_data_get(popup, "button2"));
200         //SETTING_TRACE("button3...:%s", evas_object_data_get(popup, "button3"));
201
202         for (; i < 3; i++) {
203                 btn = elm_object_part_content_get(popup, btn_part_str[i]);
204                 //SETTING_TRACE("btn:%p", btn);
205                 if (btn)
206                 {
207                         //first_btn = btn;
208                         char *btn_str = evas_object_data_get(popup, btn_part_str[i]);
209                         //SETTING_TRACE("btn_str:%s", btn_str);
210                         elm_object_text_set(btn, _(btn_str));
211                 }
212         }
213         SETTING_TRACE_END;
214 }
215
216 static void __popup_lang_change_cb(keynode_t *key, void *data)
217 {
218         setting_retm_if(NULL == key, "key is NULL");
219         setting_retm_if(NULL == data, "data is NULL");
220         Evas_Object *popup = data;
221         char *vconf_name = vconf_keynode_get_name(key);
222         if (!safeStrCmp(vconf_name, VCONFKEY_LANGSET))
223         {
224                 setting_popup_lang_update(popup);
225         }
226 }
227
228 static void __popup_del_cb3(void *data, Evas *e, Evas_Object *obj, void *event_info)
229
230 {
231         SETTING_TRACE_BEGIN;
232         ret_if(!obj);
233         (void)vconf_ignore_key_changed(VCONFKEY_LANGSET, __popup_lang_change_cb);
234         evas_object_data_set(obj, "title", NULL);
235         evas_object_data_set(obj, "text0", NULL);
236         evas_object_data_set(obj, "text", NULL);
237         evas_object_data_set(obj, "button1", NULL);
238         evas_object_data_set(obj, "button2", NULL);
239         evas_object_data_set(obj, "button3", NULL);
240         evas_object_data_set(obj, "check_str", NULL);
241 }
242
243
244 #define ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, text, button1_str, button2_str,button3_str) \
245 {\
246         evas_object_data_set(popup, "title", title);\
247         evas_object_data_set(popup, "text", text);\
248         evas_object_data_set(popup, "button1", button1_str);\
249         evas_object_data_set(popup, "button2", button2_str);\
250         evas_object_data_set(popup, "button3", button3_str);\
251         vconf_notify_key_changed(VCONFKEY_LANGSET, __popup_lang_change_cb, popup);\
252         evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_del_cb3, NULL);\
253 }
254
255 EXPORT_PUBLIC void setting_add_hardkey_features(Evas_Object *popup, void *data)
256 {
257         SETTING_TRACE_BEGIN;
258         ret_if(!popup);
259
260         int value = 0;
261         vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &value);
262         if (value) {
263                 return;
264         }
265
266 #if SUPPORT_BACK_KEY_GRAB
267         Ecore_X_Display *disp = ecore_x_display_get();
268         Ecore_X_Window xwin = elm_win_xwindow_get(popup);
269         int ret = utilx_grab_key(disp, xwin, KEY_BACK, TOP_POSITION_GRAB);
270         if (ret) {
271                 SETTING_TRACE_ERROR("KEY_BACK grab error ret[%d]", ret);
272         }
273 #endif
274         evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP, __hardkey_mouseup_cb, data);
275         evas_object_event_callback_add(popup, EVAS_CALLBACK_KEY_UP, __hardkey_keyup_cb, data);
276         evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_del_cb2, NULL);
277 }
278
279 static void _setting_def_response_cb(void *data, Evas_Object *obj,
280                                      void *event_info)
281 {
282         SETTING_TRACE_BEGIN;
283
284         SETTING_TRACE(" REMOVE THE POPUP OBJECT BY THIS FUNCTION ");
285         if (obj) {
286                 evas_object_del(obj);
287                 obj = NULL;
288         }
289 }
290
291 EXPORT_PUBLIC void __popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
292
293 {
294         SETTING_TRACE_BEGIN;
295         Ecore_X_Display *disp = ecore_x_display_get();
296         Ecore_X_Window xwin = elm_win_xwindow_get(obj);
297         int ret = utilx_ungrab_key(disp, xwin, KEY_HOME);
298         if (ret) {
299                 SETTING_TRACE_ERROR("KEY_HOME ungrab error ret[%d]", ret);
300         }
301
302 }
303
304 /**
305 * @ set the attribution of the specialized progressbar
306 * @See setting_create_custom_progressbar.
307 */
308 EXPORT_PUBLIC void __popup_event_set(Evas_Object *popup, void *data,
309                                          setting_call_back_func response_cb,
310                                          int timeout,//to control the timeout time
311                                          bool blocked_flag,//to control whether to block the screen
312                                          bool keygrab_flag//to control whether to block the 'Home key'
313                                          )
314 {
315         if (timeout > 0) {
316                 if (response_cb) {
317                         evas_object_smart_callback_add(popup, "timeout", response_cb, data);
318                 } else {
319                         evas_object_smart_callback_add(popup, "timeout", _setting_def_response_cb, data);
320                 }
321         }
322
323         if (!blocked_flag) {//not blocked_flag == TRUE !!!
324                 if (response_cb) {
325                         evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);
326                 } else {
327                         evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);
328                 }
329         }
330
331         if (keygrab_flag) {
332                 Ecore_X_Display *disp = ecore_x_display_get();
333                 Ecore_X_Window xwin = elm_win_xwindow_get(popup);
334                 int ret = utilx_grab_key(disp, xwin, KEY_HOME, TOP_POSITION_GRAB);
335                 if (ret) {
336                         SETTING_TRACE_ERROR("KEY_HOME grab error ret[%d]", ret);
337                 }
338                 evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_del_cb, NULL);
339                 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, __ignore_back_key_cb, NULL);
340         }
341 }
342
343 static void __ignore_back_key_cb(void *data, Evas_Object *obj,
344                 void *event_info)
345 {
346         SETTING_TRACE_BEGIN;
347         return;
348 }
349
350
351 static Evas_Object *__add_progressbar(void *data, Evas_Object *parent,
352                                           char *progressbar_style,
353                                           char *progressbar_title,
354                                           char *progressbar_lable)
355 {
356         SETTING_TRACE_BEGIN;
357
358         Evas_Object *popup = elm_popup_add(parent);
359         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, __ignore_back_key_cb, NULL);
360         //setting_add_hardkey_features(popup, data);
361         int value = 0;
362         vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &value);
363         if (!value) {
364 #if 0
365                 Ecore_X_Display *disp = ecore_x_display_get();
366                 Ecore_X_Window xwin = elm_win_xwindow_get(popup);
367                 int ret = utilx_grab_key(disp, xwin, KEY_BACK, TOP_POSITION_GRAB);
368                 if (ret) {
369                         SETTING_TRACE_ERROR("KEY_BACK grab error ret[%d]", ret);
370                 }
371 #endif
372                 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP, __hardkey_mouseup_cb, data);
373                 //evas_object_event_callback_add(popup, EVAS_CALLBACK_KEY_UP, __hardkey_keyup_cb, data);
374                 evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_del_cb2, NULL);
375         }
376
377         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
378         if (progressbar_title) {
379                 elm_object_part_text_set(popup, "title,text", _(progressbar_title));
380         }
381
382         Evas_Object *box = elm_box_add(popup);
383         elm_box_horizontal_set(box, EINA_TRUE);
384     evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
385     evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
386         elm_box_align_set(box, 0.5, 0.5);
387     elm_box_padding_set(box, 16, 0);
388
389         // [UI] progress icon
390         if (progressbar_style) {
391                 Evas_Object *progressbar = elm_progressbar_add(popup);
392                 elm_object_style_set(progressbar, progressbar_style);   /* "toolbar_process" or "pending_list" or "list_prosess" */
393                 //evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
394                 //evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
395                 elm_progressbar_pulse(progressbar, EINA_TRUE);
396                 evas_object_show(progressbar);
397                 elm_box_pack_end(box, progressbar);
398         }
399
400         // [UI] text
401         if (progressbar_lable) {
402                 Evas_Object *label = elm_label_add(popup);
403                 elm_object_text_set(label, _(progressbar_lable));       /* "Loading..." */
404                 evas_object_show(label);
405                 elm_box_pack_end(box, label);
406         }
407         ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, progressbar_title, progressbar_lable, NULL, NULL, NULL);
408         // [UI] add table
409         Evas_Object *table = elm_table_add(popup);
410         evas_object_show(table);
411         elm_table_homogeneous_set(table, EINA_FALSE);
412
413         Evas_Object *rect_up;
414         rect_up = evas_object_rectangle_add(evas_object_evas_get(popup));
415         evas_object_size_hint_min_set(rect_up, ELM_SCALE_SIZE(100), ELM_SCALE_SIZE(20));
416
417         Evas_Object *rect_down;
418         rect_down = evas_object_rectangle_add(evas_object_evas_get(popup));
419         evas_object_size_hint_min_set(rect_down, ELM_SCALE_SIZE(100), ELM_SCALE_SIZE(20));
420
421         // box
422         elm_table_pack(table, rect_up, 0, 0, 2, 1);// rect as a padding
423         elm_table_pack(table, box, 0, 1, 2, 1);
424         elm_table_pack(table, rect_down, 0, 2, 2, 1);// rect as a padding
425         evas_object_show(box);
426         elm_object_content_set(popup, table);
427         return popup;
428 }
429
430
431 void _popup_show_cb(void * data) {
432
433         if (data) {
434                 evas_object_show(data);
435         }
436 }
437
438
439 EXPORT_PUBLIC
440 Evas_Object *setting_create_popup_with_progressbar_withobject(void *data,
441                                                   Evas_Object *popup,
442                                                   Evas_Object *parent,
443                                                   char *progressbar_style,
444                                                   char *title,
445                                                   char *text,
446                                                   setting_call_back_func response_cb,
447                                                   int timeout,
448                                                   bool blocked_flag,
449                                                   bool keygrab_flag)
450 {
451         SETTING_TRACE_BEGIN;
452         if (popup) {
453                 evas_object_del(popup);
454                 popup = NULL;
455         }
456
457         popup = __add_progressbar(data, parent, progressbar_style,
458                                   title, text);
459         elm_object_style_set(popup, "no_effect");
460
461         if (timeout > 0) {
462                 elm_popup_timeout_set(popup, timeout);
463         }
464         __popup_event_set(popup, data, response_cb, timeout, blocked_flag, keygrab_flag);
465         //ecore_idler_add(_popup_show_cb, popup);
466         evas_object_show(popup);
467         return popup;
468 }
469
470
471 /**
472 * create a popup window which contents a progressbar
473 *
474 * @return a popup window which contents a progressbar
475 */
476 EXPORT_PUBLIC
477 Evas_Object *setting_create_popup_with_progressbar(void *data,
478                                                   Evas_Object *parent,
479                                                   char *progressbar_style,
480                                                   char *title,
481                                                   char *text,
482                                                   setting_call_back_func response_cb,
483                                                   int timeout,
484                                                   bool blocked_flag,
485                                                   bool keygrab_flag)
486 {
487         SETTING_TRACE_BEGIN;
488         Evas_Object *popup = NULL;
489         popup = __add_progressbar(data, parent, progressbar_style,
490                                   title, text);
491
492         if (timeout > 0) {
493                 elm_popup_timeout_set(popup, timeout);
494         }
495         __popup_event_set(popup, data, response_cb, timeout, blocked_flag, keygrab_flag);
496         //ecore_idler_add(_popup_show_cb, popup);
497         evas_object_show(popup);
498
499         return popup;
500 }
501
502 /**
503 * create a popup window which contents a progressbar and btn
504 *
505 * @return a popup window which contents a progressbar and btn
506 */
507 EXPORT_PUBLIC
508 Evas_Object *setting_create_popup_with_progressbar_btn(void *data,
509                                                   Evas_Object *parent,
510                                                   char *progressbar_style,
511                                                   char *title,
512                                                   char *text,
513                                                   setting_call_back_func response_cb,
514                                                   int timeout,
515                                                   int btn_num, ...)
516 {
517         SETTING_TRACE_BEGIN;
518         Evas_Object *popup = NULL;
519         popup = __add_progressbar(data, parent, progressbar_style,
520                                   title, text);
521
522         if (timeout > 0) {
523                 elm_popup_timeout_set(popup, timeout);
524         }
525
526         if (btn_num > 0) { //the case popup has button or buttons
527                 if (btn_num == 1)
528                 {
529                         va_list args;
530                         va_start(args, btn_num);
531
532                         char *btn_str;
533                         btn_str = va_arg( args, char *);
534                         if(safeStrCmp(_(btn_str),_("IDS_COM_SK_CANCEL")) != 0){
535                                 Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);
536                                 elm_object_style_set(btn, "popup");
537                                 elm_object_part_content_set(popup, _("button1"), btn);
538
539                                 evas_object_data_set(popup, "button1", btn_str);
540                         } else {
541                                 if (response_cb) {
542                                         evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);
543                                 } else {
544                                         evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);
545                                 }
546                         }
547                         va_end(args);
548                 }
549                 else
550                 {
551                         va_list args;
552                         va_start(args, btn_num);
553
554                         char *btn_str;
555                         int argno = 0;
556                         char *btn_part_str[] = {
557                                 _("button1"), _("button2"), _("button3")
558                         };
559
560                         //int idx = 0;
561                         for (; argno < btn_num; argno++) {
562                                 btn_str = va_arg( args, char *);
563                                 SETTING_TRACE("Parameter #%d is: %s, btn_part_str;%s", argno, btn_str, btn_part_str[argno]);
564
565                                 if (btn_str) {
566                                         Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);
567                                         elm_object_style_set(btn, "popup");
568                                         elm_object_part_content_set(popup, btn_part_str[argno], btn);
569                                         evas_object_data_set(popup, btn_part_str[argno], btn_str);
570                                 }
571                         }
572
573                         va_end(args);
574                 }
575         } else { //the case popup doesn't have any button.
576                 __popup_event_set(popup, data,response_cb, timeout, FALSE, FALSE);
577         }
578
579         evas_object_show(popup);
580         return popup;
581 }
582
583 /**
584 * The general API to create a certain popup window with more than one button.
585 * @return a certain popup window
586 */
587 EXPORT_PUBLIC
588 Evas_Object *setting_create_popup_with_btn(void *data,
589                                           Evas_Object *parent,
590                                           char *title,
591                                           char *text,
592                                           setting_call_back_func response_cb,
593                                           int timeout,
594                                           int btn_num, ...)
595 {
596         SETTING_TRACE_BEGIN;
597         Evas_Object *popup = elm_popup_add(parent);
598         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
599         setting_add_hardkey_features(popup, data);
600         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
601                                          EVAS_HINT_EXPAND);
602 #if 0
603         //popup text's default align is left, add html lable will cause TTS reading incorrect
604         if (text) {
605                 char r_str_text[HELP_MSG_BUFF_SIZE] = { 0, };
606                 /**
607                 if (title)
608                         snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=left>");
609                 else
610                         snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=center>");
611                 **/
612                 snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=left>");
613                 g_strlcat(r_str_text, text, HELP_MSG_BUFF_SIZE);
614                 g_strlcat(r_str_text, "</align>", HELP_MSG_BUFF_SIZE);
615                 elm_object_text_set(popup, r_str_text);
616
617         }
618 #endif
619         if (text) {
620                 elm_object_text_set(popup, _(text));
621         }
622         if (title) {
623                 elm_object_part_text_set(popup, "title,text", _(title));
624         }
625         if (timeout > 0) {
626                 elm_popup_timeout_set(popup, timeout);
627         }
628         ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, text, NULL, NULL, NULL);
629         SETTING_TRACE("title...:%s", evas_object_data_get(popup, "title"));
630         SETTING_TRACE("text...:%s", evas_object_data_get(popup, "text"));
631
632         if (btn_num > 0) { //the case popup has button or buttons
633                 /*currently, most button number is 3*/
634                 if(btn_num>3){
635                         SETTING_TRACE_ERROR("incorrect button number for popup");
636                         return NULL;
637                 }
638                 else if (btn_num == 1)
639                 {
640                         va_list args;
641                         va_start(args, btn_num);
642
643                         char *btn_str;
644                         btn_str = va_arg( args, char *);
645                         if(safeStrCmp(btn_str,_("IDS_COM_SK_CANCEL")) != 0){
646                                 Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);
647                                 elm_object_style_set(btn, "popup");
648                                 elm_object_part_content_set(popup, _("button1"), btn);
649                                 evas_object_data_set(popup, "button1", btn_str);
650                         } else {
651                                 if (response_cb) {
652                                         evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);
653                                 } else {
654                                         evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);
655                                 }
656                         }
657                         va_end(args);
658                 }
659                 else
660                 {
661                         va_list args;
662                         va_start(args, btn_num);
663
664                         char *btn_str[3];
665                         int argno = 0;
666
667                         char *btn_part_str[] = {
668                                 _("button1"), _("button2"), _("button3")
669                         };
670
671                         int i = 0;
672                         for (; i < btn_num; i++) {
673                                 btn_str[i] = va_arg( args, char *);
674                         }
675
676                         for (; argno < btn_num; argno++) {
677                                 SETTING_TRACE("Parameter #%d is: %s, btn_part_str;%s", argno, btn_str[btn_num-1-argno], btn_part_str[argno]);
678                                 if (btn_str[btn_num-1-argno]) {
679                                         Evas_Object *btn = setting_create_button(popup, btn_str[btn_num-1-argno], NULL, response_cb, data);
680                                         /*if(!safeStrCmp(btn_str[btn_num-1-argno], _("IDS_COM_SK_DELETE"))){
681                                                 elm_object_style_set(btn,  "style1/delete");
682                                         }
683                                         else{*/
684                                                 elm_object_style_set(btn, "popup");
685                                         //}
686                                         elm_object_part_content_set(popup, btn_part_str[argno], btn);
687                                         evas_object_data_set(popup, btn_part_str[argno], btn_str[btn_num-1-argno]);
688                                 }
689                         }
690
691                         va_end(args);
692                 }
693
694         } else { //the case popup doesn't have any button.
695                 __popup_event_set(popup, data,response_cb, timeout, FALSE, FALSE);
696         }
697         SETTING_TRACE("title...:%s", evas_object_data_get(popup, "title"));
698         SETTING_TRACE("text...:%s", evas_object_data_get(popup, "text"));
699         SETTING_TRACE("button1...:%s", evas_object_data_get(popup, "button1"));
700         SETTING_TRACE("button2...:%s", evas_object_data_get(popup, "button2"));
701         SETTING_TRACE("button3...:%s", evas_object_data_get(popup, "button3"));
702
703         evas_object_show(popup);
704         SETTING_TRACE_END;
705         return popup;
706  }
707
708 /**
709 * The general API to create a certain popup window
710 *
711 * @return a certain popup window
712 */
713 EXPORT_PUBLIC
714 Evas_Object *setting_create_popup_without_btn(void *data,
715                                         Evas_Object *parent,
716                                         char *title,
717                                         char *text,
718                                         setting_call_back_func response_cb,
719                                         int timeout,
720                                         bool blocked_flag,
721                                         bool keygrab_flag)
722 {
723         Evas_Object *popup = elm_popup_add(parent);
724         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
725         setting_add_hardkey_features(popup, data);
726         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
727                                          EVAS_HINT_EXPAND);
728 #if 0
729         //popup text's default align is left, add html lable will cause TTS reading incorrect
730         if (text) {
731                 char r_str_text[HELP_MSG_BUFF_SIZE] = { 0, };
732                 /**
733                 if (title)
734                         snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=left>");
735                 else
736                         snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=center>");
737                 **/
738                 snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=left>");
739                 g_strlcat(r_str_text, text, HELP_MSG_BUFF_SIZE);
740                 g_strlcat(r_str_text, "</align>", HELP_MSG_BUFF_SIZE);
741                 elm_object_text_set(popup, r_str_text);
742
743         }
744 #endif
745         if (text) {
746                 elm_object_text_set(popup, _(text));
747         }
748         if (title) {
749                 elm_object_part_text_set(popup, "title,text", _(title));
750         }
751         ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, text, NULL, NULL, NULL);
752         if (timeout > 0) {
753                 elm_popup_timeout_set(popup, timeout);
754         }
755
756         __popup_event_set(popup, data,response_cb, timeout, blocked_flag, keygrab_flag);
757         evas_object_show(popup);
758         return popup;
759 }
760
761 /**
762 * The API to create a certain popup window with title
763 *
764 * @return a certain popup window with title
765 * not used now
766 */
767 EXPORT_PUBLIC
768 int setting_create_simple_popup(void *data,
769                                    Evas_Object *parent,
770                                    char *title,
771                                    char *text)
772 {
773         setting_create_popup_without_btn(data, parent, title, text,
774                                          NULL, POPUP_INTERVAL, FALSE, FALSE);
775         return 0;
776 }
777
778
779 #define ADD_POPUP_BTN(btn_num, popup, response_cb, data) \
780         if (btn_num > 0) {\
781                 if (btn_num == 1)\
782                 {\
783                         va_list args;\
784                         va_start(args, btn_num);\
785                         \
786                         char *btn_str;\
787                         btn_str = va_arg( args, char *);\
788                         if(safeStrCmp(btn_str,_("IDS_COM_SK_CANCEL")) != 0){\
789                                 Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);\
790                                 elm_object_style_set(btn, "popup");\
791                                 elm_object_part_content_set(popup, _("button1"), btn);\
792                                 evas_object_data_set(popup, "button1", btn_str);\
793                         } else {\
794                                 if (response_cb) {\
795                                         evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);\
796                                 } else {\
797                                         evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);\
798                                 }\
799                         }\
800                         va_end(args);\
801                 }\
802                 else {\
803                         va_list args;\
804                         va_start(args, btn_num);\
805                         \
806                         char *btn_str;\
807                         int argno = 0;\
808                         char *btn_part_str[] = {\
809                                 _("button1"), _("button2"), _("button3")\
810                         };\
811                         \
812                         for (; argno < btn_num; argno++) {\
813                                 btn_str = va_arg( args, char *);\
814                                 SETTING_TRACE("Parameter #%d is: %s, btn_part_str;%s", argno, btn_str, btn_part_str[argno]);\
815                                 if (btn_str)\
816                                 {\
817                                         Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);\
818                                         elm_object_style_set(btn, "popup");\
819                                         elm_object_part_content_set(popup, btn_part_str[argno], btn);\
820                                         evas_object_data_set(popup, btn_part_str[argno], btn_str);\
821                                 }\
822                         }\
823                         va_end(args);\
824                 }\
825         } else {\
826                 if (response_cb) {\
827                         evas_object_smart_callback_add(popup, "timeout", response_cb, data);\
828                         evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);\
829                 } else {\
830                         evas_object_smart_callback_add(popup, "timeout", _setting_def_response_cb, data);\
831                         evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);\
832                 }\
833         }
834
835 //1Title-1Description-1Gif-nButton
836 /* @png_list is an array end with 'NULL'. like ,
837                 const char *png_list[] = {
838                         SETTING_ICON_PATH_CFG"motions/motion_overturn_01.png",
839                         SETTING_ICON_PATH_CFG"motions/motion_overturn_02.png",
840                         SETTING_ICON_PATH_CFG"motions/motion_overturn_03.png",
841                         SETTING_ICON_PATH_CFG"motions/motion_overturn_04.png",
842                         SETTING_ICON_PATH_CFG"motions/motion_overturn_05.png",
843                         NULL //must end with 'NULL'
844                 };
845 */
846 #if 0
847 static void __gif_popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
848 {
849         SETTING_TRACE_BEGIN;
850         evas_object_data_set(obj, "popup_type", NULL);
851 }
852 #endif
853
854 EXPORT_PUBLIC
855 Evas_Object *setting_create_popup_with_gif(void *data,
856                                            Evas_Object *parent,
857                                            char *title,
858                                            char *text,
859                                            const char **png_list,       //array end with 'NULL'.
860                                            setting_call_back_func response_cb,
861                                            int timeout,
862                                            int btn_num, ...)
863 {
864         SETTING_TRACE_BEGIN;
865
866         #if 0
867         //displaying image
868         Evas_Object *image = NULL;
869         if (png_list && *png_list) {
870                 if (png_list[1]) {      //png_list is an array end with 'NULL', and it has at least 2 png file,
871                         image = setting_create_gif(parent, png_list);
872                 } else {        //png_list just has one png file,
873                         image = setting_create_image(parent, *png_list);
874                 }
875         }
876
877         Evas_Object *popup = elm_popup_add(parent);
878         evas_object_show(popup);
879         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
880                                          EVAS_HINT_EXPAND);
881         //title
882         if (title) {
883                 elm_object_part_text_set(popup, "title,text", title);
884         }
885
886         if (timeout > 0) {
887                 elm_popup_timeout_set(popup, timeout);
888         }
889
890         //content
891         Evas_Object *content_box = elm_box_add(popup);
892         //instructing of displaying image
893         if (text) {
894                 Evas_Object *lable = setting_create_lable(popup, text,
895                                                           "entry", "middle");
896                 elm_box_pack_end(content_box, lable);
897         }
898         //displaying image
899         if (image) {
900                 elm_box_pack_end(content_box, image);
901         }
902
903
904         app_device_orientation_e m = elm_win_rotation_get(parent);
905         SETTING_TRACE("m:%d", m);
906         if(APP_DEVICE_ORIENTATION_90 == m || APP_DEVICE_ORIENTATION_270 == m)
907         {
908                 Evas_Object *scroller = elm_scroller_add(parent);
909                 elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
910                 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
911                 evas_object_show(scroller);
912                 elm_object_content_set(scroller, content_box);
913
914                 Evas_Object *checkview = elm_layout_add(parent);
915                 elm_layout_file_set(checkview, SETTING_THEME_EDJ_NAME, "popup_checkview_image");
916                 evas_object_size_hint_weight_set(checkview, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
917                 elm_object_part_content_set(checkview, "elm.swallow.content", scroller);
918
919                 evas_object_data_set(popup, "popup_type", "scroller");
920                 //set box into popup
921                 elm_object_content_set(popup, checkview);
922         }
923         else
924         {
925                 evas_object_data_set(popup, "popup_type", "auto_expand");
926                 elm_object_content_set(popup, content_box);
927         }
928         evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __gif_popup_del_cb, NULL);
929
930         ADD_POPUP_BTN(btn_num, popup, response_cb, data);
931         evas_object_show(popup);
932         #else
933         Evas_Object *scroller = elm_genlist_add(parent);
934         retvm_if(scroller == NULL, NULL, "Cannot set scroller object  as contento of layout");
935         elm_genlist_realization_mode_set(scroller, EINA_TRUE);
936         elm_object_style_set(scroller, "dialogue");
937         elm_genlist_clear(scroller);    /* first to clear list */
938         elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
939         evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
940
941         ADD_GL_LABLE(scroller, text);
942
943         SETTING_TRACE("png_list:%p", png_list);
944         ADD_GL_GIF(scroller,png_list)
945
946         //elm_object_content_set(popup, scroller);
947
948         Evas_Object *popup = setting_create_popup_with_checkview(parent, title, NULL, scroller,
949                                                                 "popup_checkview_image", NULL, timeout);
950
951         setting_add_hardkey_features(popup, data);
952         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
953         //evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
954         //evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
955         //evas_object_size_hint_min_set(scroller, ELM_SCALE_SIZE(480), ELM_SCALE_SIZE(700));
956
957         ADD_POPUP_BTN(btn_num, popup, response_cb, data);
958         evas_object_show(popup);
959         #endif
960         return popup;
961
962 }
963
964 EXPORT_PUBLIC
965 Evas_Object *setting_create_popup_with_checkview(Evas_Object *parent,
966                                                  char *title,
967                                                  char *check_str,
968                                                  Evas_Object *checkview_content,
969                                                  const char *checkview_style,
970                                                  Evas_Object **check,
971                                                  int timeout)
972 {
973         Evas_Object *popup = elm_popup_add(parent);
974         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
975                                          EVAS_HINT_EXPAND);
976         //title
977         if (title) {
978                 elm_object_part_text_set(popup, "title,text", _(title));
979         }
980
981         if (timeout > 0) {
982                 elm_popup_timeout_set(popup, timeout);
983         }
984
985         //set box into popup
986
987         Evas_Object *checkview = elm_layout_add(parent);
988         elm_layout_file_set(checkview, SETTING_THEME_EDJ_NAME, checkview_style);
989         evas_object_size_hint_weight_set(checkview, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
990
991         //instructing of displaying image
992         if (check_str) {
993                 edje_object_part_text_set(elm_layout_edje_get(checkview), "elm.text", _(check_str));
994         }
995         ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, NULL, NULL, NULL, NULL);
996         evas_object_data_set(popup, "check_str", check_str);
997         if (check) {
998                 *check = elm_check_add(popup);
999                 evas_object_size_hint_align_set(*check, EVAS_HINT_FILL,
1000                                                 EVAS_HINT_FILL);
1001                 evas_object_size_hint_weight_set(*check, EVAS_HINT_EXPAND,
1002                                                  EVAS_HINT_EXPAND);
1003                 evas_object_show(*check);
1004                 elm_object_part_content_set(checkview, "elm.swallow.end", *check);
1005         }
1006         //content
1007         if (checkview_content) {
1008                 elm_object_part_content_set(checkview, "elm.swallow.content", checkview_content);
1009         }
1010
1011         Evas_Object *sub_layout = elm_layout_add(popup);
1012         elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "screen_mode");
1013         evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
1014         evas_object_show(sub_layout);
1015         elm_object_part_content_set(sub_layout, "content", checkview);
1016
1017         elm_object_content_set(popup, sub_layout);
1018         return popup;
1019 }
1020
1021 EXPORT_PUBLIC
1022 Evas_Object * setting_create_popup_with_label_and_reverse_btn(void *data,
1023                   Evas_Object *parent,
1024                   char *title,
1025                   char *text,
1026                   setting_call_back_func response_cb,
1027                   int timeout,
1028                   int btn_num, ... )
1029 {
1030         Evas_Object *popup;
1031         //struct appdata *ad = (struct appdata *) data;
1032
1033         popup = elm_popup_add(parent);
1034         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
1035         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1036         elm_object_text_set(popup, _(text));
1037         ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, NULL, text, NULL, NULL, NULL);
1038
1039         ADD_POPUP_BTN(btn_num, popup, response_cb, data);
1040
1041         evas_object_show(popup);
1042
1043         return popup;
1044 }
1045
1046 EXPORT_PUBLIC
1047 Evas_Object *setting_create_popup_with_label_check(void *data,
1048                                              Evas_Object *parent,
1049                                              char *title,
1050                                              char *content,
1051                                              char *check_str,
1052                                              Evas_Object **check,
1053                                              setting_call_back_func response_cb,
1054                                              int timeout,
1055                                              int btn_num, ...)
1056 {
1057         Evas_Object *popup = elm_popup_add(parent);
1058         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
1059         setting_add_hardkey_features(popup, data);
1060         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1061
1062         if (title) {
1063                 elm_object_part_text_set(popup, "title,text", _(title));
1064         }
1065
1066         if (timeout > 0) {
1067                 elm_popup_timeout_set(popup, timeout);
1068         }
1069
1070         Evas_Object *label = NULL;
1071         label = elm_label_add(popup);
1072         elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
1073
1074         char arr[2048] = {'\0',};
1075         snprintf(arr, 2048, "<color=#000000>%s</color>",_(content));
1076         elm_object_text_set(label, arr);
1077
1078         evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
1079         evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
1080         evas_object_show(label);
1081
1082         Evas_Object *layout = elm_layout_add(popup);
1083         elm_layout_file_set(layout, SETTING_THEME_EDJ_NAME, "popup_checkview");
1084         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1085
1086         if(check) {
1087                 *check = elm_check_add(popup);
1088                 elm_object_style_set(*check, "popup");
1089                 elm_object_text_set(*check, _(check_str));
1090                 evas_object_show(*check);
1091
1092                 Evas_Object* box = elm_box_add(popup);
1093                 elm_box_horizontal_set(box, EINA_TRUE);
1094                 elm_box_pack_end(box, *check);
1095
1096                 evas_object_show(box);
1097                 elm_object_part_content_set(layout, "elm.swallow.end", box);
1098         }
1099
1100         elm_object_part_content_set(layout, "elm.swallow.content", label);
1101
1102         elm_object_content_set(popup, layout);
1103         ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, content, NULL, NULL, NULL);
1104         evas_object_data_set(popup, "check_str", check_str);
1105
1106         ADD_POPUP_BTN(btn_num, popup, response_cb, data);
1107         evas_object_show(popup);
1108         return popup;
1109 }
1110
1111
1112 /**
1113 * The API to create a certain popup window with a image, a check and some buttons
1114 * @return a certain popup window with title
1115 */
1116 EXPORT_PUBLIC
1117 Evas_Object *setting_create_popup_with_image_check(void *data,
1118                                              Evas_Object *parent,
1119                                              char *title,
1120                                              char *text1,
1121                                              char *text2,
1122                                              const char **png_list,     //array end with 'NULL'.
1123                                              char *check_str,
1124                                              Evas_Object **check,
1125                                              setting_call_back_func response_cb,
1126                                              int timeout,
1127                                              int btn_num, ...)
1128 {
1129         SETTING_TRACE_BEGIN;
1130 #if 0
1131         Evas_Object *lable = NULL;
1132
1133         Evas_Object *inner_layout = elm_layout_add(parent);
1134         elm_layout_file_set(inner_layout, SETTING_THEME_EDJ_NAME, "popup_smartscreen_internal");
1135         evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1136
1137         if (text1) {
1138                 lable = setting_create_lable(inner_layout, text1, "entry", "left");
1139                 elm_object_part_content_set(inner_layout, "elm.swallow.content1", lable);
1140         }
1141
1142         Evas_Object *image = NULL;
1143         if (png_list && *png_list) {
1144                 if (png_list[1]) {      //png_list is an array end with 'NULL', and it has at least 2 png file,
1145                         image = setting_create_gif(parent, png_list);
1146                 } else {        //png_list just has one png file,
1147                         image = setting_create_image(parent, *png_list);
1148                 }
1149
1150                 elm_object_part_content_set(inner_layout, "elm.swallow.content2", image);
1151         }
1152
1153         if (text2) {
1154                 lable = setting_create_lable(inner_layout, text2, "entry", "left");
1155                 elm_object_part_content_set(inner_layout, "elm.swallow.content3", lable);
1156         }
1157
1158         Evas_Object *scroller = elm_scroller_add(parent);
1159         evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, 0);
1160         elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
1161         elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
1162         evas_object_show(scroller);
1163         elm_object_content_set(scroller, inner_layout);
1164 #endif
1165         Evas_Object *scroller = elm_genlist_add(parent);
1166         retvm_if(scroller == NULL, NULL, "Cannot set scroller object  as contento of layout");
1167         elm_genlist_realization_mode_set(scroller, EINA_TRUE);
1168         elm_object_style_set(scroller, "dialogue");
1169         elm_genlist_clear(scroller);    /* first to clear list */
1170         elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
1171         evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
1172
1173         ADD_GL_LABLE(scroller, text1);
1174
1175         SETTING_TRACE("png_list:%p", png_list);
1176         ADD_GL_GIF(scroller,png_list)
1177         ADD_GL_LABLE(scroller, text2);
1178         //ADD_GL_BUTTON(scroller, content_button_str, content_button_click_cb, cb_data)
1179         Evas_Object *popup = setting_create_popup_with_checkview(parent, title, check_str, scroller,
1180                                                                 "popup_checkview_image", check, timeout);
1181         setting_add_hardkey_features(popup, data);
1182         ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
1183
1184         ADD_POPUP_BTN(btn_num, popup, response_cb, data);
1185         evas_object_show(popup);
1186         return popup;
1187 }
1188
1189 /**
1190 * Create selectinfo popup
1191 */
1192 EXPORT_PUBLIC
1193 void setting_create_sel_info_popup(Evas_Object *parent,
1194                                    Evas_Object **selInfoPop_layout,
1195                                    Evas_Object **selInfoPop)
1196 {
1197         SETTING_TRACE_BEGIN;
1198         SETTING_TRACE("*selInfoPop:%p", *selInfoPop);
1199         if (!(*selInfoPop)) {
1200                 /*  Add notify */
1201                 *selInfoPop = elm_notify_add(parent);
1202                 elm_notify_align_set(*selInfoPop, ELM_NOTIFY_ALIGN_FILL, 1.0);
1203                 elm_notify_timeout_set(*selInfoPop, 3);
1204
1205                 /*  list_data->selInfoPop layout add */
1206                 *selInfoPop_layout = elm_layout_add(*selInfoPop);
1207                 elm_layout_theme_set(*selInfoPop_layout, "standard", "selectioninfo", "center_text");
1208
1209                 /*  list_data->selInfoPop layout content set to notify */
1210                 elm_object_content_set(*selInfoPop, *selInfoPop_layout);
1211         }
1212
1213         evas_object_show(*selInfoPop);
1214 }
1215
1216 EXPORT_PUBLIC
1217 void setting_create_select_info_popup(Evas_Object **popup, Evas_Object *parent, double timeout, char *content_text, char *style)
1218 {
1219         SETTING_TRACE_BEGIN;
1220         setting_retm_if(parent == NULL, "parent is NULL");
1221         //SETTING_TRACE("*popup:%p", *popup);
1222         if (!(*popup)) {
1223                 *popup = elm_notify_add(parent);
1224                 elm_notify_align_set(*popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
1225
1226                 Evas_Object *selectioninfo_layout = NULL;
1227                 selectioninfo_layout = elm_layout_add(*popup);
1228                 elm_object_content_set(*popup, selectioninfo_layout);
1229
1230                 elm_notify_timeout_set(*popup, timeout);
1231
1232                 Evas_Object *content_obj = elm_object_content_get(*popup);
1233                 /* Set the layout theme */
1234                 elm_layout_theme_set(content_obj, "standard", "selectioninfo", style);
1235
1236                 char text[MAX_DISPLAY_NAME_LEN_ON_UI] = {0,};
1237                 snprintf(text, sizeof(text), "%s", content_text);
1238                 elm_object_part_text_set(content_obj, "elm.text", text);
1239         }
1240         evas_object_show(*popup);
1241 }
1242
1243 /**
1244 * The API going to insert a record into noti_list in /opt/dbspace/.notification.db
1245 * @ you can check the result via "sqlite3 /opt/dbspace/.notification.db" "select * from noti_list;"
1246 * @ App (quickpanel) use notification_register_detailed_changed_cb to listen all notification/DB events,
1247 * @ in the function _quickpanel_noti_detailed_changed_cb(), it will check the event type(INSERT,UPDATE..)
1248 * @ Take INSERT event for example,
1249 * @ it get the noti_type via notification_get_type,then:
1250         if (noti_type == NOTIFICATION_TYPE_NOTI) {
1251                 _quickpanel_noti_noti_add(ad->list, noti_new, GRIDBOX_PREPEND);
1252         } else if (noti_type == NOTIFICATION_TYPE_ONGOING) {
1253                 _quickpanel_noti_ongoing_add(ad->list, noti_new, LISTBOX_PREPEND);
1254         }
1255 * @ for noti:
1256         "quickpanel/notibox/thumbnail"  ---NOTIFICATION_LY_NOTI_THUMBNAIL
1257         "quickpanel/notibox/single_multi"  --Others
1258
1259 * @ for ongoing:
1260         "quickpanel/listitem/default"  --NOTIFICATION_LY_NOTI_EVENT_SINGLE
1261
1262 * usage: dlogutil NOTIFICATION QUICKPANEL indicator
1263         1.ongoing---it's like quick pannel brightness (list item)
1264         setting_create_noti("setting-blockingmode-efl", NOTIFICATION_TYPE_ONGOING,
1265                          NOTIFICATION_LY_ONGOING_EVENT, _(title), _(content),
1266                          IMG_BlockingMode, NULL);
1267
1268         2.notification---it's grid below ongoing (square grid box)
1269         setting_create_noti("setting-sim-manager-efl", NOTIFICATION_TYPE_NOTI,
1270                  NOTIFICATION_LY_NOTI_EVENT_SINGLE, "111", _(noti_str),
1271                  IMG_BlockingMode, NULL);
1272 */
1273 EXPORT_PUBLIC void setting_create_quickpannel_notification(const char *pkgname, int noti_type,
1274                                  int ly_type, const char *title,
1275                                  const char *content, const char *image, int *noti_id)
1276 {
1277         SETTING_TRACE_BEGIN;
1278         notification_h noti = NULL;
1279         notification_error_e ret = NOTIFICATION_ERROR_NONE;
1280
1281         ret = notification_delete_all_by_type(pkgname, noti_type);
1282         SETTING_TRACE("delete all result:%d", ret);
1283
1284         noti = notification_new((notification_type_e)noti_type, NOTIFICATION_GROUP_ID_NONE, NOTIFICATION_PRIV_ID_NONE);
1285         retm_if(!noti, "Fail to notification_new");
1286         do
1287         {
1288                 /*ret = notification_set_property(noti, NOTIFICATION_PROP_VOLATILE_DISPLAY);
1289                 if (ret != NOTIFICATION_ERROR_NONE) break;*/
1290
1291                 ret = notification_set_layout(noti, (notification_ly_type_e)ly_type);
1292                 if (ret != NOTIFICATION_ERROR_NONE) break;
1293
1294                 if (image)
1295                 {
1296                         ret = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, image);
1297                         if (ret != NOTIFICATION_ERROR_NONE) break;
1298                 }
1299
1300                 if (title)
1301                 {
1302                         ret = notification_set_text(noti,NOTIFICATION_TEXT_TYPE_TITLE, title, title, NOTIFICATION_VARIABLE_TYPE_NONE);
1303                         if (ret != NOTIFICATION_ERROR_NONE) break;
1304                 }
1305
1306                 if (content)
1307                 {
1308                         ret = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT,content, content, NOTIFICATION_VARIABLE_TYPE_NONE);
1309                         if (ret != NOTIFICATION_ERROR_NONE) break;
1310                 }
1311
1312                 ret = notification_set_text_domain(noti, SETTING_PACKAGE, SETTING_LOCALEDIR);
1313                 if (ret != NOTIFICATION_ERROR_NONE) break;
1314
1315                 ret = notification_set_pkgname(noti, pkgname);
1316                 if (ret != NOTIFICATION_ERROR_NONE) break;
1317
1318                 #if 0
1319                 ret = notification_set_application(noti, pkgname);
1320                 if (ret != NOTIFICATION_ERROR_NONE) break;
1321                 #endif
1322
1323                 ret = notification_insert(noti, noti_id);
1324                 if (ret != NOTIFICATION_ERROR_NONE) break;
1325         }while(0);
1326
1327
1328         if (notification_free(noti) != NOTIFICATION_ERROR_NONE) {
1329                 SETTING_TRACE_ERROR("Fail to notification_free");
1330         }
1331         return;
1332 }
1333
1334
1335 EXPORT_PUBLIC void setting_remove_quickpannel_notification(const char *pkgname, int noti_type, int *noti_id)
1336 {
1337         SETTING_TRACE_BEGIN;
1338         notification_error_e ret = NOTIFICATION_ERROR_NONE;
1339         ret = notification_delete_all_by_type(pkgname, noti_type);
1340         if (ret != NOTIFICATION_ERROR_NONE) {
1341                 SETTING_TRACE_ERROR("Fail to notification_delete_all_by_type [%d]", ret);
1342         }
1343
1344         /* reset id */
1345         *noti_id = -1;
1346 }
1347
1348 /*The API is going to register a message to NOTIFICATION_STATUS_MESSAGE_KEY, and the message will be shown in indicator
1349 * @ Quickpannel App save the value of var message, and it supply notification_status_monitor_message_cb_set,
1350 * @ in which, Indicator can set process of vconf(NOTIFICATION_STATUS_MESSAGE_KEY) change event,in the call __message_callback,
1351 * @ it will invoke indicator_part_text_emit_by_win(win,"message.text.compare", text); to show message you registered
1352 */
1353 EXPORT_PUBLIC void setting_create_indicator_notification(const char *message)
1354 {
1355         notification_status_message_post(message);
1356 }