4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <setting-profile.h>
25 #include <iniparser.h>
28 /*#include <Ecore.h> */
29 #include <app_manager.h>
30 #include <metadata_extractor.h>
31 #include <efl_assist.h>
32 #include <sound_manager_internal.h>
35 #define PLAY_FEEDBACK(f_type, f_pattern)\
37 if(feedback_initialize() == FEEDBACK_ERROR_NONE)\
39 feedback_play_type(f_type, f_pattern);\
40 feedback_deinitialize();\
44 static SliderIcons slider_icons2[SND_SLIDER_MAX] = {
45 {SND_SLIDER_CALL, ICON_CALL_MUTE, ICON_CALL_NORMAL},
46 {SND_SLIDER_NOTI, ICON_NOTI_MUTE, ICON_NOTI_NORMAL},
47 {SND_SLIDER_MEDIA, ICON_MEDIA_MUTE, ICON_MEDIA_NORMAL},
48 {SND_SLIDER_SYSTEM, ICON_SYSTEM_MUTE, ICON_SYSTEM_NORMAL},
49 /*{SND_SLIDER_MAX, "", ""} */
52 char *setting_sound_get_slider_icon(int type, int volume)
54 if (type < SND_SLIDER_CALL || type >= SND_SLIDER_MAX)
57 SETTING_TRACE("type : %d, volume : %d", type, volume);
58 /* 1.Call ringtone has 3 icon status */
59 if (SND_SLIDER_CALL == type) {
63 vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound);
64 vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vibration);
66 if (sound && !vibration)
67 return ICON_CALL_NORMAL;
68 else if (vibration && !sound)
70 else if (!vibration && !sound)
71 return ICON_CALL_MUTE;
73 return ICON_CALL_NORMAL;
76 /* 2.Other types, just have two icon status */
78 return slider_icons2[type].volume;
80 return slider_icons2[type].mute;
84 void setting_sound_update_slider_icon(Setting_GenGroupItem_Data *item_data, int type)
87 ret_if(!item_data || !item_data->eo_check);
89 Evas_Object *icon = elm_object_content_get(item_data->eo_check);
91 char *new_file = setting_sound_get_slider_icon(type, item_data->chk_status);
92 elm_image_file_set(icon, new_file, NULL);
96 static char *setting_media_basename2(char *path)
98 if (NULL == path || '\0' == path[0]) {
99 return NULL; /* invalid arguement */
102 if (safeStrCmp(path, "silent") == 0)
103 return (char *)g_strdup(_("IDS_ST_BODY_NONE"));
105 metadata_extractor_h metadata = NULL;
107 int ret = metadata_extractor_create(&metadata);
108 if (ret == METADATA_EXTRACTOR_ERROR_NONE && metadata) {
109 ret = metadata_extractor_set_path(metadata, path);
110 if (ret == METADATA_EXTRACTOR_ERROR_NONE) {
111 ret = metadata_extractor_get_metadata(metadata, METADATA_TITLE, &title);
112 metadata_extractor_destroy(metadata);
114 char *strdup_title = (char *)g_strdup(title);
118 return setting_file_basename(path);
121 metadata_extractor_destroy(metadata);
122 return setting_file_basename(path);
125 return setting_file_basename(path);
129 static Evas_Object *__sound_slider_icon_get(void *data, Evas_Object *obj, const char *part)
131 /*SETTING_TRACE_BEGIN; */
132 /*appcore_measure_start(); */
133 retv_if(data == NULL, NULL);
135 if (safeStrCmp(part, "elm.icon")) {
136 /*SETTING_TRACE("EDC part [%s]", part); */
140 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)data;
141 Evas_Object *slider = setting_create_slider(obj, item_data->evas,
142 item_data->l_swallow_path,
143 item_data->r_swallow_path,
144 item_data->chk_status,
145 item_data->isIndicatorVisible,
146 item_data->slider_min,
147 item_data->slider_max,
148 item_data->chk_change_cb,
149 item_data->start_change_cb,
150 item_data->stop_change_cb,
155 if (0 == safeStrCmp(item_data->keyStr, "IDS_COM_BODY_MEDIA")) {
156 /*earphone is pluged in,so apply red style */
157 elm_object_style_set(slider, "warning");
159 Edje_Message_Float_Set *msg = alloca(sizeof(Edje_Message_Float_Set) + (sizeof(double)));
161 msg->val[0] = 0.66667;
162 edje_object_message_send(_EDJ(slider), EDJE_MESSAGE_FLOAT_SET, 0, msg);
163 elm_slider_indicator_format_set(slider, "%1.0f");
164 elm_slider_indicator_show_set(slider, 1);
167 item_data->eo_check = slider;
169 evas_object_pass_events_set(slider, EINA_TRUE);
170 evas_object_propagate_events_set(slider, EINA_FALSE);
172 if (item_data->userdata == NULL)
178 /* ***************************************************
182 ***************************************************/
183 #define SETTING_DEFAULT_FOLDER_PATH "/opt/usr/share/settings/" /*resolve P130805-7070 */
184 #define SDCARD_PATH "/opt/storage/sdcard/"
186 int setting_sound_check_file_exist(void *data, const char *file_path)
188 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
189 retv_if(file_path == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
191 /*resolve P130805-7070 */
192 if (0 == safeStrNCmp(file_path, SETTING_DEFAULT_FOLDER_PATH, safeStrLen(SETTING_DEFAULT_FOLDER_PATH))) {
193 SETTING_TRACE("Default file[%s]!", file_path);
194 return SETTING_RETURN_SUCCESS;
197 if (!ecore_file_exists(file_path)) {
198 if (safeStrCmp(file_path, "silent") == 0) {
199 SETTING_TRACE("%s", file_path);
200 return SETTING_RETURN_SUCCESS;
202 SETTING_TRACE_ERROR("Cannot find the ringtone file[%s]!", file_path);
203 if (0 == safeStrNCmp(file_path, SDCARD_PATH, safeStrLen(SDCARD_PATH))) {
204 char *strdup_file_path = strdup(file_path);
206 int ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_STR, strdup_file_path);
208 SETTING_TRACE_DEBUG("failed to set vconf");
210 FREE(strdup_file_path);
212 return SETTING_RETURN_FAIL;
215 int mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
216 vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_status);
217 if (VCONFKEY_SYSMAN_MMC_MOUNTED != mmc_status) {
218 if (!safeStrNCmp(SETTING_PROFILE_MMC_PATH, file_path, safeStrLen(SETTING_PROFILE_MMC_PATH))) {
219 return SETTING_RETURN_FAIL;
222 return SETTING_RETURN_SUCCESS;
225 static void __enable_sound_menu(void *data)
229 SettingProfileUG *ad = data;
231 Setting_GenGroupItem_Data *item_to_update = NULL;
234 /*1.Enable "Vibrate when ringing" */
235 item_to_update = ad->data_sound_when_ring;
236 setting_genlist_item_disabled_set(item_to_update, EINA_FALSE);
239 /*2.Enable "Notification", via Sound Manager */
240 item_to_update = ad->data_noti_volume;
241 if (item_to_update && item_to_update->item && item_to_update->eo_check) {
243 int ret = sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value);
244 SETTING_TRACE("ret:%d", ret);
245 item_to_update->chk_status = mm_value;
246 elm_slider_value_set(item_to_update->eo_check, item_to_update->chk_status);
247 elm_object_item_disabled_set(item_to_update->item, EINA_FALSE);
248 elm_object_disabled_set(item_to_update->eo_check, EINA_FALSE);
250 setting_sound_update_slider_icon(item_to_update, SND_SLIDER_NOTI);
254 /*3.Enable "System", via Sound Manager */
255 item_to_update = ad->data_touch_volume;
256 if (item_to_update && item_to_update->item && item_to_update->eo_check) {
258 int ret = sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value);
259 SETTING_TRACE("ret:%d", ret);
260 item_to_update->chk_status = mm_value;
261 elm_slider_value_set(item_to_update->eo_check, item_to_update->chk_status);
262 elm_object_item_disabled_set(item_to_update->item, EINA_FALSE);
263 elm_object_disabled_set(item_to_update->eo_check, EINA_FALSE);
265 setting_sound_update_slider_icon(item_to_update, SND_SLIDER_SYSTEM);
269 /*4.Enable "Call ringtone", via "Backuped" value */
270 item_to_update = ad->data_call_volume;
271 if (item_to_update && item_to_update->eo_check) {
272 SETTING_TRACE(".... ad->data_call_volume->chk_status:%d", item_to_update->chk_status);
275 int ret = sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value);
276 if (mm_value <= 0) mm_value = 1;
277 /*SETTING_TRACE("ret:%d", ret); */
278 sound_manager_set_volume(SOUND_TYPE_RINGTONE, mm_value);
279 item_to_update->chk_status = mm_value;
280 elm_slider_value_set(item_to_update->eo_check, item_to_update->chk_status);
281 SETTING_TRACE("ad->data_call_volume->chk_status : %d", item_to_update->chk_status);
286 static void __disable_sound_menu(void *data)
290 SettingProfileUG *ad = data;
291 ad->sound_on = FALSE;
293 __close_player2(ad, SND_SLIDER_NOTI);
294 __close_player2(ad, SND_SLIDER_MEDIA);
296 if (ad->mp_ringtone) {
297 SETTING_TRACE_DEBUG("player_set_mute");
298 player_set_mute(*(ad->mp_ringtone), 1);
300 Setting_GenGroupItem_Data *item_to_update = NULL;
302 /*1.Disable "Vibrate when ringing" */
303 item_to_update = ad->data_sound_when_ring;
304 setting_genlist_item_disabled_set(item_to_update, EINA_TRUE);
306 /*2.Disable "Notification" */
307 item_to_update = ad->data_noti_volume;
308 if (item_to_update && item_to_update->item && item_to_update->eo_check) {
309 item_to_update->chk_status = 0;
310 elm_slider_value_set(item_to_update->eo_check, item_to_update->chk_status);
311 elm_object_item_disabled_set(item_to_update->item, EINA_TRUE);
312 elm_object_disabled_set(item_to_update->eo_check, EINA_TRUE);
314 /* Change notification slider's icon as mute style */
315 setting_sound_update_slider_icon(item_to_update, SND_SLIDER_NOTI);
318 /*3.Disable "System" */
319 item_to_update = ad->data_touch_volume;
320 if (item_to_update && item_to_update->item && item_to_update->eo_check) {
321 item_to_update->chk_status = 0;
322 elm_slider_value_set(item_to_update->eo_check, item_to_update->chk_status);
323 elm_object_item_disabled_set(item_to_update->item, EINA_TRUE);
324 elm_object_disabled_set(item_to_update->eo_check, EINA_TRUE);
326 /* Change system slider's icon as mute style */
327 setting_sound_update_slider_icon(item_to_update, SND_SLIDER_SYSTEM);
330 /*4.Disable "Call ringtone" */
331 item_to_update = ad->data_call_volume;
332 if (item_to_update && item_to_update->eo_check) {
333 /*DO NOT CHANGE Backup Values(VCONFKEY_SETAPPL_RINGTONE_BACKUP_VOLUME) */
334 item_to_update->chk_status = 0;
335 elm_slider_value_set(item_to_update->eo_check, item_to_update->chk_status);
336 SETTING_TRACE("item_to_update->chk_status : %d", item_to_update->chk_status);
341 static void ___sound_vconf_change_cb(keynode_t *key, void *data)
343 ret_if(data == NULL);
344 SettingProfileUG *ad = data;
347 char *pa_ringtone = NULL;
348 char *sub_desc = NULL;
349 char *vconf_name = vconf_keynode_get_name(key);
350 Setting_GenGroupItem_Data *item_to_update = NULL;
352 if (!safeStrCmp(vconf_name, VCONFKEY_SYSMAN_MMC_STATUS)) {
353 status = vconf_keynode_get_int(key);
354 SETTING_TRACE("status:%d", status);
355 if (VCONFKEY_SYSMAN_MMC_MOUNTED != status) {
356 ret_if((!ad->mp_ringtone && !ad->mp_noti && !ad->mp_media));
357 SETTING_TRACE("song_playing:%s", ad->song_playing);
359 if (!safeStrNCmp(SETTING_PROFILE_MMC_PATH, ad->song_playing, safeStrLen(SETTING_PROFILE_MMC_PATH))) {
361 setting_sound_close_all_mm_players(ad);
362 /* close vibration */
365 /* when remove mmc card, change default tone */
366 char *call_tone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
367 if (call_tone && !safeStrNCmp(SETTING_PROFILE_MMC_PATH, call_tone, safeStrLen(SETTING_PROFILE_MMC_PATH))) {
369 ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, SETTING_DEFAULT_CALL_TONE_SDK);
371 ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, SETTING_DEFAULT_CALL_TONE);
374 SETTING_TRACE_DEBUG("failed to set vconf");
378 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_SOUND_STATUS_BOOL)) {
379 status = vconf_keynode_get_bool(key);
380 SETTING_TRACE_DEBUG("sound status is changed. %d", status);
382 __enable_sound_menu(ad);
384 __disable_sound_menu(ad);
388 setting_sound_update_slider_icon(ad->data_call_volume, SND_SLIDER_CALL);
389 /*FIX P141016-02659 Only In sound mode should enable "vibrate when ringing" */
390 setting_genlist_item_disabled_set(ad->data_sound_when_ring, !status);
391 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL)) {
392 status = vconf_keynode_get_bool(key);
393 SETTING_TRACE_DEBUG("vibration status is changed. %d", status);
395 PLAY_FEEDBACK(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_VIBRATION_ON)
398 setting_sound_update_slider_icon(ad->data_call_volume, SND_SLIDER_CALL);
399 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL)) {
400 item_to_update = ad->data_sound_when_ring;
401 status = vconf_keynode_get_bool(key);
402 if (item_to_update && item_to_update->eo_check) {
403 item_to_update->chk_status = status;
404 elm_check_state_set(item_to_update->eo_check, item_to_update->chk_status);
406 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL)) {
407 item_to_update = ad->data_button_sounds;
408 status = vconf_keynode_get_bool(key);
409 if (item_to_update && item_to_update->eo_check) {
410 item_to_update->chk_status = status;
411 elm_check_state_set(item_to_update->eo_check, item_to_update->chk_status);
413 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL)) {
414 item_to_update = ad->data_touch_sounds;
415 status = vconf_keynode_get_bool(key);
416 if (item_to_update && item_to_update->eo_check) {
417 item_to_update->chk_status = status;
418 elm_check_state_set(item_to_update->eo_check, item_to_update->chk_status);
420 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_SOUND_LOCK_BOOL)) {
421 item_to_update = ad->data_lock_sound;
422 status = vconf_keynode_get_bool(key);
423 if (item_to_update && item_to_update->eo_check) {
424 item_to_update->chk_status = status;
425 elm_check_state_set(item_to_update->eo_check, item_to_update->chk_status);
427 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR)) {
428 item_to_update = ad->data_call_alert_tone;
430 pa_ringtone = (char *)g_strdup(vconf_keynode_get_str(key));
431 if (setting_sound_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL) {
434 pa_ringtone = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE_SDK);
437 pa_ringtone = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
439 ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
441 SETTING_TRACE_DEBUG("failed to set vconf");
443 sub_desc = setting_media_basename2(pa_ringtone);
444 if (item_to_update) {
445 item_to_update->sub_desc = (char *)g_strdup(sub_desc);
446 elm_genlist_item_update(item_to_update->item);
450 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR)) {
451 item_to_update = ad->data_msg_alert_tone;
452 pa_ringtone = (char *)g_strdup(vconf_keynode_get_str(key));
453 if (setting_sound_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL) {
455 pa_ringtone = (char *)g_strdup(SETTING_DEFAULT_MSG_TONE);
456 ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, pa_ringtone);
458 SETTING_TRACE_DEBUG("failed to set vconf");
460 sub_desc = setting_media_basename2(pa_ringtone);
461 if (item_to_update) {
462 item_to_update->sub_desc = (char *)g_strdup(sub_desc);
463 elm_genlist_item_update(item_to_update->item);
470 int setting_sound_listen_vconf_change(void *data)
472 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
475 vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, ___sound_vconf_change_cb, data);
478 vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, ___sound_vconf_change_cb, data);
479 vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, ___sound_vconf_change_cb, data);
481 vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, ___sound_vconf_change_cb, data);
482 vconf_notify_key_changed(VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL, ___sound_vconf_change_cb, data);
483 vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, ___sound_vconf_change_cb, data);
484 vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, ___sound_vconf_change_cb, data);
487 vconf_notify_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ___sound_vconf_change_cb, data);
488 vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ___sound_vconf_change_cb, data);
493 int setting_sound_unlisten_vconf_change(void *data)
497 vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, ___sound_vconf_change_cb);
500 vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, ___sound_vconf_change_cb);
501 vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, ___sound_vconf_change_cb);
503 vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, ___sound_vconf_change_cb);
504 vconf_ignore_key_changed(VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL, ___sound_vconf_change_cb);
505 vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, ___sound_vconf_change_cb);
506 vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, ___sound_vconf_change_cb);
509 vconf_ignore_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ___sound_vconf_change_cb);
510 vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ___sound_vconf_change_cb);
514 static Eina_Bool __volume_up_timer_cb(void *data)
517 retv_if(!data, EINA_FALSE);
518 SettingProfileUG *ad = (SettingProfileUG *)data;
520 if (ad->is_pressing == FALSE) {
521 ad->updown_timer = NULL;
525 sound_type_e sound_type = 0;
527 sound_manager_get_current_sound_type(&sound_type);
528 if (sound_type == SOUND_TYPE_MEDIA) {
529 int ret = sound_manager_get_volume(sound_type, &volume);
530 SETTING_TRACE("ret:%d", ret);
532 sound_manager_set_volume(sound_type, ++volume);
533 if (ad->data_media_volume && ad->data_media_volume->eo_check) {
534 ad->data_media_volume->chk_status = volume;
535 elm_slider_value_set(ad->data_media_volume->eo_check, volume);
539 int ret = sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
540 SETTING_TRACE("ret:%d", ret);
542 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ++volume);
543 if (ad->data_call_volume && ad->data_call_volume->eo_check) {
544 ad->data_call_volume->chk_status = volume;
545 elm_slider_value_set(ad->data_call_volume->eo_check, volume);
546 SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
554 static Eina_Bool __volume_down_timer_cb(void *data)
557 retv_if(!data, EINA_FALSE);
558 SettingProfileUG *ad = (SettingProfileUG *)data;
560 if (ad->is_pressing == FALSE) {
561 ad->updown_timer = NULL;
565 sound_type_e sound_type = 0;
567 sound_manager_get_current_sound_type(&sound_type);
568 if (sound_type == SOUND_TYPE_MEDIA) {
569 int ret = sound_manager_get_volume(sound_type, &volume);
570 SETTING_TRACE("ret:%d", ret);
572 sound_manager_set_volume(sound_type, --volume);
573 if (ad->data_media_volume && ad->data_media_volume->eo_check) {
574 ad->data_media_volume->chk_status = volume;
575 elm_slider_value_set(ad->data_media_volume->eo_check, volume);
579 int ret = sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
580 SETTING_TRACE("ret:%d", ret);
582 sound_manager_set_volume(SOUND_TYPE_RINGTONE, --volume);
584 /* change to Vibration mode */
585 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
586 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
587 PLAY_FEEDBACK(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_VIBRATION_ON)
589 if (ad->data_call_volume && ad->data_call_volume->eo_check) {
590 ad->data_call_volume->chk_status = volume;
591 elm_slider_value_set(ad->data_call_volume->eo_check, volume);
592 SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
593 setting_sound_update_slider_icon(ad->data_call_volume, SND_SLIDER_CALL);
601 static Eina_Bool __volume_key_up_cb(void *data, int type, void *event)
604 retv_if(!data || !event, EINA_TRUE);
605 SettingProfileUG *ad = (SettingProfileUG *)data;
607 Ecore_Event_Key *ev = event;
608 char *key = (char *)ev->key;
612 if (!safeStrCmp(key, KEY_VOLUMEUP) || !safeStrCmp(key, KEY_VOLUMEDOWN)) {
613 ad->is_pressing = FALSE;
614 if (ad->updown_timer) {
615 ecore_timer_del(ad->updown_timer);
616 ad->updown_timer = NULL;
622 static Eina_Bool __volume_key_down_cb(void *data, int type, void *event)
625 retv_if(!data || !event, EINA_TRUE);
626 SettingProfileUG *ad = (SettingProfileUG *)data;
628 Ecore_Event_Key *ev = event;
629 char *key = (char *)ev->key;
633 /* get current sound type */
634 sound_type_e sound_type;
637 if (!safeStrCmp(key, KEY_VOLUMEUP)) {
638 SETTING_TRACE("Press KEY_VOLUMEUP");
641 * On the volume popup,
642 * 1) if user controls the slider, don't play any sounds��just change volume.
643 * 2) if user controls the HW volume key for ringtone sound, the beep sound is supported
646 * 1) if user controls the slider, change volume & play sound
647 * 2) if user controls the HW volume key, do nothing(DO NOT change volume,DO NoT play sound)
649 if (0 != safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
653 /*if (ad->view_type != SETTING_PROF_VIEW_VOL) return EINA_TRUE; */
655 ad->is_pressing = TRUE;
657 sound_manager_get_current_sound_type(&sound_type);
658 if (sound_type == SOUND_TYPE_MEDIA) {
659 SETTING_TRACE("sound_type == SOUND_TYPE_MEDIA")
660 int ret = sound_manager_get_volume(sound_type, &volume);
661 SETTING_TRACE("ret:%d", ret);
664 /*int ret = sound_manager_set_volume_with_safety(sound_type, volume); */
665 int ret = sound_manager_set_volume(sound_type, volume);
667 if (/*ret == SOUND_MANAGER_ERROR_NO_OPERATION ||*/ ret == SOUND_MANAGER_ERROR_INTERNAL) {
668 SETTING_TRACE_DEBUG("didn't set safety volume");
670 ad->data_media_volume->chk_status = 10;
671 elm_slider_value_set(ad->data_media_volume->eo_check, 10);
676 if (ad->data_media_volume && ad->data_media_volume->eo_check) {
677 ad->data_media_volume->chk_status = volume;
678 elm_slider_value_set(ad->data_media_volume->eo_check, volume);
682 SETTING_TRACE("sound_type == SOUND_TYPE_RINGTONE")
683 int ret = sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
684 /*ad->backup_ringtong_volume = volume; */
685 /*vconf_set_int(VCONFKEY_SETAPPL_RINGTONE_BACKUP_VOLUME, ad->backup_ringtong_volume); */
686 /*SETTING_TRACE("ret:%d, volume:%d, ad->backup_ringtong_volume:%d", ret, volume, ad->backup_ringtong_volume); */
688 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ++volume);
691 vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound);
692 if (volume > 0 && !sound) {
693 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
694 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
695 ad->data_call_volume->chk_status = volume;
696 setting_sound_update_slider_icon(ad->data_call_volume, SND_SLIDER_CALL);
698 if (ad->data_call_volume && ad->data_call_volume->eo_check) {
699 ad->data_call_volume->chk_status = volume;
700 elm_slider_value_set(ad->data_call_volume->eo_check, volume);
701 SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
705 SETTING_TRACE("ad->mp_ringtone:%p, volume:%d", ad->mp_ringtone, volume);
706 if (ad->mp_ringtone == NULL) {
707 setting_sound_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
709 setting_sound_play_sound_origin(&(ad->mp_ringtone), ad, NULL,
710 "/opt/usr/share/settings/Sys/Volume_control.ogg",
712 SOUND_TYPE_RINGTONE);
715 player_state_e state;
716 player_get_state(*(ad->mp_ringtone), &state);
717 if (state == PLAYER_STATE_PAUSED) {
718 SETTING_TRACE("state == PLAYER_STATE_PAUSED");
719 player_start(*(ad->mp_ringtone));
720 } else if (state == PLAYER_STATE_PLAYING) {
721 SETTING_TRACE("state == PLAYER_STATE_PLAYING");
722 player_set_mute(*(ad->mp_ringtone), FALSE);
726 ad->updown_timer = ecore_timer_add(0.5, __volume_up_timer_cb, ad);
727 } else if (!safeStrCmp(key, KEY_VOLUMEDOWN)) {
728 SETTING_TRACE("Press KEY_VOLUMEDOWN");
731 * On the volume popup,
732 * 1) if user controls the slider, don't play any sounds��just change volume.
733 * 2) if user controls the HW volume key for ringtone sound, the beep sound is supported
736 * 1) if user controls the slider, change volume & play sound
737 * 2) if user controls the HW volume key, do nothing(DO NOT change volume,DO NoT play sound)
739 if (0 != safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
742 /*if (ad->view_type != SETTING_PROF_VIEW_VOL) return EINA_TRUE; */
743 ad->is_pressing = TRUE;
744 sound_manager_get_current_sound_type(&sound_type);
745 if (sound_type == SOUND_TYPE_MEDIA) {
746 SETTING_TRACE("sound_type == SOUND_TYPE_MEDIA")
747 int ret = sound_manager_get_volume(sound_type, &volume);
748 SETTING_TRACE("ret:%d", ret);
750 sound_manager_set_volume(sound_type, --volume);
751 if (ad->data_media_volume && ad->data_media_volume->eo_check) {
752 ad->data_media_volume->chk_status = volume;
753 elm_slider_value_set(ad->data_media_volume->eo_check, volume);
758 SETTING_TRACE("sound_type == SOUND_TYPE_RINGTONE");
760 vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound);
761 if (!sound) return EINA_TRUE;
762 int ret = sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
763 /*ad->backup_ringtong_volume = volume; */
764 /*vconf_set_int(VCONFKEY_SETAPPL_RINGTONE_BACKUP_VOLUME, ad->backup_ringtong_volume); */
765 SETTING_TRACE("ret:%d, volume:%d", ret, volume);
767 sound_manager_set_volume(SOUND_TYPE_RINGTONE, --volume);
769 /* change to Vibration mode */
770 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
771 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
773 PLAY_FEEDBACK(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_VIBRATION_ON)
775 ad->data_call_volume->chk_status = volume;
776 setting_sound_update_slider_icon(ad->data_call_volume, SND_SLIDER_CALL);
778 if (ad->data_call_volume && ad->data_call_volume->eo_check) {
779 ad->data_call_volume->chk_status = volume;
780 elm_slider_value_set(ad->data_call_volume->eo_check, volume);
781 SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
784 if (ad->mp_ringtone == NULL) {
785 setting_sound_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
787 setting_sound_play_sound_origin(&(ad->mp_ringtone), ad, NULL,
788 "/opt/usr/share/settings/Sys/Volume_control.ogg",
790 SOUND_TYPE_RINGTONE);
793 player_state_e state;
794 player_get_state(*(ad->mp_ringtone), &state);
795 SETTING_TRACE("ringtone player status : %d", state);
796 if (state == PLAYER_STATE_PAUSED) {
797 player_start(*(ad->mp_ringtone));
801 ad->updown_timer = ecore_timer_add(0.5, __volume_down_timer_cb, ad);
802 } else if (!safeStrCmp(key, KEY_MENU)) {
803 SETTING_TRACE("KEY_MENU CLICK.");
804 } else if (!safeStrCmp(key, KEY_HOME)) { /*XF86Phone*/
805 SETTING_TRACE("KEY_HOME is pressed");
806 if (!safeStrCmp(ad->viewtype, "org.tizen.volume"))
807 ug_destroy_me(ad->ug);
813 Evas_Object *setting_sound_init(void *data)
816 /*appcore_measure_start(); */
817 retv_if(data == NULL, NULL);
818 SettingProfileUG *ad = data;
820 bindtextdomain(SETTING_PACKAGE, SETTING_LOCALEDIR);
822 setting_create_Gendial_itc("slider.main", &(ad->itc_layout));
823 ad->itc_layout.func.content_get = __sound_slider_icon_get;
825 setting_create_Gendial_itc("1icon", &(ad->itc_layout_1icon));
826 ad->itc_layout_1icon.func.content_get = __sound_slider_icon_get;
828 /* register view node table */
829 setting_view_node_table_intialize();
830 setting_view_node_table_register(&setting_view_profile_sound_main, NULL);
832 if (!safeStrCmp(ad->viewtype, VOLUME_APP_NAME))
833 elm_win_wm_rotation_preferred_rotation_set(ad->win_get, -1);
835 elm_win_wm_rotation_preferred_rotation_set(ad->win_get, 0);
837 /* creating a view. */
838 setting_view_node_set_cur_view(&setting_view_profile_sound_main);
839 setting_view_create(&setting_view_profile_sound_main, (void *)ad);
841 setting_sound_listen_vconf_change(ad);
846 void setting_sound_deinit(void *data)
849 ret_if(data == NULL);
850 SettingProfileUG *ad = data;
851 elm_win_wm_rotation_preferred_rotation_set(ad->win_get, -1);
853 setting_sound_unlisten_vconf_change(ad);
855 setting_sound_close_all_mm_players(ad);
857 if (ad->calling_popup) {
858 evas_object_del(ad->calling_popup);
859 ad->calling_popup = NULL;
862 if (ad->updown_timer) {
863 ecore_timer_del(ad->updown_timer);
864 ad->updown_timer = NULL;
866 if (ad->keydown_handler) {
867 ecore_event_handler_del(ad->keydown_handler);
868 ad->keydown_handler = NULL;
870 if (ad->keyup_handler) {
871 ecore_event_handler_del(ad->keyup_handler);
872 ad->keyup_handler = NULL;
876 /* it is the view manage strategy to invoke view's destory operation. */
877 setting_view_destroy(&setting_view_profile_sound_main, ad);
882 /* ***************************************************
886 ***************************************************/
887 static void __calling_popup_cb(void *data, Evas_Object *obj, void *event_info)
889 ret_if(data == NULL);
890 SettingProfileUG *ad = (SettingProfileUG *) data;
892 if (ad->calling_popup) {
893 evas_object_del(ad->calling_popup);
894 ad->calling_popup = NULL;
898 /* Show guide popup, when drag or tap slider if during call.
899 Do not provide pre-listening. */
900 void setting_sound_create_warning_popup_during_call(void *data)
902 ret_if(data == NULL);
903 SettingProfileUG *ad = (SettingProfileUG *) data;
906 vconf_get_int(VCONFKEY_CALL_STATE, &call_state);
907 if (call_state != VCONFKEY_CALL_OFF) {
908 SETTING_TRACE("Call status is not OFF (%d)", call_state);
909 if (!ad->calling_popup) {
910 ad->calling_popup = setting_create_popup_with_btn(ad, ad->win_get,
911 "IDS_ST_HEADER_UNABLE_TO_PLAY_SAMPLE_ABB",
912 "IDS_ST_POP_SAMPLES_CANNOT_BE_PLAYED_DURING_CALLS",
913 __calling_popup_cb, 0,
921 static void __mm_player_msg_cb(void *user_param)
923 ret_if(user_param == NULL);
924 SettingProfileUG *ad = (SettingProfileUG *)user_param;
926 SETTING_TRACE("completed_cb is called.");
927 setting_sound_close_all_mm_players(ad);
930 static void __mm_player_interrupted_cb(player_interrupted_code_e code, void *user_data)
932 ret_if(user_data == NULL);
933 SettingProfileUG *ad = (SettingProfileUG *)user_data;
935 SETTING_TRACE("interrupted code : %d", code);
937 if (ad->mp_ringtone) {
938 player_state_e state;
939 player_get_state(*(ad->mp_ringtone), &state);
940 SETTING_TRACE("ringtone player state : %d", state);
941 } else if (ad->mp_noti) {
942 player_state_e state;
943 player_get_state(*(ad->mp_noti), &state);
944 SETTING_TRACE("noti player state : %d", state);
945 } else if (ad->mp_media) {
946 player_state_e state;
947 player_get_state(*(ad->mp_media), &state);
948 SETTING_TRACE("media player state : %d", state);
952 static Eina_Bool __play_timer_cb(void *data)
955 retv_if(!data, EINA_FALSE);
956 SettingProfileUG *ad = (SettingProfileUG *)data;
958 if (ad->mp_prepare_async) {
959 SETTING_TRACE("player (%x)", ad->mp_prepare_async);
961 player_state_e state = -1;
962 err = player_get_state(*(ad->mp_prepare_async), &state);
963 SETTING_TRACE("state:%d", state);
965 if (state != PLAYER_STATE_READY) {
966 SETTING_TRACE_ERROR("state of player is invalid %d", err);
967 player_unprepare(*(ad->mp_prepare_async));
968 player_destroy(*(ad->mp_prepare_async));
969 if (ad->mp_prepare_async == ad->mp_ringtone) {
970 free(ad->mp_ringtone);
971 ad->mp_ringtone = NULL;
972 } else if (ad->mp_prepare_async == ad->mp_noti) {
975 } else if (ad->mp_prepare_async == ad->mp_media) {
979 ad->mp_prepare_async = NULL;
983 player_set_completed_cb(*(ad->mp_prepare_async), __mm_player_msg_cb, ad);
984 player_set_interrupted_cb(*(ad->mp_prepare_async), __mm_player_interrupted_cb, ad);
986 err = player_start(*(ad->mp_prepare_async));
987 if (err != PLAYER_ERROR_NONE) { /* if directly return error.. */
988 SETTING_TRACE_ERROR("player_start [%d]", err);
989 player_unset_completed_cb(*(ad->mp_prepare_async));
990 player_unset_interrupted_cb(*(ad->mp_prepare_async));
991 player_unprepare(*(ad->mp_prepare_async));
992 player_destroy(*(ad->mp_prepare_async));
993 if (ad->mp_prepare_async == ad->mp_ringtone) {
994 free(ad->mp_ringtone);
995 ad->mp_ringtone = NULL;
996 } else if (ad->mp_prepare_async == ad->mp_noti) {
999 } else if (ad->mp_prepare_async == ad->mp_media) {
1001 ad->mp_media = NULL;
1003 ad->mp_prepare_async = NULL;
1009 static void __mm_player_pipe_handler(void *data, void *buf, unsigned int len)
1011 SETTING_TRACE_BEGIN;
1014 /* Async cb : to improve slider's performance when creating player */
1015 static void __mm_player_prepared_cb(void *user_data)
1017 SETTING_TRACE_BEGIN;
1019 SettingProfileUG *ad = (SettingProfileUG *)user_data;
1021 /* Do not call mm API in mm cb : Add timer to avoid it */
1022 ecore_timer_add(0.0, (Ecore_Task_Cb)__play_timer_cb, ad);
1024 /* wake main thread up for timer to work well */
1026 pipe = ecore_pipe_add(__mm_player_pipe_handler, NULL);
1027 ecore_pipe_write_close(pipe);
1028 ecore_pipe_del(pipe);
1033 player_h *setting_sound_play_sound(void *data, void *cb,
1034 char *ringtone_file,
1036 sound_type_e sound_type)
1039 retv_if(data == NULL, NULL);
1040 SettingProfileUG *ad = (SettingProfileUG *) data;
1042 int is_existing = setting_sound_check_file_exist(ad, ringtone_file);
1043 if (is_existing == SETTING_RETURN_FAIL || NULL == ringtone_file) {
1044 switch (sound_type) {
1045 case SOUND_TYPE_RINGTONE:
1047 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE_SDK);
1049 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
1051 case SOUND_TYPE_MEDIA:
1053 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE_SDK);
1055 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_MEDIA_TONE);
1057 case SOUND_TYPE_NOTIFICATION:
1058 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_MSG_TONE);
1062 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE_SDK);
1064 ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
1069 if (safeStrCmp(ringtone_file, "Silent") == 0)
1072 ad->song_playing = (char *)g_strdup(ringtone_file);
1075 player_h *player = calloc(1, sizeof(player_h));
1077 SETTING_TRACE_ERROR("failed to calloc player_h");
1083 sound_manager_set_session_type(SOUND_SESSION_TYPE_MEDIA);
1085 err = player_create(player);
1086 if (err != PLAYER_ERROR_NONE) {
1087 SETTING_TRACE_ERROR("creating the player handle failed[%d]", err);
1092 err = player_set_sound_type(*player, sound_type);
1093 if (err != PLAYER_ERROR_NONE) {
1094 SETTING_TRACE_ERROR("error to set sound_type[%d]", err);
1095 player_destroy(*player);
1100 SETTING_TRACE_DEBUG("player_set_sound_type [%d]", sound_type);
1102 err = player_set_uri(*player, ad->song_playing);
1103 if (err != PLAYER_ERROR_NONE) {
1104 SETTING_TRACE_ERROR("error to set attribute---profile_uri[%d]", err);
1105 player_destroy(*player);
1110 if (sound_type != SOUND_TYPE_MEDIA) {
1112 /*err = player_set_session_prelistening(*player); */
1113 /*player_prelistening_mode_e mode; */
1115 if (sound_type == SOUND_TYPE_NOTIFICATION) {
1116 mode = PLAYER_PRELISTENING_MODE_NOTIFICATION;
1118 mode = PLAYER_PRELISTENING_MODE_CALL;
1120 err = player_set_prelistening_mode(*player, mode);
1121 if (err != PLAYER_ERROR_NONE) {
1122 SETTING_TRACE_ERROR("error to player_set_session_prelistening[%d]", err);
1123 player_destroy(*player);
1129 err = player_set_safety_volume(*player);
1130 if (err != PLAYER_ERROR_NONE) {
1131 SETTING_TRACE_ERROR("error to player_set_safety_volume[%d]", err);
1132 player_destroy(*player);
1137 #if SUPPORT_PLAYER_ASYNC
1138 err = player_prepare_async(*player, __mm_player_prepared_cb, ad);
1139 if (err != PLAYER_ERROR_NONE) {
1140 SETTING_TRACE_ERROR("realizing the player handle failed[%d]", err);
1141 ad->mp_prepare_async = NULL;
1142 player_destroy(*player);
1146 ad->mp_prepare_async = player;
1147 SETTING_TRACE("waiting..player (%x)", ad->mp_prepare_async);
1149 err = player_prepare(*player);
1150 if (err != PLAYER_ERROR_NONE) {
1151 SETTING_TRACE_ERROR("player_prepare() error %d", err);
1152 player_destroy(*player);
1157 player_state_e state = -1;
1158 err = player_get_state(*player, &state);
1159 SETTING_TRACE("state:%d", state);
1160 if (state != PLAYER_STATE_READY) {
1161 SETTING_TRACE_ERROR("state of player is invalid %d", err);
1162 player_unprepare(*player);
1163 player_destroy(*player);
1169 player_set_completed_cb(*player, __mm_player_msg_cb, ad);
1170 player_set_interrupted_cb(*player, __mm_player_interrupted_cb, ad);
1172 err = player_start(*player);
1173 if (err != PLAYER_ERROR_NONE) {
1174 /* if directly return error.. */
1175 SETTING_TRACE_ERROR("player_start [%d]", err);
1176 player_unset_completed_cb(*player);
1177 player_unset_interrupted_cb(*player);
1178 player_unprepare(*player);
1179 player_destroy(*player);
1188 void setting_sound_play_sound_origin(player_h **mp_handle, void *data,
1189 void *cb, char *ringtone_file,
1192 sound_type_e sound_type)
1194 SETTING_TRACE_BEGIN;
1196 ret_if(data == NULL);
1199 SETTING_TRACE_DEBUG("vol < EXP");
1201 if (setting_sound_stop_sound(data, *mp_handle) != SETTING_RETURN_SUCCESS) {
1210 int vconf_value = 0;
1211 vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS, &vconf_value);
1212 if (vconf_value == TRUE)
1215 SettingProfileUG *ad = (SettingProfileUG *) data;
1216 if (*mp_handle == NULL) {
1217 *mp_handle = setting_sound_play_sound(ad, cb, ringtone_file, vol, sound_type);
1218 SETTING_TRACE("mp_handle (%x)", *mp_handle);
1222 int setting_sound_stop_sound(void *data, player_h *player)
1224 SETTING_TRACE_BEGIN;
1225 retv_if(data == NULL || player == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1227 SETTING_TRACE("player (%x)", player);
1229 SettingProfileUG *ad = (SettingProfileUG *) data;
1230 if (ad->song_playing) {
1231 g_free(ad->song_playing);
1232 ad->song_playing = NULL;
1235 player_state_e state = -1;
1236 int ret = SETTING_RETURN_SUCCESS;
1237 int prev_behavior = 0; /* instead of do_while(0) and break */
1239 player_get_state(*player, &state);
1240 if (state == PLAYER_STATE_PLAYING) {
1241 if (player_stop(*player) != PLAYER_ERROR_NONE) {
1242 SETTING_TRACE("mm player stop failed");
1243 ret = SETTING_MMPLAYER_STOP_ERR;
1244 prev_behavior++; /* instead of do_while(0) and break */
1248 player_unset_completed_cb(*player);
1249 player_unset_interrupted_cb(*player);
1251 if ((prev_behavior == 0) && (player_unprepare(*player) != PLAYER_ERROR_NONE)) {
1252 SETTING_TRACE("mm player unrealize failed");
1253 ret = SETTING_MMPLAYER_UNREALIZE_ERR;
1254 prev_behavior++; /* instead of do_while(0) and break */
1257 if ((prev_behavior == 0) && (player_destroy(*player) != PLAYER_ERROR_NONE)) {
1258 SETTING_TRACE("mm player destroy failed");
1259 ret = SETTING_MMPLAYER_DESTROY_ERR;
1266 /*int __close_player2(void *data, setting_volume_types type); */
1267 int __close_player2(void *data, SoundType type)
1269 SETTING_TRACE_BEGIN;
1271 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1273 SettingProfileUG *ad = (SettingProfileUG *) data;
1274 player_h *tmp = NULL;
1277 case SND_SLIDER_CALL:
1278 retv_if(ad->mp_ringtone == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1279 SETTING_TRACE("ringtone player (%x)", ad->mp_ringtone);
1280 if (ad->mp_prepare_async == ad->mp_ringtone) {
1281 ad->mp_prepare_async = NULL;
1283 /*player_unprepare take so much time, so if __mm_player_msg_cb was invokeing(it will trigger invoking setting_sound_stop_sound), */
1284 /*in this time user click Back key to exit(setting_sound_deinit will trigger setting_sound_stop_sound() too) */
1285 /*if not set ad->mp_ringtone to NULL in advance, ad->mp_ringtone will be repeatly released */
1286 tmp = ad->mp_ringtone;
1287 ad->mp_ringtone = NULL;
1288 setting_sound_stop_sound(ad, tmp);
1290 case SND_SLIDER_NOTI:
1291 retv_if(ad->mp_noti == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1292 SETTING_TRACE("noti player (%x)", ad->mp_noti);
1293 if (ad->mp_prepare_async == ad->mp_noti) {
1294 ad->mp_prepare_async = NULL;
1298 setting_sound_stop_sound(ad, tmp);
1300 case SND_SLIDER_MEDIA:
1301 retv_if(ad->mp_media == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1302 SETTING_TRACE("media player (%x)", ad->mp_media);
1303 if (ad->mp_prepare_async == ad->mp_media) {
1304 ad->mp_prepare_async = NULL;
1307 ad->mp_media = NULL;
1308 setting_sound_stop_sound(ad, tmp);
1310 case SND_SLIDER_SYSTEM:
1312 return SETTING_RETURN_FAIL;
1315 return SETTING_RETURN_SUCCESS;
1319 setting_sound_close_other_mm_players_but_type(void *data, sound_type_e type)
1322 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1324 SettingProfileUG *ad = (SettingProfileUG *) data;
1329 case SOUND_TYPE_RINGTONE: /* close noti, media and system players */
1330 if (__close_player2(ad, SND_SLIDER_NOTI) != SETTING_RETURN_SUCCESS)
1332 if (__close_player2(ad, SND_SLIDER_MEDIA) != SETTING_RETURN_SUCCESS)
1335 case SOUND_TYPE_NOTIFICATION: /* close ringtone, media and system players */
1336 if (__close_player2(ad, SND_SLIDER_CALL) != SETTING_RETURN_SUCCESS)
1338 if (__close_player2(ad, SND_SLIDER_MEDIA) != SETTING_RETURN_SUCCESS)
1341 case SOUND_TYPE_MEDIA: /* close ringtone, noti and system players */
1342 if (__close_player2(ad, SND_SLIDER_CALL) != SETTING_RETURN_SUCCESS)
1344 if (__close_player2(ad, SND_SLIDER_NOTI) != SETTING_RETURN_SUCCESS)
1347 default: /* if unknown type, dont close any player */
1351 SETTING_TRACE_DEBUG("ret: %d", ret);
1354 return SETTING_RETURN_SUCCESS;
1356 return SETTING_RETURN_FAIL;
1359 int setting_sound_close_all_mm_players(void *data)
1362 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1364 SettingProfileUG *ad = (SettingProfileUG *) data;
1368 if (__close_player2(ad, SND_SLIDER_CALL) != SETTING_RETURN_SUCCESS)
1370 if (__close_player2(ad, SND_SLIDER_NOTI) != SETTING_RETURN_SUCCESS)
1372 if (__close_player2(ad, SND_SLIDER_MEDIA) != SETTING_RETURN_SUCCESS)
1376 return SETTING_RETURN_SUCCESS;
1378 return SETTING_RETURN_FAIL;