tizen 2.3.1 release
[apps/home/settings.git] / setting-phone / src / setting-phone-ticker-notification.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 #include <setting-phone-ticker-notification.h>
22 #include <ail.h>
23 #define SUPPORT_TWITTER         0
24 #define SUPPORT_FACEBOOK        0
25 static void get_3rd_applist(void *data, Evas_Object *scroller);
26
27 static char *get_appname(char *keyname);
28
29 static int setting_phone_ticker_notfication_create(void *cb);
30 static int setting_phone_ticker_notfication_destroy(void *cb);
31 static int setting_phone_ticker_notfication_update(void *cb);
32 static int setting_phone_ticker_notfication_cleanup(void *cb);
33
34 setting_view setting_view_phone_ticker_notification = {
35         .create = setting_phone_ticker_notfication_create,
36         .destroy = setting_phone_ticker_notfication_destroy,
37         .update = setting_phone_ticker_notfication_update,
38         .cleanup = setting_phone_ticker_notfication_cleanup,
39 };
40
41 /* ***************************************************
42  *
43  *basic func
44  *
45  ***************************************************/
46 static char *get_email_subtext()
47 {
48         char ret_str[MAX_SPECIALIZITION_LEN] = { 0, };
49         int noti = 0;
50         vconf_get_bool(VCONFKEY_SETAPPL_STATE_TICKER_NOTI_EMAIL_BOOL, &noti);
51         int sound = 0;
52         vconf_get_bool(VCONFKEY_TICKER_NOTI_SOUND_EMAIL, &sound);
53         int display = 0;
54         vconf_get_bool(VCONFKEY_TICKER_NOTI_DISPLAY_CONTENT_EMAIL, &display);
55         int badge = 0;
56         vconf_get_bool(VCONFKEY_TICKER_NOTI_BADGE_EMAIL, &badge);
57
58         int cnt = 0;
59         if (noti) {
60                 g_strlcat(ret_str, _("IDS_ST_BODY_NOTIFICATION"), MAX_SPECIALIZITION_LEN);
61                 cnt++;
62         }
63
64         if (sound) {
65                 if (cnt)
66                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
67                 g_strlcat(ret_str, _(KeyStr_Sounds), MAX_SPECIALIZITION_LEN);
68                 cnt++;
69         }
70
71         if (display) {
72                 if (cnt)
73                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
74                 g_strlcat(ret_str, _("IDS_ST_BODY_DISPLAY_CONTENTS"), MAX_SPECIALIZITION_LEN);
75                 cnt++;
76         }
77
78         if (badge) {
79                 if (cnt)
80                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
81                 g_strlcat(ret_str, _("IDS_COM_BODY_BADGE_ABB"), MAX_SPECIALIZITION_LEN);
82                 cnt++;
83         }
84         return (char *)g_strdup(ret_str);
85 }
86 static char *get_message_subtext()
87 {
88         char ret_str[MAX_SPECIALIZITION_LEN] = { 0, };
89         int noti = 0;
90         vconf_get_bool(VCONFKEY_SETAPPL_STATE_TICKER_NOTI_MESSAGES_BOOL, &noti);
91         int sound = 0;
92         vconf_get_bool(VCONFKEY_TICKER_NOTI_SOUND_MESSAGES, &sound);
93         int display = 0;
94         vconf_get_bool(VCONFKEY_TICKER_NOTI_DISPLAY_CONTENT_MESSASGES, &display);
95         int badge = 0;
96         vconf_get_bool(VCONFKEY_TICKER_NOTI_BADGE_MESSAGES, &badge);
97
98         int cnt = 0;
99         if (noti) {
100                 g_strlcat(ret_str, _("IDS_ST_BODY_NOTIFICATION"), MAX_SPECIALIZITION_LEN);
101                 cnt++;
102         }
103
104         if (sound) {
105                 if (cnt)
106                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
107                 g_strlcat(ret_str, _(KeyStr_Sounds), MAX_SPECIALIZITION_LEN);
108                 cnt++;
109         }
110
111         if (display) {
112                 if (cnt)
113                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
114                 g_strlcat(ret_str, _("IDS_ST_BODY_DISPLAY_CONTENTS"), MAX_SPECIALIZITION_LEN);
115                 cnt++;
116         }
117
118         if (badge) {
119                 if (cnt)
120                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
121                 g_strlcat(ret_str, _("IDS_COM_BODY_BADGE_ABB"), MAX_SPECIALIZITION_LEN);
122                 cnt++;
123         }
124
125         return (char *)g_strdup(ret_str);
126 }
127
128 static char *get_im_subtext()
129 {
130         char ret_str[MAX_SPECIALIZITION_LEN] = { 0, };
131         int noti = 0;
132         vconf_get_bool(VCONFKEY_SETAPPL_STATE_TICKER_NOTI_IM_BOOL, &noti);
133         int sound = 0;
134         vconf_get_bool(VCONFKEY_TICKER_NOTI_SOUND_IM, &sound);
135         int display = 0;
136         vconf_get_bool(VCONFKEY_TICKER_NOTI_DISPLAY_CONTENT_IM, &display);
137         int badge = 0;
138         vconf_get_bool(VCONFKEY_TICKER_NOTI_BADGE_IM, &badge);
139
140         int cnt = 0;
141         if (noti) {
142                 g_strlcat(ret_str, _("IDS_ST_BODY_NOTIFICATION"), MAX_SPECIALIZITION_LEN);
143                 cnt++;
144         }
145
146         if (sound) {
147                 if (cnt)
148                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
149                 g_strlcat(ret_str, _(KeyStr_Sounds), MAX_SPECIALIZITION_LEN);
150                 cnt++;
151         }
152
153         if (display) {
154                 if (cnt)
155                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
156                 g_strlcat(ret_str, _("IDS_ST_BODY_DISPLAY_CONTENTS"), MAX_SPECIALIZITION_LEN);
157                 cnt++;
158         }
159
160         if (badge) {
161                 if (cnt)
162                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
163                 g_strlcat(ret_str, _("IDS_COM_BODY_BADGE_ABB"), MAX_SPECIALIZITION_LEN);
164                 cnt++;
165         }
166
167         return (char *)g_strdup(ret_str);
168 }
169
170 static char *get_facebook_subtext()
171 {
172         char ret_str[MAX_SPECIALIZITION_LEN] = { 0, };
173         int noti = 0;
174         vconf_get_bool(VCONFKEY_SETAPPL_STATE_TICKER_NOTI_FACEBOOK_BOOL, &noti);
175         /*int sound = 0; */
176         /*vconf_get_bool(VCONFKEY_TICKER_NOTI_SOUND_FACEBOOK, &sound); */
177         int display = 0;
178         vconf_get_bool(VCONFKEY_TICKER_NOTI_DISPLAY_CONTENT_FACEBOOK, &display);
179         int badge = 0;
180         vconf_get_bool(VCONFKEY_TICKER_NOTI_BADGE_FACEBOOK, &badge);
181
182         int cnt = 0;
183         if (noti) {
184                 g_strlcat(ret_str, _("IDS_ST_BODY_NOTIFICATION"), MAX_SPECIALIZITION_LEN);
185                 cnt++;
186         }
187
188         /*if (sound) */
189         /*{ */
190         /*      if (cnt) */
191         /*              g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN); */
192         /*      g_strlcat(ret_str, _(KeyStr_Sounds), MAX_SPECIALIZITION_LEN); */
193         /*      cnt++; */
194         /*} */
195
196         if (display) {
197                 if (cnt)
198                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
199                 g_strlcat(ret_str, _("IDS_ST_BODY_DISPLAY_CONTENTS"), MAX_SPECIALIZITION_LEN);
200                 cnt++;
201         }
202
203         if (badge) {
204                 if (cnt)
205                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
206                 g_strlcat(ret_str, _("IDS_COM_BODY_BADGE_ABB"), MAX_SPECIALIZITION_LEN);
207                 cnt++;
208         }
209
210         return (char *)g_strdup(ret_str);
211 }
212 static char *get_twitter_subtext()
213 {
214         char ret_str[MAX_SPECIALIZITION_LEN] = { 0, };
215         int noti = 0;
216         vconf_get_bool(VCONFKEY_SETAPPL_STATE_TICKER_NOTI_TWITTER_BOOL, &noti);
217         /*int sound = 0; */
218         /*vconf_get_bool(VCONFKEY_TICKER_NOTI_SOUND_TWITTER, &sound); */
219         int display = 0;
220         vconf_get_bool(VCONFKEY_TICKER_NOTI_DISPLAY_CONTENT_TWITTER, &display);
221         int badge = 0;
222         vconf_get_bool(VCONFKEY_TICKER_NOTI_BADGE_TWITTER, &badge);
223
224         int cnt = 0;
225         if (noti) {
226                 g_strlcat(ret_str, _("IDS_ST_BODY_NOTIFICATION"), MAX_SPECIALIZITION_LEN);
227                 cnt++;
228         }
229
230         /*if (sound) */
231         /*{ */
232         /*      if (cnt) */
233         /*              g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN); */
234         /*      g_strlcat(ret_str, _(KeyStr_Sounds), MAX_SPECIALIZITION_LEN); */
235         /*      cnt++; */
236         /*} */
237
238         if (display) {
239                 if (cnt)
240                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
241                 g_strlcat(ret_str, _("IDS_ST_BODY_DISPLAY_CONTENTS"), MAX_SPECIALIZITION_LEN);
242                 cnt++;
243         }
244
245         if (badge) {
246                 if (cnt)
247                         g_strlcat(ret_str, ", ", MAX_SPECIALIZITION_LEN);
248                 g_strlcat(ret_str, _("IDS_COM_BODY_BADGE_ABB"), MAX_SPECIALIZITION_LEN);
249                 cnt++;
250         }
251
252         return (char *)g_strdup(ret_str);
253 }
254
255
256 static int setting_phone_ticker_notfication_create(void *cb)
257 {
258         /* error check */
259         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
260         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
261
262         Evas_Object *scroller;
263
264         /* scroller is a genlist */
265         ad->ly_ticker =
266             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
267                                                    ad->win_get,
268                                                    setting_gettext(KeyStr_EventsNotifications),
269                                                    dgettext("sys_string", "IDS_COM_BODY_BACK"),
270                                                    NULL,
271                                                    setting_phone_noti_click_softkey_back_cb,
272                                                    NULL, ad, &scroller,
273                                                    &(ad->navi_bar));
274         elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
275         int value = 0;
276
277         Elm_Object_Item *item;
278         char *status = NULL;
279         item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
280         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
281
282         /* [UI] Email */
283         /*setting_get_bool_slp_key(BOOL_SLP_SETTING_TICKER_NOTI_EMAIL, &value, &err);
284         if (value == 1) {
285                 status = setting_gettext("IDS_COM_BODY_ON_M_STATUS");
286         } else {
287                 status = setting_gettext("IDS_COM_BODY_OFF_M_STATUS");
288         }*/
289         Setting_GenGroupItem_Data *data_last_item;
290         value = 0;
291         status = get_email_subtext();
292         data_last_item = ad->data_n_email =
293                              setting_create_Gendial_field_groupitem(scroller,
294                                                                     &itc_multiline_2text,
295                                                                     NULL,
296                                                                     setting_phone_noti_mouse_up_Gendial_list_cb,
297                                                                     ad,
298                                                                     SWALLOW_Type_INVALID,
299                                                                     NULL,
300                                                                     NULL,
301                                                                     value, /* chk_status*/
302                                                                     "IDS_ST_BODY_EMAIL",
303                                                                     status, /* sub_desk*/
304                                                                     setting_phone_noti_mouse_up_chk_btn_cb);
305         G_FREE(status);
306         if (ad->data_n_email) {
307                 ad->data_n_email->userdata = ad;
308                 ad->data_n_email->group_style = SETTING_GROUP_STYLE_TOP;
309         } else {
310                 SETTING_TRACE_ERROR("ad->data_n_email is NULL");
311         }
312
313         /* [UI] Messages */
314         /*setting_get_bool_slp_key(BOOL_SLP_SETTING_TICKER_NOTI_MESSAGES, &value, &err);
315         if (value == 1) {
316                 status = setting_gettext("IDS_COM_BODY_ON_M_STATUS");
317         } else {
318                 status = setting_gettext("IDS_COM_BODY_OFF_M_STATUS");
319         }*/
320         value = 0;
321         status = get_message_subtext();
322         data_last_item = ad->data_n_msg =
323                              setting_create_Gendial_field_groupitem(scroller,
324                                                                     &itc_multiline_2text,
325                                                                     NULL,
326                                                                     setting_phone_noti_mouse_up_Gendial_list_cb,
327                                                                     ad,
328                                                                     SWALLOW_Type_INVALID,
329                                                                     NULL,
330                                                                     NULL,
331                                                                     value, /* chk_status*/
332                                                                     "IDS_ST_BODY_MESSAGE",
333                                                                     status, /* sub_desk*/
334                                                                     setting_phone_noti_mouse_up_chk_btn_cb);
335
336         G_FREE(status);
337         if (ad->data_n_msg) {
338                 ad->data_n_msg->userdata = ad;
339                 ad->data_n_msg->group_style = SETTING_GROUP_STYLE_CENTER;
340         } else {
341                 SETTING_TRACE_ERROR("ad->data_n_msg is NULL");
342         }
343
344 #if 0
345         /* [UI] Instant messenger */
346         /*setting_get_bool_slp_key(BOOL_SLP_SETTING_TICKER_NOTI_IM, &value, &err);
347         if (value == 1) {
348                 status = setting_gettext("IDS_COM_BODY_ON_M_STATUS");
349         } else {
350                 status = setting_gettext("IDS_COM_BODY_OFF_M_STATUS");
351         }*/
352         value = 0;
353         status = get_im_subtext();
354         data_last_item = ad->data_n_im =
355                              setting_create_Gendial_field_groupitem(scroller,
356                                                                     &itc_multiline_2text,
357                                                                     NULL,
358                                                                     setting_phone_noti_mouse_up_Gendial_list_cb,
359                                                                     ad,
360                                                                     SWALLOW_Type_INVALID,
361                                                                     NULL,
362                                                                     NULL,
363                                                                     value, /* chk_status*/
364                                                                     "IDS_COM_BODY_INSTANT_MESSENGER",
365                                                                     status, /* sub_desk*/
366                                                                     setting_phone_noti_mouse_up_chk_btn_cb);
367         G_FREE(status);
368         if (ad->data_n_im) {
369                 ad->data_n_im->userdata = ad;
370                 ad->data_n_im->group_style = SETTING_GROUP_STYLE_BOTTOM;
371         } else {
372                 SETTING_TRACE_ERROR("ad->data_n_im is NULL");
373         }
374 #endif
375 #if SUPPORT_FACEBOOK
376         /* [UI] Facebook */
377         /*setting_get_bool_slp_key(BOOL_SLP_SETTING_TICKER_NOTI_FACEBOOK, &value, &err);
378         if (value == 1) {
379                 status = setting_gettext("IDS_COM_BODY_ON_M_STATUS");
380         } else {
381                 status = setting_gettext("IDS_COM_BODY_OFF_M_STATUS");
382         }*/
383         value = 0;
384         status = get_facebook_subtext();
385
386         data_last_item = ad->data_n_fb =
387                              setting_create_Gendial_field_groupitem(scroller,
388                                                                     &itc_multiline_2text,
389                                                                     NULL,
390                                                                     setting_phone_noti_mouse_up_Gendial_list_cb,
391                                                                     ad,
392                                                                     SWALLOW_Type_INVALID,
393                                                                     NULL,
394                                                                     NULL,
395                                                                     value, /* chk_status*/
396                                                                     KeyStr_Facebook,
397                                                                     status, /* sub_desk*/
398                                                                     setting_phone_noti_mouse_up_chk_btn_cb);
399         G_FREE(status);
400         if (ad->data_n_fb) {
401                 ad->data_n_fb->userdata = ad;
402         } else {
403                 SETTING_TRACE_ERROR("ad->data_n_msg is NULL");
404         }
405 #endif
406
407 #if SUPPORT_TWITTER
408         /* [UI] Twitter */
409         /*setting_get_bool_slp_key(BOOL_SLP_SETTING_TICKER_NOTI_TWITTER, &value, &err);
410         if (value == 1) {
411                 status = setting_gettext("IDS_COM_BODY_ON_M_STATUS");
412         } else {
413                 status = setting_gettext("IDS_COM_BODY_OFF_M_STATUS");
414         }*/
415         value = 0;
416         status = get_twitter_subtext();
417         data_last_item = ad->data_n_twt =
418                              setting_create_Gendial_field_groupitem(scroller,
419                                                                     &itc_multiline_2text,
420                                                                     NULL,
421                                                                     setting_phone_noti_mouse_up_Gendial_list_cb,
422                                                                     ad,
423                                                                     SWALLOW_Type_INVALID,
424                                                                     NULL,
425                                                                     NULL,
426                                                                     value, /* chk_status*/
427                                                                     KeyStr_Twitter,
428                                                                     status, /* sub_desk*/
429                                                                     setting_phone_noti_mouse_up_chk_btn_cb);
430         G_FREE(status);
431         if (ad->data_n_twt) {
432                 ad->data_n_twt->userdata = ad;
433         } else {
434                 SETTING_TRACE_ERROR("ad->data_n_msg is NULL");
435         }
436 #endif
437         /* [UI] list of 3rd party apps */
438 #if APP_3RD_LIST
439         get_3rd_applist(ad, scroller);
440 #endif
441         /*data_last_item->group_style = SETTING_GROUP_STYLE_BOTTOM; */
442         setting_genlist_item_groupstyle_set(data_last_item, SETTING_GROUP_STYLE_BOTTOM);
443
444         setting_view_phone_ticker_notification.is_create = 1;
445         return SETTING_RETURN_SUCCESS;
446 }
447
448 static int setting_phone_ticker_notfication_destroy(void *cb)
449 {
450         SETTING_TRACE_BEGIN;
451         /* error check */
452         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
453
454         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
455
456         if (ad->ly_ticker != NULL) {
457                 evas_object_del(ad->ly_ticker);
458                 setting_view_phone_ticker_notification.is_create = 0;
459         }
460
461         return SETTING_RETURN_SUCCESS;
462 }
463
464 static int setting_phone_ticker_notfication_update(void *cb)
465 {
466         SETTING_TRACE_BEGIN;
467         /* error check */
468         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
469
470         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
471         if (ad->data_n_email) {
472                 G_FREE(ad->data_n_email->sub_desc);
473                 ad->data_n_email->sub_desc = get_email_subtext();
474                 elm_genlist_item_fields_update(ad->data_n_email->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
475         }
476         if (ad->data_n_msg) {
477                 G_FREE(ad->data_n_msg->sub_desc);
478                 ad->data_n_msg->sub_desc = get_message_subtext();
479                 elm_genlist_item_fields_update(ad->data_n_msg->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
480         }
481         if (ad->data_n_im) {
482                 G_FREE(ad->data_n_im->sub_desc);
483                 ad->data_n_im->sub_desc = get_im_subtext();
484                 elm_genlist_item_fields_update(ad->data_n_im->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
485         }
486         if (ad->data_n_fb) {
487                 G_FREE(ad->data_n_fb->sub_desc);
488                 ad->data_n_fb->sub_desc = get_facebook_subtext();
489                 elm_genlist_item_fields_update(ad->data_n_fb->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
490         }
491         if (ad->data_n_twt) {
492                 G_FREE(ad->data_n_twt->sub_desc);
493                 ad->data_n_twt->sub_desc = get_twitter_subtext();
494                 elm_genlist_item_fields_update(ad->data_n_twt->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
495         }
496
497         if (ad->ly_ticker != NULL) {
498                 evas_object_show(ad->ly_ticker);
499         }
500
501         return SETTING_RETURN_SUCCESS;
502 }
503
504 static int setting_phone_ticker_notfication_cleanup(void *cb)
505 {
506         SETTING_TRACE_BEGIN;
507         /* error check */
508         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
509
510         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
511
512         if (ad->ly_ticker != NULL) {
513                 evas_object_hide(ad->ly_ticker);
514         }
515
516         return SETTING_RETURN_SUCCESS;
517 }
518
519 /* ***************************************************
520  *
521  *general func
522  *
523  ***************************************************/
524
525 /* ***************************************************
526  *
527  *call back func
528  *
529  ***************************************************/
530
531 static void setting_phone_noti_mouse_up_chk_btn_cb(void *data, Evas_Object *obj,
532                                                    void *event_info)
533 {
534         SETTING_TRACE_BEGIN;
535         return;
536 }
537
538 static void
539 setting_phone_noti_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
540                                             void *event_info)
541 {
542         SETTING_TRACE_BEGIN;
543         /* error check */
544         setting_retm_if(data == NULL, "Data parameter is NULL");
545         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
546
547         SettingPhoneUG *ad = (SettingPhoneUG *) data;
548
549         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
550         elm_genlist_item_selected_set(item, 0);
551         Setting_GenGroupItem_Data *list_item =
552             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
553
554         setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
555
556         if (0 == safeStrCmp(list_item->keyStr, "IDS_ST_BODY_DISPLAY_CONTENTS")) {
557                 ad->sel_string = "IDS_ST_BODY_DISPLAY_CONTENTS";
558
559         } else if (0 == safeStrCmp(list_item->keyStr, "IDS_ST_BODY_MESSAGE")) {
560                 ad->sel_string = "IDS_ST_BODY_MESSAGE";
561
562         } else if (0 == safeStrCmp(list_item->keyStr, "IDS_ST_BODY_EMAIL")) {
563                 ad->sel_string = "IDS_ST_BODY_EMAIL";
564
565         }
566         /* add new menue */
567         else if (0 == safeStrCmp(list_item->keyStr, "IDS_COM_BODY_INSTANT_MESSENGER")) {
568                 ad->sel_string = "IDS_COM_BODY_INSTANT_MESSENGER";
569         } else if (0 == safeStrCmp(list_item->keyStr, KeyStr_Twitter)) {
570                 ad->sel_string = KeyStr_Twitter;
571         } else if (0 == safeStrCmp(list_item->keyStr, KeyStr_Facebook)) {
572                 ad->sel_string = KeyStr_Facebook;
573         }
574
575
576         /* go to 'details' page */
577         setting_view_change(&setting_view_phone_ticker_notification, &setting_view_phone_ticker_notification_details, ad);
578 }
579
580 static void
581 setting_phone_noti_click_softkey_back_cb(void *data, Evas_Object *obj,
582                                          void *event_info)
583 {
584         /* error check */
585         retm_if(data == NULL, "Data parameter is NULL");
586
587         SettingPhoneUG *ad = (SettingPhoneUG *) data;
588
589         /* Send destroy request */
590         ug_destroy_me(ad->ug);
591 }
592
593 /*****/
594
595 static void
596 setting_phone_noti_3rd_apps_chk_btn_cb(void *data, Evas_Object *obj,
597                                        void *event_info)
598 {
599         SETTING_TRACE_BEGIN;
600         /* error check */
601         retm_if(data == NULL, "Data parameter is NULL");
602         Setting_GenGroupItem_Data *list_item =
603             (Setting_GenGroupItem_Data *) data;
604         /* SettingPhoneUG *ad = list_item->userdata; */
605         list_item->chk_status = elm_check_state_get(obj);       /*  for genlist update status */
606
607         if (0 != vconf_set_int(list_item->sub_desc, list_item->chk_status)) {
608                 SETTING_TRACE("Set vconf[%s] failed", list_item->sub_desc);
609                 /*  restore if failed */
610                 setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
611         } else {
612                 SETTING_TRACE("Set vconf[%s] success", list_item->sub_desc);
613
614                 int ret = -1;
615                 ret = vconf_set_int(list_item->sub_desc, list_item->chk_status);
616                 if (ret) {
617                         SETTING_TRACE("Set vconf[%s] failed",
618                                       list_item->sub_desc);
619                 } else {
620                         /* TODO : find alternatives */
621                         /* ret = heynoti_publish ("setting_event_noti_3rdapp_changed"); */
622                         /* SETTING_TRACE("heynoti publish ret = %d ", ret); */
623                         /*if (ret < 0) { */
624                         /*      SETTING_TRACE_ERROR ("heynoti_publish error - [%d] failed", ret); */
625                         /*} */
626                 }
627
628                 if (ret < 0) {
629                         SETTING_TRACE("heynoti publish ret = %d ", ret);
630                         /*  restore if failed */
631                         setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
632                 }
633         }
634 }
635
636 static void
637 setting_phone_noti_3rd_apps_mouse_up_Gendial_list_cb(void *data,
638                                                      Evas_Object *obj,
639                                                      void *event_info)
640 {
641         /* error check */
642         setting_retm_if(data == NULL, "Data parameter is NULL");
643
644         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
645         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
646
647         elm_genlist_item_selected_set(item, 0);
648         Setting_GenGroupItem_Data *list_item =
649             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
650
651         setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
652 }
653
654 /**
655  * 3rd party apps list
656  */
657 static void get_3rd_applist(void *data, Evas_Object *scroller)
658 {
659         SettingPhoneUG *ad = (SettingPhoneUG *) data;
660
661         keylist_t *kl = NULL;
662         keynode_t *temp_node = NULL;
663
664         kl = vconf_keylist_new();
665
666         int i = 0;
667         while ((temp_node = vconf_keylist_nextnode(kl))) {
668                 /*  draw a node */
669                 if (VCONF_TYPE_INT == vconf_keynode_get_type(temp_node)) {
670                         SETTING_TRACE("key = %s, value = %d",
671                                       vconf_keynode_get_name(temp_node),
672                                       vconf_keynode_get_int(temp_node));
673                         /*  draw control */
674                         int val = vconf_keynode_get_int(temp_node);
675
676                         /*  get applist */
677                         char *vconf_key = vconf_keynode_get_name(temp_node);    /*  key */
678
679                         /*  get app name with app_pkg_name and AIL */
680                         /*  parsing */
681                         char *app_name = get_appname(vconf_key);
682                         if (!app_name) {
683                                 app_name = strdup("UNTITLED");
684                         }
685
686                         i++;
687                         if (i == 1) {
688                                 Elm_Object_Item *item = NULL;
689                                 item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
690                                                                ELM_GENLIST_ITEM_NONE, NULL, NULL);
691                                 if (item == NULL) {
692                                         FREE(app_name);
693                                         vconf_keylist_free(kl);
694                                 }
695                                 setting_retm_if(item == NULL, "elm_genlist_item_append failed");
696                                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
697                         }
698
699                         /*  get app name */
700                         Setting_GenGroupItem_Data *obj =
701                             setting_create_Gendial_field_def(scroller,
702                                                              &(ad->
703                                                                itc_1text_1icon),
704                                                              setting_phone_noti_3rd_apps_mouse_up_Gendial_list_cb,
705                                                              ad,
706                                                              SWALLOW_Type_1TOGGLE,
707                                                              NULL, NULL,
708                                                              val, app_name,
709                                                              NULL,
710                                                              setting_phone_noti_3rd_apps_chk_btn_cb);
711                         if (obj) {
712                                 obj->sub_desc = (char *)g_strdup(vconf_key);
713                                 ad->app_list = eina_list_append(ad->app_list, obj);     /*  resources are freed at itc structure. */
714                         } else {
715                                 SETTING_TRACE_ERROR("obj is NULL");
716                         }
717
718                         if (app_name) {
719                                 free(app_name);
720                                 app_name = NULL;
721                         }
722
723                 } else {
724                         SETTING_TRACE("Unknown Type\n");
725                 }
726         }
727         vconf_keylist_free(kl);
728 }
729
730 /*  utility*/
731 static char *strrstr(const char *str, const char *strSearch)
732 {
733         char *ptr, *last = NULL;
734         ptr = (char *)str;
735         while ((ptr = strstr(ptr, strSearch)))
736                 last = ptr++;
737         return last;
738 }
739
740
741 static char *package_get_name(char *package, int *err_ref)
742 {
743         ail_appinfo_h handle;
744         ail_error_e ret;
745
746         char *str = NULL;
747         char *ret_str = NULL;
748
749         int err = -1;
750
751         ret = ail_get_appinfo(package, &handle);
752         if (ret != AIL_ERROR_OK) {
753                 err =  AIL_ERROR_FAIL;
754         }
755
756         ret = ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &str);
757         if (ret != AIL_ERROR_OK) {
758                 err =  AIL_ERROR_FAIL;
759         }
760
761         if (str) {
762                 ret_str = strdup(str);
763         } else {
764                 SETTING_TRACE_ERROR("str is NULL");
765         }
766         SETTING_TRACE("1 Package[%s] : %s", package, ret_str);
767
768         ret = ail_destroy_appinfo(handle);
769         if (ret != AIL_ERROR_OK) {
770                 err =  AIL_ERROR_FAIL;
771         }
772
773         *err_ref = err;
774         SETTING_TRACE("2 Package[%s] : %s", package, ret_str);
775         return ret_str;
776 }
777
778
779 /*  input : package name*/
780
781 /*  outout : app name*/
782 static char *get_appname(char *keyname)
783 {
784         int err = -1;
785
786         char *pkg_name = strrstr(keyname, "/");
787         pkg_name++;
788         char *ret2 = package_get_name(pkg_name, &err);
789
790         if (ret2) {
791                 SETTING_TRACE("app name : %s", ret2);
792                 return ret2;
793         } else {
794                 return strdup("UNTITLED");
795         }
796 }
797