3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 #include <setting-profile.h>
24 #define UG_MODULE_API __attribute__ ((visibility("default")))
27 SettingProfileUG *g_ProfileUG = NULL; /* just a handler */
29 extern char *repeat_type[];
31 static void setting_profile_ug_cb_resize(void *data, Evas *e,
32 Evas_Object *obj, void *event_info)
36 SettingProfileUG *ad = (SettingProfileUG *) data;
37 setting_view_update(&setting_view_profile_sound_main, ad);
42 *@ To sync Setting App volume with Volume Hard key volume
45 void __sound_volume_changed_cb(sound_type_e type, unsigned int volume, void *user_data)
49 SettingProfileUG *ad = user_data;
50 Setting_GenGroupItem_Data *item_data = NULL;
52 Evas_Object *slider = NULL;
55 case SOUND_TYPE_SYSTEM:
56 SETTING_TRACE_DEBUG("system");
57 if (ad->data_touch_volume)
58 item_data = ad->data_touch_volume;
59 //slider = ad->data_touch_volume->eo_check;
61 case SOUND_TYPE_NOTIFICATION:
62 SETTING_TRACE_DEBUG("notification");
63 if (ad->data_noti_volume)
64 item_data = ad->data_noti_volume;
65 //slider = ad->data_noti_volume->eo_check;
67 case SOUND_TYPE_RINGTONE:
68 SETTING_TRACE_DEBUG("ringtone");
69 if (ad->data_call_volume)
70 item_data = ad->data_call_volume;
71 //slider = ad->data_call_volume->eo_check;
73 case SOUND_TYPE_MEDIA:
74 SETTING_TRACE_DEBUG("media");
75 if (ad->data_media_volume)
76 item_data = ad->data_media_volume;
77 //slider = ad->data_media_volume->eo_check;
79 //At present, there are only 4 types supported:RINGTONE,NOTIFICATION,SYSTEM,MEDIA
81 SETTING_TRACE_ERROR("Invalid sound type:%d", type);
85 if (item_data && item_data->eo_check)
87 SETTING_TRACE_DEBUG("update slider value");
89 double old_volume = 0;
90 sound_manager_get_volume(type, &volume); /* system */
91 SETTING_TRACE_DEBUG("get_volume is %d", volume);
93 old_volume = elm_slider_value_get(item_data->eo_check);
94 SETTING_TRACE_DEBUG("slider volume is %d", old_volume);
95 if ((int)volume != (int)(old_volume + 0.5)) { /* reset again */
96 elm_slider_value_set(item_data->eo_check, (double)volume);
97 SETTING_TRACE_DEBUG("update to new value %d", volume);
98 item_data->chk_status = volume;
99 elm_genlist_item_update(item_data->item);
105 static char* __gl_sound_slider_text_get(void *data, Evas_Object *obj, const char *part)
107 retv_if(data == NULL, NULL);
108 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data*)data;
110 if(item_data->keyStr)
111 return (char*)g_strdup(_(item_data->keyStr));
116 static Evas_Object* __gl_sound_slider_content_get(void *data, Evas_Object *obj, const char *part)
118 //appcore_measure_start();
119 retv_if(data == NULL, NULL);
120 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data*)data;
121 Evas_Object *slider = setting_create_slider(obj, item_data->evas,
122 item_data->l_swallow_path,
123 item_data->r_swallow_path,
124 item_data->chk_status,
125 item_data->isIndicatorVisible,
126 item_data->slider_min,
127 item_data->slider_max,
128 item_data->chk_change_cb,
129 item_data->start_change_cb,
130 item_data->stop_change_cb,
136 item_data->eo_check = slider;
138 evas_object_pass_events_set(slider, EINA_TRUE);
139 evas_object_propagate_events_set(slider, EINA_FALSE);
141 if(item_data->userdata == NULL)
144 SettingProfileUG *ad = (SettingProfileUG*)item_data->userdata;
146 if((item_data->belongs_to == SETTING_VOL_SOUND_GROUP)
148 && (ad->data_sound->chk_status == FALSE))
149 setting_disable_genlist_item(item_data->item);
150 else if((item_data->belongs_to == SETTING_VOL_VIBRATION_GROUP)
151 && (ad->data_vibration)
152 && (ad->data_vibration->chk_status == FALSE))
153 setting_disable_genlist_item(item_data->item);
158 static void __gl_sound_slider_del(void *data, Evas_Object *obj)
160 Setting_GenGroupItem_Data *item_data =
161 (Setting_GenGroupItem_Data *) data;
163 G_FREE(item_data->keyStr);
164 G_FREE(item_data->sub_desc);
165 G_FREE((item_data->l_swallow_path));
166 G_FREE((item_data->r_swallow_path));
167 G_FREE(item_data->item_style);
170 if (item_data->digits_filter_data)
172 G_FREE(item_data->digits_filter_data->accepted);
173 G_FREE(item_data->digits_filter_data->rejected);
174 FREE(item_data->digits_filter_data);
178 if (item_data->notify) {
179 evas_object_del(item_data->notify);
180 item_data->notify = NULL;
183 FREE(item_data->limit_filter_data);
189 static void setting_profile_vconf_change_cb(keynode_t *key, void *data)
191 ret_if(data == NULL);
193 SettingProfileUG *ad = data;
196 char *pa_ringtone = NULL;
197 char *sub_desc = NULL;
198 char *vconf_name = vconf_keynode_get_name(key);
200 if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_MMC_STATUS)) {
201 status = vconf_keynode_get_int(key);
202 SETTING_TRACE("status:%d", status);
203 if (VCONFKEY_SYSMAN_MMC_MOUNTED != status) {
204 ret_if((!ad->mp_ringtone && !ad->mp_noti && !ad->mp_media && !ad->mp_sys));
205 SETTING_TRACE("song_playing:%s", ad->song_playing);
207 if (!safeStrNCmp(SETTING_PROFILE_MMC_PATH, ad->song_playing,
208 safeStrLen(SETTING_PROFILE_MMC_PATH))) {
210 setting_profile_close_all_mm_players(ad);
211 /* close vibration */
213 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
214 SETTING_TRACE("ERROR haptic_stop_all_effects");
218 /* when remove mmc card, change default tone */
219 char *call_tone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
220 if(call_tone && !safeStrNCmp(SETTING_PROFILE_MMC_PATH, call_tone, safeStrLen(SETTING_PROFILE_MMC_PATH)))
222 ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, SETTING_DEFAULT_CALL_TONE);
224 SETTING_TRACE_DEBUG("failed to set vconf");
228 else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_SOUND_STATUS_BOOL)) {
229 status = vconf_keynode_get_bool(key);
230 SETTING_TRACE_DEBUG("sound status is changed. %d", status);
231 elm_check_state_set(ad->data_sound->eo_check, status);
234 setting_enable_genlist_item(ad->data_call_volume->item);
235 setting_enable_genlist_item(ad->data_noti_volume->item);
236 setting_enable_genlist_item(ad->data_media_volume->item);
237 setting_enable_genlist_item(ad->data_touch_volume->item);
241 setting_disable_genlist_item(ad->data_call_volume->item);
242 setting_disable_genlist_item(ad->data_noti_volume->item);
243 setting_disable_genlist_item(ad->data_media_volume->item);
244 setting_disable_genlist_item(ad->data_touch_volume->item);
247 else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL)) {
248 status = vconf_keynode_get_bool(key);
249 SETTING_TRACE_DEBUG("vibration status is changed. %d", status);
250 elm_check_state_set(ad->data_vibration->eo_check, status);
253 setting_enable_genlist_item(ad->data_vib_volume->item);
254 setting_enable_genlist_item(ad->data_touch_vib->item);
258 setting_disable_genlist_item(ad->data_vib_volume->item);
259 setting_disable_genlist_item(ad->data_touch_vib->item);
262 else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR)) {
263 pa_ringtone = (char *)g_strdup(vconf_keynode_get_str(key));
264 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
267 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
268 ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
270 SETTING_TRACE_DEBUG("failed to set vconf");
272 sub_desc = setting_file_basename(pa_ringtone);
273 if(ad->data_call_alert_tone)
275 ad->data_call_alert_tone->sub_desc = (char*)g_strdup(sub_desc);
276 elm_genlist_item_update(ad->data_call_alert_tone->item);
281 else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR)) {
282 pa_ringtone = (char *)g_strdup(vconf_keynode_get_str(key));
283 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
286 pa_ringtone = (char *)g_strdup(SETTING_DEFAULT_MSG_TONE);
287 ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, pa_ringtone);
289 SETTING_TRACE_DEBUG("failed to set vconf");
291 sub_desc = setting_file_basename(pa_ringtone);
292 if(ad->data_msg_alert_tone)
294 ad->data_msg_alert_tone->sub_desc = (char*)g_strdup(sub_desc);
295 elm_genlist_item_update(ad->data_msg_alert_tone->item);
300 else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT)) {
301 status = vconf_keynode_get_int(key);
303 if(status >= 0 && ad->data_msg_alert_repeat)
305 ad->data_msg_alert_repeat->sub_desc = (char*)g_strdup(_(repeat_type[status]));
306 elm_genlist_item_update(ad->data_msg_alert_repeat->item);
309 else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR)) {
310 pa_ringtone = (char *)g_strdup(vconf_keynode_get_str(key));
311 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
314 pa_ringtone = (char *)g_strdup(SETTING_DEFAULT_EMAIL_TONE);
315 ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, pa_ringtone);
317 SETTING_TRACE_DEBUG("failed to set vconf");
319 sub_desc = setting_file_basename(pa_ringtone);
320 if(ad->data_email_alert_tone)
322 ad->data_email_alert_tone->sub_desc = (char*)g_strdup(sub_desc);
323 elm_genlist_item_update(ad->data_email_alert_tone->item);
328 else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT)) {
329 status = vconf_keynode_get_int(key);
331 if(status >= 0 && ad->data_email_alert_repeat)
333 ad->data_email_alert_repeat->sub_desc = (char*)g_strdup(_(repeat_type[status]));
334 elm_genlist_item_update(ad->data_email_alert_repeat->item);
339 int setting_profile_listen_vconf_change(void *data)
341 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
345 ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
346 setting_profile_vconf_change_cb, data);
347 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
348 (char *)VCONFKEY_SYSMAN_MMC_STATUS, ret);
350 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL,
351 setting_profile_vconf_change_cb, data);
352 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
353 (char *)VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, ret);
355 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL,
356 setting_profile_vconf_change_cb, data);
357 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
358 (char *)VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, ret);
360 /* add ringtone tab's vconfkeys */
361 // incoming call ringtone.
362 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR,
363 setting_profile_vconf_change_cb, data);
364 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
365 (char *)VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ret);
366 // message alert tone
367 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR,
368 setting_profile_vconf_change_cb, data);
369 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
370 (char *)VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ret);
371 // message alert repitition.
372 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT,
373 setting_profile_vconf_change_cb, data);
374 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
375 (char *)VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, ret);
377 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR,
378 setting_profile_vconf_change_cb, data);
379 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
380 (char *)VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ret);
381 // email_alert_repitition
382 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
383 setting_profile_vconf_change_cb, data);
384 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
385 (char *)VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT, ret);
390 int setting_profile_unlisten_vconf_change(void *data)
393 (void)vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
394 setting_profile_vconf_change_cb);
395 (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL,
396 setting_profile_vconf_change_cb);
397 (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL,
398 setting_profile_vconf_change_cb);
400 (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR,
401 setting_profile_vconf_change_cb);
402 (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR,
403 setting_profile_vconf_change_cb);
404 (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT,
405 setting_profile_vconf_change_cb);
406 (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR,
407 setting_profile_vconf_change_cb);
408 (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
409 setting_profile_vconf_change_cb);
414 void __setting_profile_ug_key_grab(SettingProfileUG *ad)
417 Ecore_X_Window xwin = 0;
418 Ecore_X_Display *disp = NULL;
425 disp = ecore_x_display_get();
426 xwin = elm_win_xwindow_get((Evas_Object*)ug_get_window());
428 ret = utilx_grab_key(disp, xwin, KEY_VOLUMEUP, TOP_POSITION_GRAB);
431 ret = utilx_grab_key(disp, xwin, KEY_VOLUMEDOWN, TOP_POSITION_GRAB);
435 ad->event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, NULL, NULL);
438 void __setting_profile_ug_key_ungrab(SettingProfileUG *ad)
441 Ecore_X_Window xwin = 0;
442 Ecore_X_Display *disp = NULL;
449 disp = ecore_x_display_get();
450 xwin = elm_win_xwindow_get((Evas_Object*)ug_get_window());
452 ret = utilx_ungrab_key(disp, xwin, KEY_VOLUMEUP);
455 ret = utilx_ungrab_key(disp, xwin, KEY_VOLUMEDOWN);
459 ecore_event_handler_del(ad->event_handler);
462 static void *setting_profile_ug_on_create(ui_gadget_h ug,
463 enum ug_mode mode, service_h service,
467 //appcore_measure_start();
468 retv_if(priv == NULL, NULL);
470 SettingProfileUG *profileUG = priv;
472 g_ProfileUG = profileUG;
474 profileUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
475 profileUG->win_get = (Evas_Object *) ug_get_window();
477 evas_object_show(profileUG->win_main_layout);
478 profileUG->evas = evas_object_evas_get(profileUG->win_main_layout);
480 setting_retvm_if(profileUG->win_main_layout == NULL, NULL, "cannot get main window ");
482 //At present, there are only 4 types supported:RINGTONE,NOTIFICATION,SYSTEM,MEDIA
483 sound_manager_set_volume_changed_cb(__sound_volume_changed_cb, profileUG);
485 setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
487 /* register view node table */
488 setting_view_node_table_intialize();
489 setting_view_node_table_register(&setting_view_profile_sound_main, NULL);
491 setting_create_Gendial_itc("dialogue/1text.1icon", &(profileUG->itc_1text_1icon));
492 setting_create_Gendial_itc("dialogue/title", &(profileUG->itc_group_item));
493 setting_create_Gendial_itc("dialogue/2text.3", &(profileUG->itc_2text_2));
494 profileUG->itc_layout.item_style = "dialogue/1icon";
495 profileUG->itc_layout.func.text_get = NULL; //__gl_sound_slider_text_get;
496 profileUG->itc_layout.func.content_get = __gl_sound_slider_content_get;
497 profileUG->itc_layout.func.state_get = NULL;
498 profileUG->itc_layout.func.del = __gl_sound_slider_del;
500 setting_create_Gendial_itc("dialogue/2text.3/expandable", &(profileUG->itc_2text_3_parent));
501 setting_create_Gendial_itc("dialogue/1text.1icon/expandable2", &(profileUG->itc_1icon_1text_sub));
502 setting_create_Gendial_itc("multiline/1text", &(profileUG->itc_bg_1icon));
504 profileUG->itc_seperator.item_style = "dialogue/separator";
505 profileUG->itc_seperator.func.text_get = NULL;
506 profileUG->itc_seperator.func.content_get = NULL;
507 profileUG->itc_seperator.func.state_get = NULL;
508 profileUG->itc_seperator.func.del = NULL;
510 /* creating a view. */
511 setting_view_node_set_cur_view(&setting_view_profile_sound_main);
512 setting_view_create(&setting_view_profile_sound_main, (void *)profileUG);
514 evas_object_event_callback_add(profileUG->win_main_layout,
515 EVAS_CALLBACK_RESIZE,
516 setting_profile_ug_cb_resize, profileUG);
518 setting_profile_listen_vconf_change(profileUG);
520 return profileUG->ly_main;
523 static void setting_profile_ug_on_start(ui_gadget_h ug, service_h service, void *priv)
527 static void setting_profile_ug_on_pause(ui_gadget_h ug, service_h service, void *priv)
529 ret_if(priv == NULL);
530 SettingProfileUG *profileUG = (SettingProfileUG*)priv;
532 /* if click home key, players have to be closed */
533 setting_profile_close_all_mm_players(profileUG);
536 static void setting_profile_ug_on_resume(ui_gadget_h ug, service_h service, void *priv)
538 ret_if(priv == NULL);
539 SettingProfileUG *profileUG = (SettingProfileUG *)priv;
541 /* update path of tones */
542 char *pa_tone_path = NULL;
544 if(profileUG->data_call_volume)
547 SETTING_TRACE_DEBUG("ringtone volume %x", profileUG->data_call_volume);
548 sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume); /* system */
549 SETTING_TRACE_DEBUG("get_volume is %d", volume);
550 elm_slider_value_set(profileUG->data_call_volume->eo_check, (double)volume);
551 SETTING_TRACE_DEBUG("update to new value %d", volume);
553 if(profileUG->data_noti_volume)
556 SETTING_TRACE_DEBUG("noti volume %x", profileUG->data_noti_volume);
557 sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &volume); /* system */
558 SETTING_TRACE_DEBUG("get_volume is %d", volume);
559 elm_slider_value_set(profileUG->data_noti_volume->eo_check, (double)volume);
560 SETTING_TRACE_DEBUG("update to new value %d", volume);
562 if(profileUG->data_media_volume)
565 SETTING_TRACE_DEBUG("media volume %x", profileUG->data_media_volume);
566 sound_manager_get_volume(SOUND_TYPE_MEDIA, &volume); /* system */
567 SETTING_TRACE_DEBUG("get_volume is %d", volume);
568 elm_slider_value_set(profileUG->data_media_volume->eo_check, (double)volume);
569 SETTING_TRACE_DEBUG("update to new value %d", volume);
571 if(profileUG->data_touch_volume)
574 SETTING_TRACE_DEBUG("system volume %x", profileUG->data_touch_volume);
575 sound_manager_get_volume(SOUND_TYPE_SYSTEM, &volume); /* system */
576 SETTING_TRACE_DEBUG("get_volume is %d", volume);
577 elm_slider_value_set(profileUG->data_touch_volume->eo_check, (double)volume);
578 SETTING_TRACE_DEBUG("update to new value %d", volume);
581 /* 1. incoming call ringtone */
582 if(profileUG->data_call_alert_tone)
584 SETTING_TRACE_DEBUG("change call_alert_tone %x", profileUG->data_call_alert_tone);
585 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
586 if((pa_tone_path == NULL) || (setting_profile_check_file_exist(profileUG, pa_tone_path) == SETTING_RETURN_FAIL))
588 pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
589 if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0)
591 profileUG->data_call_alert_tone->sub_desc = setting_file_basename(pa_tone_path);
592 elm_genlist_item_update(profileUG->data_call_alert_tone->item);
598 /* 2. message ringtone */
599 if(profileUG->data_msg_alert_tone)
601 SETTING_TRACE_DEBUG("change msg_alert_tone %x", profileUG->data_msg_alert_tone);
602 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
603 if((pa_tone_path == NULL) || (setting_profile_check_file_exist(profileUG, pa_tone_path) == SETTING_RETURN_FAIL))
605 pa_tone_path = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
606 if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0) {
611 profileUG->data_msg_alert_tone->sub_desc = setting_file_basename(pa_tone_path);
612 elm_genlist_item_update(profileUG->data_msg_alert_tone->item);
619 /* 3. email ringtone */
620 if(profileUG->data_email_alert_tone)
622 SETTING_TRACE_DEBUG("change email_alert_tone %x", profileUG->data_email_alert_tone);
623 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
624 if((pa_tone_path == NULL) || (setting_profile_check_file_exist(profileUG, pa_tone_path) == SETTING_RETURN_FAIL))
626 pa_tone_path = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
627 if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0) {
631 profileUG->data_email_alert_tone->sub_desc = setting_file_basename(pa_tone_path);
632 elm_genlist_item_update(profileUG->data_email_alert_tone->item);
640 static void setting_profile_ug_on_destroy(ui_gadget_h ug, service_h service, void *priv)
642 ret_if(priv == NULL);
644 SettingProfileUG *profileUG = priv;
646 setting_profile_unlisten_vconf_change(profileUG);
647 evas_object_event_callback_del(profileUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_profile_ug_cb_resize); /* fix flash issue for gallery */
650 //At present, there are only 4 types supported:RINGTONE,NOTIFICATION,SYSTEM,MEDIA
651 sound_manager_unset_volume_changed_cb();
654 int ret = haptic_close(profileUG->hnd_hpt);
656 SETTING_TRACE_DEBUG("%s*** [ERR] Failed haptic_deinitialize ***%s",
657 SETTING_FONT_RED, SETTING_FONT_BLACK);
659 setting_profile_close_all_mm_players(profileUG);
661 /* it is the view manage strategy to invoke view's destory operation. */
662 setting_view_destroy(&setting_view_profile_sound_main, profileUG);
663 if (NULL != ug_get_layout(profileUG->ug)) {
664 evas_object_hide((Evas_Object *) ug_get_layout(profileUG->ug));
665 evas_object_del((Evas_Object *) ug_get_layout(profileUG->ug));
669 static void setting_profile_ug_on_message(ui_gadget_h ug, service_h msg,
670 service_h service, void *priv)
675 static void setting_profile_ug_on_event(ui_gadget_h ug,
676 enum ug_event event, service_h service, void *priv)
679 SettingProfileUG *ad = (SettingProfileUG *)priv;
682 case UG_EVENT_LOW_MEMORY:
684 case UG_EVENT_LOW_BATTERY:
686 case UG_EVENT_LANG_CHANGE:
688 case UG_EVENT_ROTATE_PORTRAIT:
690 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
692 case UG_EVENT_ROTATE_LANDSCAPE:
694 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
696 case UG_EVENT_REGION_CHANGE:
703 static void setting_profile_ug_on_key_event(ui_gadget_h ug,
704 enum ug_key_event event, service_h service, void *priv)
706 ret_if(priv == NULL);
708 SettingProfileUG *ad = (SettingProfileUG *) priv;
711 case UG_KEY_EVENT_END:
712 if (elm_naviframe_top_item_get(ad->navi_bar) ==
713 elm_naviframe_bottom_item_get(ad->navi_bar)) {
716 if (&setting_view_profile_sound_main ==
717 setting_view_node_get_cur_view()) {
720 setting_profile_close_all_mm_players(ad);
721 /* close vibration */
723 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
724 SETTING_TRACE("ERROR haptic_stop_all_effects");
728 setting_view_cb_at_endKey(ad);
736 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
739 //appcore_measure_start();
740 SettingProfileUG *profileUG = calloc(1, sizeof(SettingProfileUG));
741 setting_retvm_if(!profileUG, -1, "Create SettingProfileUG obj failed");
743 ops->create = setting_profile_ug_on_create;
744 ops->start = setting_profile_ug_on_start;
745 ops->pause = setting_profile_ug_on_pause;
746 ops->resume = setting_profile_ug_on_resume;
747 ops->destroy = setting_profile_ug_on_destroy;
748 ops->message = setting_profile_ug_on_message;
749 ops->event = setting_profile_ug_on_event;
750 ops->key_event = setting_profile_ug_on_key_event;
751 ops->priv = profileUG;
752 ops->opt = UG_OPT_INDICATOR_ENABLE;
754 SETTING_TRACE("before haptic initilization");
755 int haptic_return = 0;
756 haptic_return = haptic_open(HAPTIC_DEVICE_0, &(profileUG->hnd_hpt));
757 SETTING_TRACE("profileUG->hnd_hpt : %d", profileUG->hnd_hpt);
758 if (haptic_return < 0) {
759 SETTING_TRACE_DEBUG("%s*** [ERR] Failed haptic_open ***%s",
760 SETTING_FONT_RED, SETTING_FONT_BLACK);
766 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
770 struct SettingProfileUG *profileUG;
771 profileUG = ops->priv;
776 /* ***************************************************
780 ***************************************************/
782 int setting_profile_check_file_exist(void *data, const char *file_path)
784 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
785 retv_if(file_path == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
787 if (!ecore_file_exists(file_path)) {
788 SETTING_TRACE_ERROR("Cannot find the ringtone file[%s]!", file_path);
789 return SETTING_RETURN_FAIL;
792 int mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
793 vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_status);
794 if (VCONFKEY_SYSMAN_MMC_MOUNTED != mmc_status)
796 if (!safeStrNCmp(SETTING_PROFILE_MMC_PATH, file_path, safeStrLen(SETTING_PROFILE_MMC_PATH)))
798 return SETTING_RETURN_FAIL;
801 return SETTING_RETURN_SUCCESS;
804 player_h *setting_profile_play_sound(void *data, void *cb,
807 sound_type_e sound_type)
810 retv_if(data == NULL, NULL);
812 SettingProfileUG *ad = (SettingProfileUG *) data;
814 int is_existing = setting_profile_check_file_exist(ad, ringtone_file);
815 if(is_existing == SETTING_RETURN_FAIL || NULL == ringtone_file)
817 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
820 case SOUND_TYPE_RINGTONE:
821 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
823 case SOUND_TYPE_MEDIA:
824 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_MEDIA_TONE);
826 case SOUND_TYPE_NOTIFICATION:
827 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_MSG_TONE);
829 case SOUND_TYPE_SYSTEM:
830 svi_get_path(SVI_TYPE_SND, SVI_SND_TOUCH_TOUCH1, pattern_file, sizeof(pattern_file));
831 retv_if(pattern_file == NULL, NULL);
832 ad->song_playing = (char *)g_strdup(pattern_file);
835 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
841 ad->song_playing = (char *)g_strdup(ringtone_file);
844 player_h *player = calloc(1, sizeof(player_h));
846 SETTING_TRACE_ERROR("failed to calloc player_h");
852 err = player_create(player);
853 if (err != PLAYER_ERROR_NONE) {
854 SETTING_TRACE_ERROR("creating the player handle failed[%d]", err);
859 err = player_set_sound_type(*player, sound_type);
860 if (err != PLAYER_ERROR_NONE) {
861 SETTING_TRACE_ERROR("error to set sound_type[%d]", err);
862 player_destroy(*player);
866 SETTING_TRACE_DEBUG("player_set_sound_type [%d]", sound_type);
868 err = player_set_uri(*player, ad->song_playing);
869 if (err != PLAYER_ERROR_NONE) {
870 SETTING_TRACE_ERROR("error to set attribute---profile_uri[%d]", err);
871 player_destroy(*player);
876 err = player_prepare(*player);
877 if (err != PLAYER_ERROR_NONE) {
878 SETTING_TRACE_ERROR("realizing the player handle failed[%d]", err);
879 player_destroy(*player);
884 player_state_e state = -1;
885 player_get_state(*player, &state);
886 SETTING_TRACE("state:%d", state);
888 if (state != PLAYER_STATE_READY) {
889 SETTING_TRACE_ERROR("state of player is invalid %d", err);
890 player_unprepare(*player);
891 player_destroy(*player);
896 player_set_completed_cb(*player, cb, ad);
897 err = player_start(*player);
898 if (err != PLAYER_ERROR_NONE) { /* if directly return error.. */
899 SETTING_TRACE_ERROR("player_start [%d]", err);
900 player_unset_completed_cb(*player);
901 player_unprepare(*player);
902 player_destroy(*player);
907 SETTING_TRACE("waiting..");
908 ad->playing_volume = vol;
914 void setting_profile_play_sound_origin(player_h **mp_handle, void *data,
915 void *cb, char *ringtone_file,
918 sound_type_e sound_type)
921 ret_if(data == NULL);
924 SETTING_TRACE_DEBUG("vol < EXP");
926 if (setting_profile_stop_sound(data, *mp_handle) != SETTING_RETURN_SUCCESS) {
935 SettingProfileUG *ad = (SettingProfileUG *) data;
936 if (*mp_handle == NULL) {
937 *mp_handle = setting_profile_play_sound(ad, cb, ringtone_file, vol, sound_type);
941 int setting_profile_stop_sound(void *data, player_h *player)
944 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
946 SettingProfileUG *ad = (SettingProfileUG *) data;
947 if (ad->song_playing) {
948 g_free(ad->song_playing);
949 ad->song_playing = NULL;
952 player_state_e state = -1;
953 int ret = SETTING_RETURN_SUCCESS;
954 int prev_behavior = 0; /* instead of do_while(0) and break */
956 player_get_state(*player, &state);
957 if (state == PLAYER_STATE_PLAYING) {
958 if (player_stop(*player) != PLAYER_ERROR_NONE) {
959 SETTING_TRACE("mm player stop failed");
960 ret = SETTING_MMPLAYER_STOP_ERR;
961 prev_behavior++; /* instead of do_while(0) and break */
965 if ((prev_behavior == 0) && (player_unprepare(*player) != PLAYER_ERROR_NONE)) {
966 SETTING_TRACE("mm player unrealize failed");
967 ret = SETTING_MMPLAYER_UNREALIZE_ERR;
968 prev_behavior++; /* instead of do_while(0) and break */
971 if ((prev_behavior == 0) && (player_destroy(*player) != PLAYER_ERROR_NONE)) {
972 SETTING_TRACE("mm player destroy failed");
973 ret = SETTING_MMPLAYER_DESTROY_ERR;
981 int __close_player(void *data, setting_volume_types type)
984 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
986 SettingProfileUG *ad = (SettingProfileUG *) data;
987 player_h **player= NULL;
993 case SETTING_VOL_TYPE_RINGTONE:
994 retv_if(ad->mp_ringtone == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
995 player = &(ad->mp_ringtone);
996 value = elm_slider_value_get(ad->data_call_volume->eo_check);
997 sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)(value+0.5));
999 case SETTING_VOL_TYPE_NOTIFICATION:
1000 retv_if(ad->mp_noti == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1001 player = &(ad->mp_noti);
1002 value = elm_slider_value_get(ad->data_noti_volume->eo_check);
1003 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)(value+0.5));
1005 case SETTING_VOL_TYPE_MEDIA:
1006 retv_if(ad->mp_media == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1007 player = &(ad->mp_media);
1008 value = elm_slider_value_get(ad->data_media_volume->eo_check);
1009 sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)(value+0.5));
1011 case SETTING_VOL_TYPE_SYSTEM:
1012 retv_if(ad->mp_sys == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1013 player = &(ad->mp_sys);
1014 value = elm_slider_value_get(ad->data_touch_volume->eo_check);
1015 sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)(value+0.5));
1017 case SETTING_VOL_TYPE_NOTI_VIB:
1018 case SETTING_VOL_TYPE_HAPTIC_VIB:
1020 return SETTING_RETURN_FAIL;
1024 if (setting_profile_stop_sound(ad, *player)) {
1027 return SETTING_RETURN_FAIL;
1031 return SETTING_RETURN_SUCCESS;
1035 setting_profile_close_other_mm_players_but_type(void *data, sound_type_e type)
1038 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1040 SettingProfileUG *ad = (SettingProfileUG *) data;
1046 case SOUND_TYPE_RINGTONE: /* close noti, media and system players */
1047 if (__close_player(ad, SETTING_VOL_TYPE_NOTIFICATION) != SETTING_RETURN_SUCCESS)
1049 if (__close_player(ad, SETTING_VOL_TYPE_MEDIA) != SETTING_RETURN_SUCCESS)
1051 if (__close_player(ad, SETTING_VOL_TYPE_SYSTEM) != SETTING_RETURN_SUCCESS)
1054 case SOUND_TYPE_NOTIFICATION: /* close ringtone, media and system players */
1055 if (__close_player(ad, SETTING_VOL_TYPE_RINGTONE) != SETTING_RETURN_SUCCESS)
1057 if (__close_player(ad, SETTING_VOL_TYPE_MEDIA) != SETTING_RETURN_SUCCESS)
1059 if (__close_player(ad, SETTING_VOL_TYPE_SYSTEM) != SETTING_RETURN_SUCCESS)
1062 case SOUND_TYPE_MEDIA: /* close ringtone, noti and system players */
1063 if (__close_player(ad, SETTING_VOL_TYPE_RINGTONE) != SETTING_RETURN_SUCCESS)
1065 if (__close_player(ad, SETTING_VOL_TYPE_NOTIFICATION) != SETTING_RETURN_SUCCESS)
1067 if (__close_player(ad, SETTING_VOL_TYPE_SYSTEM) != SETTING_RETURN_SUCCESS)
1070 case SOUND_TYPE_SYSTEM: /* close ringtone, noti and media players */
1071 if (__close_player(ad, SETTING_VOL_TYPE_RINGTONE) != SETTING_RETURN_SUCCESS)
1073 if (__close_player(ad, SETTING_VOL_TYPE_NOTIFICATION) != SETTING_RETURN_SUCCESS)
1075 if (__close_player(ad, SETTING_VOL_TYPE_MEDIA) != SETTING_RETURN_SUCCESS)
1078 default: /* if unknown type, dont close any player */
1083 return SETTING_RETURN_SUCCESS;
1085 return SETTING_RETURN_FAIL;
1088 int setting_profile_close_all_mm_players(void *data)
1091 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1093 SettingProfileUG *ad = (SettingProfileUG *) data;
1097 if (__close_player(ad, SETTING_VOL_TYPE_RINGTONE) != SETTING_RETURN_SUCCESS)
1099 if (__close_player(ad, SETTING_VOL_TYPE_NOTIFICATION) != SETTING_RETURN_SUCCESS)
1101 if (__close_player(ad, SETTING_VOL_TYPE_MEDIA) != SETTING_RETURN_SUCCESS)
1103 if (__close_player(ad, SETTING_VOL_TYPE_SYSTEM) != SETTING_RETURN_SUCCESS)
1106 if(ad->volume_timer)
1108 ecore_timer_del(ad->volume_timer);
1109 ad->volume_timer = NULL;
1110 ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
1111 SETTING_TRACE_DEBUG("[AA] volume timer is deleted");
1115 return SETTING_RETURN_SUCCESS;
1117 return SETTING_RETURN_FAIL;
1120 void setting_profile_play_vibration(void *data, int value)
1123 ret_if(data == NULL);
1125 SettingProfileUG *ad = (SettingProfileUG *) data;
1127 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1128 svi_get_path(SVI_TYPE_VIB, value, pattern_file, sizeof(pattern_file));
1130 #if MIGRATION_HAPTIC
1133 SETTING_TRACE_DEBUG("[ERROR] Can't use haptic handle.");
1136 if(haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, HAPTIC_FEEDBACK_AUTO, HAPTIC_PRIORITY_MIN, NULL) != 0){
1137 SETTING_TRACE("ERROR device_haptic_play_pattern");
1142 int setting_profile_get_call_playing_vib_by_vconf_value(int call_vib_value)
1144 /* select vibration pattern */
1145 switch (call_vib_value) {
1146 case SETTING_CALL_ALERT_VIB_TYPE1:
1148 return SVI_VIB_NOTIFICATION_INCOMING_CALL01;
1150 case SETTING_CALL_ALERT_VIB_TYPE2:
1152 return SVI_VIB_NOTIFICATION_INCOMING_CALL02;
1154 case SETTING_CALL_ALERT_VIB_TYPE3:
1156 return SVI_VIB_NOTIFICATION_INCOMING_CALL03;
1159 return SVI_VIB_NOTIFICATION_INCOMING_CALL01;
1163 UG_MODULE_API int setting_plugin_reset(service_h service, void *priv)
1165 SETTING_TRACE_BEGIN;
1168 #if SUPPORT_RUN_SYSTEM_COMMAND
1169 ret += excuteCmd(SETTING_POSTINST_FILE, 1, "sounds");
1172 ret += vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
1173 ret += vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE); /* after support incoming call vibration, it should be change to TRUE */
1174 ret += vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, SETTING_DEFAULT_NOTI_VIB_INT);
1175 ret += vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, SETTING_DEFAULT_HAPTIC_VIB_INT);
1176 ret += vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, SETTING_DEFAULT_HAPTIC_VIB_INT);
1178 ret += vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, SETTING_DEFAULT_CALL_TONE);
1180 ret += vconf_set_int(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, SETTING_CALL_ALERT_VIB_TYPE3);
1182 ret += vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
1183 ret += vconf_set_int(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT);
1185 ret += vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
1186 ret += vconf_set_int(VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT, SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT);
1188 ret += vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, TRUE);
1190 /* if ret is 0, finish completely */
1191 /* if ret is minus, it means times of failure */
1193 sound_manager_set_volume(SOUND_TYPE_RINGTONE, SETTING_DEFAULT_RINGTONE_VOL_INT);
1194 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, SETTING_DEFAULT_NOTI_VOL_INT);
1195 sound_manager_set_volume(SOUND_TYPE_MEDIA, SETTING_DEFAULT_MEDIA_VOL_INT);
1196 sound_manager_set_volume(SOUND_TYPE_SYSTEM, SETTING_DEFAULT_SYSTEM_VOL_INT);