tizen 2.3 release
[apps/home/settings.git] / setting-profile / src / setting-profile.c
index f035983..456b6f6 100755 (executable)
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.1 (the License);
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *     http://floralicense.org/license/
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
+ * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ *
  */
 
 #include <setting-profile.h>
-#include <haptic.h>
+#include <dd-haptic.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <iniparser.h>
 #include <utilX.h>
 #include <Ecore_X.h>
+#include <Ecore.h>
+#include <app_manager.h>
+#include <metadata_extractor.h>
+#include <player.h>
+#include <setting-cfg.h>
 
 #ifndef UG_MODULE_API
 #define UG_MODULE_API __attribute__ ((visibility("default")))
 #endif
 
+#define MIGRATION_HAPTIC 0
+
 SettingProfileUG *g_ProfileUG = NULL;  /*  just a handler */
 
-extern char *repeat_type[];
+static int __close_player(void *data, setting_volume_types type);
 
-static void setting_profile_ug_cb_resize(void *data, Evas *e,
-                                        Evas_Object *obj, void *event_info)
+extern char *repeat_type[];
+bool vib_caller_flag = false;
+
+SliderIcons slider_icons[SND_SLIDER_MAX] = {
+               {SND_SLIDER_CALL, SETTING_ICON_PATH_CFG"B04_slider_icon_vibrate.png", SETTING_ICON_PATH_CFG"B04_slider_icon_ring.png"},
+               {SND_SLIDER_NOTI, SETTING_ICON_PATH_CFG"B04_slider_icon_notification_mute.png", SETTING_ICON_PATH_CFG"B04_slider_icon_notification.png"},
+               {SND_SLIDER_MEDIA, SETTING_ICON_PATH_CFG"00_volume_icon.png", SETTING_ICON_PATH_CFG"00_volume_icon.png"},
+               {SND_SLIDER_SYSTEM, SETTING_ICON_PATH_CFG"B04_slider_icon_system_mute.png", SETTING_ICON_PATH_CFG"B04_slider_icon_system.png"},
+               {SND_SLIDER_CALL_VIB, SETTING_ICON_PATH_CFG"B04_volume_icon_mute.png", SETTING_ICON_PATH_CFG"B04_volume_icon_Vibrat.png"},
+               {SND_SLIDER_NOTI_VIB, SETTING_ICON_PATH_CFG"B04_slider_icon_notification_mute.png", SETTING_ICON_PATH_CFG"B04_slider_icon_notification_vibrate.png"},
+               {SND_SLIDER_SYSTEM_VIB, SETTING_ICON_PATH_CFG"B04_slider_icon_system_mute.png", SETTING_ICON_PATH_CFG"B04_slider_icon_system_vibrate.png"},
+               {SND_SLIDER_MAX, NULL, NULL},
+};
+
+char* setting_profile_get_slider_icon(int type, int volume)
 {
-       ret_if(data == NULL);
+       if(type >= SND_SLIDER_MAX)
+               return NULL;
 
-       SettingProfileUG *ad = (SettingProfileUG *) data;
-       setting_view_update(&setting_view_profile_sound_main, ad);
+       SETTING_TRACE("type : %d, volume : %d", type, volume);
 
+       if(volume > 0)
+       {
+               return slider_icons[type].volume;
+       }
+       else
+       {
+               return slider_icons[type].mute;
+       }
 }
 
-/**
- *@ To sync Setting App volume with Volume Hard key volume
- */
-
-void __sound_volume_changed_cb(sound_type_e type, unsigned int volume, void *user_data)
+void setting_profile_update_slider_icon(Setting_GenGroupItem_Data *item_data, int type)
 {
        SETTING_TRACE_BEGIN;
-       ret_if(!user_data);
-       SettingProfileUG *ad = user_data;
-       Setting_GenGroupItem_Data *item_data = NULL;
+       ret_if(!item_data || !item_data->eo_check);
 
-       Evas_Object *slider = NULL;
-       switch (type)
+       Evas_Object *cur_icon = elm_object_content_get(item_data->eo_check);
+       ret_if(!cur_icon);
+
+       char *old_file = NULL;
+       char *new_file = NULL;
+
+       elm_image_file_get(cur_icon, &old_file, NULL);
+       new_file = setting_profile_get_slider_icon(type, item_data->chk_status);
+       if(safeStrCmp(old_file, new_file))
        {
-               case SOUND_TYPE_SYSTEM:
-                       SETTING_TRACE_DEBUG("system");
-                       if (ad->data_touch_volume)
-                               item_data = ad->data_touch_volume;
-                               //slider = ad->data_touch_volume->eo_check;
-                       break;
-               case SOUND_TYPE_NOTIFICATION:
-                       SETTING_TRACE_DEBUG("notification");
-                       if (ad->data_noti_volume)
-                               item_data = ad->data_noti_volume;
-                               //slider = ad->data_noti_volume->eo_check;
-                       break;
-               case SOUND_TYPE_RINGTONE:
-                       SETTING_TRACE_DEBUG("ringtone");
-                       if (ad->data_call_volume)
-                               item_data = ad->data_call_volume;
-                               //slider = ad->data_call_volume->eo_check;
-                       break;
-               case SOUND_TYPE_MEDIA:
-                       SETTING_TRACE_DEBUG("media");
-                       if (ad->data_media_volume)
-                               item_data = ad->data_media_volume;
-                               //slider = ad->data_media_volume->eo_check;
-                       break;
-               //At present, there are only 4 types supported:RINGTONE,NOTIFICATION,SYSTEM,MEDIA
-               default:
-                       SETTING_TRACE_ERROR("Invalid sound type:%d", type);
-                       return;
+               elm_object_content_unset(item_data->eo_check);
+               evas_object_del(cur_icon);
+               cur_icon = NULL;
+
+               Evas_Object *icon = elm_icon_add(item_data->eo_check);
+               elm_image_file_set(icon, new_file, NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               elm_object_content_set(item_data->eo_check, icon);
+               evas_object_show(icon);
+       }
+}
+
+char *setting_media_basename(char *path)
+{
+       if (NULL == path || '\0' == path[0]) {
+               return NULL;    /* invalid arguement */
        }
 
-       if (item_data && item_data->eo_check)
+       if(safeStrCmp(path, "silent") == 0)
+               return (char*)g_strdup(_("IDS_ST_BODY_PHONEPROFILES_SILENT"));
+
+       metadata_extractor_h metadata = NULL;
+       char *title = NULL;
+       int ret = metadata_extractor_create(&metadata);
+       if(ret == METADATA_EXTRACTOR_ERROR_NONE && metadata)
        {
-               SETTING_TRACE_DEBUG("update slider value");
-               int volume = 0;
-               double old_volume = 0;
-               sound_manager_get_volume(type, &volume);        /* system */
-               SETTING_TRACE_DEBUG("get_volume is %d", volume);
-
-               old_volume = elm_slider_value_get(item_data->eo_check);
-               SETTING_TRACE_DEBUG("slider volume is %f", old_volume);
-               if ((int)volume != (int)(old_volume + 0.5)) {   /* reset again */
-                       elm_slider_value_set(item_data->eo_check, (double)volume);
-                       SETTING_TRACE_DEBUG("update to new value %d", volume);
-                       item_data->chk_status = volume;
-                       elm_genlist_item_update(item_data->item);
+               ret = metadata_extractor_set_path(metadata, path);
+               if(ret == METADATA_EXTRACTOR_ERROR_NONE)
+               {
+                       ret = metadata_extractor_get_metadata(metadata, METADATA_TITLE, &title);
+                       metadata_extractor_destroy(metadata);
+                       if(title)
+                               return (char*)g_strdup(title);
+                       else
+                               return setting_file_basename(path);
+               }
+               else
+               {
+                       metadata_extractor_destroy(metadata);
+                       return setting_file_basename(path);
                }
        }
+       else
+       {
+               return setting_file_basename(path);
+       }
+}
+
+static void setting_profile_ug_cb_resize(void *data, Evas *e,
+                                        Evas_Object *obj, void *event_info)
+{
+       ret_if(data == NULL);
+
+       SettingProfileUG *ad = (SettingProfileUG *) data;
+       setting_view_update(&setting_view_profile_sound_main, ad);
+
 }
 
-#if DISABLED_CODE
 static char* __gl_sound_slider_text_get(void *data, Evas_Object *obj, const char *part)
 {
        retv_if(data == NULL, NULL);
@@ -112,11 +156,19 @@ static char* __gl_sound_slider_text_get(void *data, Evas_Object *obj, const char
        else
                return NULL;
 }
-#endif
+
 static Evas_Object* __gl_sound_slider_content_get(void *data, Evas_Object *obj, const char *part)
 {
+       SETTING_TRACE_BEGIN;
        //appcore_measure_start();
        retv_if(data == NULL, NULL);
+
+       if(safeStrCmp(part, "elm.icon"))
+       {
+               SETTING_TRACE("EDC part [%s]", part);
+               return NULL;
+       }
+
        Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data*)data;
        Evas_Object *slider = setting_create_slider(obj, item_data->evas,
                                                item_data->l_swallow_path,
@@ -143,14 +195,14 @@ static Evas_Object* __gl_sound_slider_content_get(void *data, Evas_Object *obj,
 
        SettingProfileUG *ad = (SettingProfileUG*)item_data->userdata;
 
-       if((item_data->belongs_to == SETTING_VOL_SOUND_GROUP)
-                       && (ad->data_sound)
-                       && (ad->data_sound->chk_status == FALSE))
-               setting_disable_genlist_item(item_data->item);
-       else if((item_data->belongs_to == SETTING_VOL_VIBRATION_GROUP)
-                       && (ad->data_vibration)
-                       && (ad->data_vibration->chk_status == FALSE))
-               setting_disable_genlist_item(item_data->item);
+       int sound_value = 0;
+       vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_value);
+
+       if(item_data->belongs_to == SETTING_VOL_SOUND_GROUP && !sound_value)
+       {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_object_disabled_set(item_data->eo_check, EINA_TRUE);
+       }
 
        return slider;
 }
@@ -186,6 +238,176 @@ static void __gl_sound_slider_del(void *data, Evas_Object *obj)
        return;
 }
 
+/* ***************************************************
+ *
+ *general func
+ *
+ ***************************************************/
+#define SETTING_DEFAULT_FOLDER_PATH    "/opt/usr/share/settings/" //resolve P130805-7070
+
+int setting_profile_check_file_exist(void *data, const char *file_path)
+{
+       retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+       retv_if(file_path == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+
+       //resolve P130805-7070
+       if (0 == safeStrNCmp(file_path, SETTING_DEFAULT_FOLDER_PATH,safeStrLen(SETTING_DEFAULT_FOLDER_PATH))) {
+               SETTING_TRACE("Default file[%s]!", file_path);
+               return SETTING_RETURN_SUCCESS;
+       }
+
+       if (!ecore_file_exists(file_path)) {
+               if(safeStrCmp(file_path, "silent") == 0)
+               {
+                       SETTING_TRACE("%s", file_path);
+                       return SETTING_RETURN_SUCCESS;
+               }
+               SETTING_TRACE_ERROR("Cannot find the ringtone file[%s]!", file_path);
+               return SETTING_RETURN_FAIL;
+       }
+
+       int mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
+       vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_status);
+       if (VCONFKEY_SYSMAN_MMC_MOUNTED != mmc_status)
+       {
+               if (!safeStrNCmp(SETTING_PROFILE_MMC_PATH, file_path, safeStrLen(SETTING_PROFILE_MMC_PATH)))
+               {
+                       return SETTING_RETURN_FAIL;
+               }
+       }
+       return SETTING_RETURN_SUCCESS;
+}
+
+static void __enable_sound_menu(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       SettingProfileUG *ad = data;
+
+       appcore_measure_start();
+
+       ad->sound_on = TRUE;
+
+       if(!ad->volume_popup)
+       {
+               SETTING_TRACE("Volume popup is not displayed now");
+               return;
+       }
+
+       if(ad->data_sound_when_ring && ad->data_sound_when_ring->item)
+       {
+               elm_object_item_disabled_set(ad->data_sound_when_ring->item, EINA_FALSE);
+       }
+       if(ad->data_noti_volume && ad->data_noti_volume->item && ad->data_noti_volume->eo_check)
+       {
+               int mm_value = 0;
+               int ret =  sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value);
+               SETTING_TRACE("ret:%d", ret);
+               ad->data_noti_volume->chk_status = mm_value;
+               elm_slider_value_set(ad->data_noti_volume->eo_check, ad->data_noti_volume->chk_status);
+               elm_object_item_disabled_set(ad->data_noti_volume->item, EINA_FALSE);
+               elm_object_disabled_set(ad->data_noti_volume->eo_check, EINA_FALSE);
+
+#if 1
+               /* Change notification slider's icon as normal style */
+               setting_profile_update_slider_icon(ad->data_noti_volume, SND_SLIDER_NOTI);
+#endif
+       }
+       if(ad->data_touch_volume && ad->data_touch_volume->item && ad->data_touch_volume->eo_check)
+       {
+               int mm_value = 0;
+               int ret =  sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value);
+               SETTING_TRACE("ret:%d", ret);
+               ad->data_touch_volume->chk_status = mm_value;
+               elm_slider_value_set(ad->data_touch_volume->eo_check, ad->data_touch_volume->chk_status);
+               elm_object_item_disabled_set(ad->data_touch_volume->item, EINA_FALSE);
+               elm_object_disabled_set(ad->data_touch_volume->eo_check, EINA_FALSE);
+
+               setting_profile_update_slider_icon(ad->data_touch_volume, SND_SLIDER_SYSTEM);
+       }
+       if(ad->data_call_volume && ad->data_call_volume->eo_check)
+       {
+               int mm_value = 0;
+               int ret =  sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value);
+               SETTING_TRACE("ret:%d", ret);
+               if(mm_value > 0)
+               {
+                       ad->data_call_volume->chk_status = mm_value;
+                       elm_slider_value_set(ad->data_call_volume->eo_check, ad->data_call_volume->chk_status);
+                       SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
+               }
+               else
+               {
+                       sound_manager_set_volume(SOUND_TYPE_RINGTONE, 1);
+               }
+       }
+       SETTING_TRACE_DEBUG("[TIME] enable_sound_menu : %d msec ", appcore_measure_time());
+}
+
+static void __disable_sound_menu(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       SettingProfileUG *ad = data;
+
+       appcore_measure_start();
+
+       ad->sound_on = FALSE;
+
+       if(!ad->volume_popup)
+       {
+               SETTING_TRACE("Volume popup is not displayed now");
+               return;
+       }
+
+       __close_player(ad, SETTING_VOL_TYPE_NOTIFICATION);
+       __close_player(ad, SETTING_VOL_TYPE_MEDIA);
+
+       if(ad->mp_ringtone)
+       {
+               SETTING_TRACE_DEBUG("player_set_mute");
+               player_set_mute(*(ad->mp_ringtone), 1);
+       }
+
+       //ecore_idler_add(setting_profile_close_all_mm_players, ad);
+
+       SETTING_TRACE_DEBUG("[TIME] close players : %d msec ", appcore_measure_time());
+       appcore_measure_start();
+
+       if(ad->data_sound_when_ring && ad->data_sound_when_ring->item)
+       {
+               elm_object_item_disabled_set(ad->data_sound_when_ring->item, EINA_TRUE);
+       }
+       if(ad->data_noti_volume && ad->data_noti_volume->item && ad->data_noti_volume->eo_check)
+       {
+               ad->data_noti_volume->chk_status = 0;
+               elm_slider_value_set(ad->data_noti_volume->eo_check, ad->data_noti_volume->chk_status);
+               elm_object_item_disabled_set(ad->data_noti_volume->item, EINA_TRUE);
+               elm_object_disabled_set(ad->data_noti_volume->eo_check, EINA_TRUE);
+
+               /* Change notification slider's icon as mute style */
+               setting_profile_update_slider_icon(ad->data_noti_volume, SND_SLIDER_NOTI);
+       }
+       if(ad->data_touch_volume && ad->data_touch_volume->item && ad->data_touch_volume->eo_check)
+       {
+               ad->data_touch_volume->chk_status = 0;
+               elm_slider_value_set(ad->data_touch_volume->eo_check, ad->data_touch_volume->chk_status);
+               elm_object_item_disabled_set(ad->data_touch_volume->item, EINA_TRUE);
+               elm_object_disabled_set(ad->data_touch_volume->eo_check, EINA_TRUE);
+
+               /* Change system slider's icon as mute style */
+               setting_profile_update_slider_icon(ad->data_touch_volume, SND_SLIDER_SYSTEM);
+       }
+       if(ad->data_call_volume && ad->data_call_volume->eo_check)
+       {
+               ad->data_call_volume->chk_status = 0;
+               elm_slider_value_set(ad->data_call_volume->eo_check, ad->data_call_volume->chk_status);
+               SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
+       }
+
+       SETTING_TRACE_DEBUG("[TIME] disable_sound_menu : %d msec ", appcore_measure_time());
+}
+
 static void setting_profile_vconf_change_cb(keynode_t *key, void *data)
 {
        ret_if(data == NULL);
@@ -215,61 +437,107 @@ static void setting_profile_vconf_change_cb(keynode_t *key, void *data)
                                }
                        #endif
                        }
+
                        /* when remove mmc card, change default tone */
                        char *call_tone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
                        if(call_tone && !safeStrNCmp(SETTING_PROFILE_MMC_PATH, call_tone, safeStrLen(SETTING_PROFILE_MMC_PATH)))
                        {
-                               ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, SETTING_DEFAULT_CALL_TONE);
+                               if(isEmulBin()) {
+                                       ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, SETTING_DEFAULT_CALL_TONE_SDK);
+                               } else {
+                                       ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, SETTING_DEFAULT_CALL_TONE);
+                               }
                                if(ret < 0)
                                        SETTING_TRACE_DEBUG("failed to set vconf");
                        }
+                       FREE(call_tone);
                }
        }
        else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_SOUND_STATUS_BOOL)) {
                status = vconf_keynode_get_bool(key);
                SETTING_TRACE_DEBUG("sound status is changed. %d", status);
-               elm_check_state_set(ad->data_sound->eo_check, status);
                if(status)
                {
-                       setting_enable_genlist_item(ad->data_call_volume->item);
-                       setting_enable_genlist_item(ad->data_noti_volume->item);
-                       setting_enable_genlist_item(ad->data_media_volume->item);
-                       setting_enable_genlist_item(ad->data_touch_volume->item);
+                       __enable_sound_menu(ad);
                }
                else
                {
-                       setting_disable_genlist_item(ad->data_call_volume->item);
-                       setting_disable_genlist_item(ad->data_noti_volume->item);
-                       setting_disable_genlist_item(ad->data_media_volume->item);
-                       setting_disable_genlist_item(ad->data_touch_volume->item);
+                       __disable_sound_menu(ad);
                }
        }
        else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL)) {
                status = vconf_keynode_get_bool(key);
                SETTING_TRACE_DEBUG("vibration status is changed. %d", status);
-               elm_check_state_set(ad->data_vibration->eo_check, status);
                if(status)
                {
-                       setting_enable_genlist_item(ad->data_vib_volume->item);
-                       setting_enable_genlist_item(ad->data_touch_vib->item);
+                       ad->vibration_on = TRUE;
+                       PLAY_FEEDBACK(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_VIBRATION_ON)
                }
                else
                {
-                       setting_disable_genlist_item(ad->data_vib_volume->item);
-                       setting_disable_genlist_item(ad->data_touch_vib->item);
+                       ad->vibration_on = FALSE;
+               }
+       }
+       else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL)) {
+               status = vconf_keynode_get_bool(key);
+               if(ad->data_sound_when_ring && ad->data_sound_when_ring->eo_check)
+               {
+                       if(status != ad->data_sound_when_ring->chk_status)
+                       {
+                               ad->data_sound_when_ring->chk_status = status;
+                               elm_check_state_set(ad->data_sound_when_ring->eo_check, ad->data_sound_when_ring->chk_status);
+                       }
+               }
+       }
+       else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL)) {
+               status = vconf_keynode_get_bool(key);
+               if(ad->data_button_sounds && ad->data_button_sounds->eo_check)
+               {
+                       if(status != ad->data_button_sounds->chk_status)
+                       {
+                               ad->data_button_sounds->chk_status = status;
+                               elm_check_state_set(ad->data_button_sounds->eo_check, ad->data_button_sounds->chk_status);
+                       }
+               }
+       }
+       else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL)) {
+               status = vconf_keynode_get_bool(key);
+               if(ad->data_touch_sounds && ad->data_touch_sounds->eo_check)
+               {
+                       if(status != ad->data_touch_sounds->chk_status)
+                       {
+                               ad->data_touch_sounds->chk_status = status;
+                               elm_check_state_set(ad->data_touch_sounds->eo_check, ad->data_touch_sounds->chk_status);
+                       }
+               }
+       }
+       else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_SOUND_LOCK_BOOL)) {
+               status = vconf_keynode_get_bool(key);
+               if(ad->data_lock_sound && ad->data_lock_sound->eo_check)
+               {
+                       if(status != ad->data_lock_sound->chk_status)
+                       {
+                               ad->data_lock_sound->chk_status = status;
+                               elm_check_state_set(ad->data_lock_sound->eo_check, ad->data_lock_sound->chk_status);
+                       }
                }
        }
        else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR)) {
                pa_ringtone = (char *)g_strdup(vconf_keynode_get_str(key));
                if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
                {
-                       G_FREE(pa_ringtone);
-                       pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
+                       if(isEmulBin()) {
+                               G_FREE(pa_ringtone);
+                               pa_ringtone = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE_SDK);
+                       } else {
+                               G_FREE(pa_ringtone);
+                               pa_ringtone = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
+                       }
                        ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
                        if(ret < 0)
                                SETTING_TRACE_DEBUG("failed to set vconf");
                }
-               sub_desc = setting_file_basename(pa_ringtone);
+               sub_desc = setting_media_basename(pa_ringtone);
                if(ad->data_call_alert_tone)
                {
                        ad->data_call_alert_tone->sub_desc = (char*)g_strdup(sub_desc);
@@ -288,7 +556,7 @@ static void setting_profile_vconf_change_cb(keynode_t *key, void *data)
                        if(ret < 0)
                                SETTING_TRACE_DEBUG("failed to set vconf");
                }
-               sub_desc = setting_file_basename(pa_ringtone);
+               sub_desc = setting_media_basename(pa_ringtone);
                if(ad->data_msg_alert_tone)
                {
                        ad->data_msg_alert_tone->sub_desc = (char*)g_strdup(sub_desc);
@@ -306,34 +574,6 @@ static void setting_profile_vconf_change_cb(keynode_t *key, void *data)
                        elm_genlist_item_update(ad->data_msg_alert_repeat->item);
                }
        }
-       else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR)) {
-               pa_ringtone = (char *)g_strdup(vconf_keynode_get_str(key));
-               if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
-               {
-                       G_FREE(pa_ringtone);
-                       pa_ringtone = (char *)g_strdup(SETTING_DEFAULT_EMAIL_TONE);
-                       ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, pa_ringtone);
-                       if(ret < 0)
-                               SETTING_TRACE_DEBUG("failed to set vconf");
-               }
-               sub_desc = setting_file_basename(pa_ringtone);
-               if(ad->data_email_alert_tone)
-               {
-                       ad->data_email_alert_tone->sub_desc = (char*)g_strdup(sub_desc);
-                       elm_genlist_item_update(ad->data_email_alert_tone->item);
-               }
-               G_FREE(pa_ringtone);
-               G_FREE(sub_desc);
-       }
-       else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT)) {
-               status = vconf_keynode_get_int(key);
-
-               if(status >= 0 && ad->data_email_alert_repeat)
-               {
-                       ad->data_email_alert_repeat->sub_desc = (char*)g_strdup(_(repeat_type[status]));
-                       elm_genlist_item_update(ad->data_email_alert_repeat->item);
-               }
-       }
 }
 
 int setting_profile_listen_vconf_change(void *data)
@@ -357,6 +597,25 @@ int setting_profile_listen_vconf_change(void *data)
        setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
                                        (char *)VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, ret);
 
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL,
+                                                                       setting_profile_vconf_change_cb, data);
+       setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
+                                       (char *)VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, ret);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL,
+                                                                       setting_profile_vconf_change_cb, data);
+       setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
+                                       (char *)VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL, ret);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL,
+                                                                       setting_profile_vconf_change_cb, data);
+       setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
+                                       (char *)VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, ret);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL,
+                                                                       setting_profile_vconf_change_cb, data);
+       setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
+                                       (char *)VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, ret);
        /* add ringtone tab's vconfkeys */
        // incoming call ringtone.
        ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR,
@@ -373,16 +632,6 @@ int setting_profile_listen_vconf_change(void *data)
                                                                        setting_profile_vconf_change_cb, data);
        setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
                                        (char *)VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, ret);
-       // email alert tone.
-       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR,
-                                                                       setting_profile_vconf_change_cb, data);
-       setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
-                                       (char *)VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ret);
-       // email_alert_repitition
-       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
-                                                                       setting_profile_vconf_change_cb, data);
-       setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)",
-                                       (char *)VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT, ret);
 
        return 0;
 }
@@ -397,20 +646,372 @@ int setting_profile_unlisten_vconf_change(void *data)
        (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL,
                                                                setting_profile_vconf_change_cb);
 
+       (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL,
+                                                                       setting_profile_vconf_change_cb);
+       (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL,
+                                                                       setting_profile_vconf_change_cb);
+       (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL,
+                                                                       setting_profile_vconf_change_cb);
+       (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL,
+                                                                       setting_profile_vconf_change_cb);
+
        (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR,
                                                                        setting_profile_vconf_change_cb);
        (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR,
                                                                        setting_profile_vconf_change_cb);
        (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT,
                                                                        setting_profile_vconf_change_cb);
-       (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR,
-                                                                       setting_profile_vconf_change_cb);
-       (void)vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
-                                                                       setting_profile_vconf_change_cb);
 
        return 0;
 }
 
+static Eina_Bool __volume_up_timer_cb(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(!data, EINA_FALSE);
+       SettingProfileUG *ad = (SettingProfileUG*)data;
+
+       if(ad->is_pressing == FALSE)
+       {
+               ad->updown_timer = NULL;
+               return EINA_FALSE;
+       }
+
+       sound_type_e sound_type = 0;
+       int volume = 0;
+       sound_manager_get_current_sound_type(&sound_type);
+       if(sound_type == SOUND_TYPE_MEDIA)
+       {
+               int ret =  sound_manager_get_volume(sound_type, &volume);
+               SETTING_TRACE("ret:%d", ret);
+               if(volume < 15)
+               {
+                       sound_manager_set_volume(sound_type, ++volume);
+                       if(ad->data_media_volume && ad->data_media_volume->eo_check)
+                       {
+                               ad->data_media_volume->chk_status = volume;
+                               elm_slider_value_set(ad->data_media_volume->eo_check, volume);
+                       }
+               }
+       }
+       else
+       {
+               int ret =  sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
+               SETTING_TRACE("ret:%d", ret);
+               if(volume < 15)
+               {
+                       sound_manager_set_volume(SOUND_TYPE_RINGTONE, ++volume);
+                       if(ad->data_call_volume && ad->data_call_volume->eo_check)
+                       {
+                               ad->data_call_volume->chk_status = volume;
+                               elm_slider_value_set(ad->data_call_volume->eo_check, volume);
+                               SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
+                       }
+               }
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __volume_down_timer_cb(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(!data, EINA_FALSE);
+       SettingProfileUG *ad = (SettingProfileUG*)data;
+
+       if(ad->is_pressing == FALSE)
+       {
+               ad->updown_timer = NULL;
+               return EINA_FALSE;
+       }
+
+       sound_type_e sound_type = 0;
+       int volume = 0;
+       sound_manager_get_current_sound_type(&sound_type);
+       if(sound_type == SOUND_TYPE_MEDIA)
+       {
+               int ret =  sound_manager_get_volume(sound_type, &volume);
+               SETTING_TRACE("ret:%d", ret);
+               if(volume > 0)
+               {
+                       sound_manager_set_volume(sound_type, --volume);
+                       if(ad->data_media_volume && ad->data_media_volume->eo_check)
+                       {
+                               ad->data_media_volume->chk_status = volume;
+                               elm_slider_value_set(ad->data_media_volume->eo_check, volume);
+                       }
+               }
+       }
+       else
+       {
+               int ret =  sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
+               SETTING_TRACE("ret:%d", ret);
+               if(volume > 0)
+               {
+                       sound_manager_set_volume(SOUND_TYPE_RINGTONE, --volume);
+                       if(volume == 0)
+                       {
+                               /* change to Vibration mode */
+                               vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
+                               vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
+                               PLAY_FEEDBACK(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_VIBRATION_ON)
+
+                               ad->data_call_volume->chk_status = volume;
+                               setting_profile_update_slider_icon(ad->data_call_volume, SND_SLIDER_CALL);
+                       }
+                       if(ad->data_call_volume && ad->data_call_volume->eo_check)
+                       {
+                               ad->data_call_volume->chk_status = volume;
+                               elm_slider_value_set(ad->data_call_volume->eo_check, volume);
+                               SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
+                       }
+               }
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __volume_key_up_cb(void *data, int type, void *event)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(!data || !event, EINA_TRUE);
+       SettingProfileUG *ad = (SettingProfileUG *)data;
+
+       Ecore_Event_Key *ev = event;
+       char *key = (char*)ev->key;
+       if(!key)
+               return EINA_TRUE;
+
+       if(!safeStrCmp(key, KEY_VOLUMEUP) || !safeStrCmp(key, KEY_VOLUMEDOWN))
+       {
+               ad->is_pressing = FALSE;
+               if(ad->updown_timer)
+               {
+                       ecore_timer_del(ad->updown_timer);
+                       ad->updown_timer = NULL;
+               }
+       }
+       return EINA_TRUE;
+}
+
+static Eina_Bool __volume_key_down_cb(void *data, int type, void *event)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(!data || !event, EINA_TRUE);
+       SettingProfileUG *ad = (SettingProfileUG *)data;
+
+       Ecore_Event_Key *ev = event;
+       char *key = (char*)ev->key;
+       if(!key)
+               return EINA_TRUE;
+
+       // get current sound type
+       sound_type_e sound_type;
+       int volume = 0;
+
+       if(!safeStrCmp(key, KEY_VOLUMEUP))
+       {
+               if (ad->view_type != SETTING_PROF_VIEW_VOL) return EINA_TRUE;
+
+               ad->is_pressing = TRUE;
+
+               sound_manager_get_current_sound_type(&sound_type);
+               if(sound_type == SOUND_TYPE_MEDIA)
+               {
+                       int ret =  sound_manager_get_volume(sound_type, &volume);
+                       SETTING_TRACE("ret:%d", ret);
+                       if(volume < 15)
+                       {
+                               sound_manager_set_volume(sound_type, ++volume);
+                               if(ad->data_media_volume && ad->data_media_volume->eo_check)
+                               {
+                                       ad->data_media_volume->chk_status = volume;
+                                       elm_slider_value_set(ad->data_media_volume->eo_check, volume);
+                               }
+                       }
+               }
+               else
+               {
+                       int ret =  sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
+                       SETTING_TRACE("ret:%d", ret);
+                       if(volume < 15)
+                       {
+                               sound_manager_set_volume(SOUND_TYPE_RINGTONE, ++volume);
+                               if(volume == 1)
+                               {
+                                       vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
+                                       vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
+                                       if(ad->data_call_volume && ad->data_call_volume->eo_check)
+                                       {
+                                               Evas_Object *cur_icon = elm_object_content_unset(ad->data_call_volume->eo_check);
+                                               if(cur_icon)
+                                               {
+                                                       evas_object_del(cur_icon);
+                                                       cur_icon = NULL;
+                                               }
+                                               Evas_Object *icon = elm_icon_add(ad->data_call_volume->eo_check);
+                                               elm_image_file_set(icon, setting_profile_get_slider_icon(SND_SLIDER_CALL, volume), NULL);
+                                               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                                               elm_object_content_set(ad->data_call_volume->eo_check, icon);
+                                               evas_object_show(icon);
+                                       }
+                               }
+                               if(ad->data_call_volume && ad->data_call_volume->eo_check)
+                               {
+                                       ad->data_call_volume->chk_status = volume;
+                                       elm_slider_value_set(ad->data_call_volume->eo_check, volume);
+                                       SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
+                               }
+                       }
+
+                       if(ad->mp_ringtone == NULL)
+                       {
+                               setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
+                               if(volume > 0)
+                               {
+                                       char    *pa_tone_path = NULL;
+                                       pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
+                                       if(pa_tone_path == NULL)
+                                       {
+                                               if(isEmulBin())
+                                                       pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE_SDK);
+                                               else
+                                                       pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
+
+                                               if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0) {
+                                                       FREE(pa_tone_path);
+                                                       return EINA_TRUE;
+                                               }
+                                       }
+                                       setting_profile_play_sound_origin(&(ad->mp_ringtone), ad, NULL,
+                                                                                               pa_tone_path,
+                                                                                               volume,
+                                                                                               SOUND_TYPE_RINGTONE);
+                               }
+                       }
+                       else
+                       {
+                               player_state_e state;
+                               player_get_state(*(ad->mp_ringtone), &state);
+                               SETTING_TRACE("ringtone player status : %d", state);
+                               if(state == PLAYER_STATE_PAUSED)
+                               {
+                                       player_start(*(ad->mp_ringtone));
+                               }
+                       }
+               }
+               ad->updown_timer = ecore_timer_add(0.5, __volume_up_timer_cb, ad);
+       }
+       else if(!safeStrCmp(key, KEY_VOLUMEDOWN))
+       {
+               if (ad->view_type != SETTING_PROF_VIEW_VOL) return EINA_TRUE;
+               ad->is_pressing = TRUE;
+               sound_manager_get_current_sound_type(&sound_type);
+               if(sound_type == SOUND_TYPE_MEDIA)
+               {
+                       int ret =  sound_manager_get_volume(sound_type, &volume);
+                       SETTING_TRACE("ret:%d", ret);
+                       if(volume > 0)
+                       {
+                               sound_manager_set_volume(sound_type, --volume);
+                               if(ad->data_media_volume && ad->data_media_volume->eo_check)
+                               {
+                                       ad->data_media_volume->chk_status = volume;
+                                       elm_slider_value_set(ad->data_media_volume->eo_check, volume);
+                               }
+                       }
+               }
+               else
+               {
+                       int ret =  sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
+                       SETTING_TRACE("ret:%d", ret);
+                       if(volume > 0)
+                       {
+                               sound_manager_set_volume(SOUND_TYPE_RINGTONE, --volume);
+                               if(volume == 0)
+                               {
+                                       /* change to Vibration mode */
+                                       vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
+                                       vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
+
+                                       PLAY_FEEDBACK(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_VIBRATION_ON)
+
+                                       if(ad->data_call_volume && ad->data_call_volume->eo_check)
+                                       {
+                                               Evas_Object *cur_icon = elm_object_content_unset(ad->data_call_volume->eo_check);
+                                               if(cur_icon)
+                                               {
+                                                       evas_object_del(cur_icon);
+                                                       cur_icon = NULL;
+                                               }
+                                               Evas_Object *icon = elm_icon_add(ad->data_call_volume->eo_check);
+                                               elm_image_file_set(icon, setting_profile_get_slider_icon(SND_SLIDER_CALL, volume), NULL);
+                                               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                                               elm_object_content_set(ad->data_call_volume->eo_check, icon);
+                                               evas_object_show(icon);
+                                       }
+                               }
+                               if(ad->data_call_volume && ad->data_call_volume->eo_check)
+                               {
+                                       ad->data_call_volume->chk_status = volume;
+                                       elm_slider_value_set(ad->data_call_volume->eo_check, volume);
+                                       SETTING_TRACE("ad->data_call_volume->chk_status : %d", ad->data_call_volume->chk_status);
+                               }
+                       }
+                       if(ad->mp_ringtone == NULL)
+                       {
+                               setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
+                               if(volume > 0)
+                               {
+                                       char    *pa_tone_path = NULL;
+                                       pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
+                                       if(pa_tone_path == NULL)
+                                       {
+                                               if(isEmulBin())
+                                                       pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE_SDK);
+                                               else
+                                                       pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
+
+                                               if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0) {
+                                                       FREE(pa_tone_path);
+                                                       return EINA_TRUE;
+                                               }
+                                       }
+                                       setting_profile_play_sound_origin(&(ad->mp_ringtone), ad, NULL,
+                                                                                               pa_tone_path,
+                                                                                               volume,
+                                                                                               SOUND_TYPE_RINGTONE);
+                               }
+                       }
+                       else
+                       {
+                               player_state_e state;
+                               player_get_state(*(ad->mp_ringtone), &state);
+                               SETTING_TRACE("ringtone player status : %d", state);
+                               if(state == PLAYER_STATE_PAUSED)
+                               {
+                                       player_start(*(ad->mp_ringtone));
+                               }
+                       }
+               }
+               ad->updown_timer = ecore_timer_add(0.5, __volume_down_timer_cb, ad);
+       }
+       else if(!safeStrCmp(key, KEY_MENU)){
+               SETTING_TRACE("KEY_MENU CLICK.");
+               if(NULL != ad->vib_player_btn)
+               {
+                       SETTING_TRACE_DEBUG("ad->vib_player_btn is not NULL.");
+                       _vib_more_key_change_play_btn_icon(ad);
+               }else if(ad->personal_vib_playing_flag == TRUE){
+                       SETTING_TRACE("personal improvised vib is playing...");
+                       setting_profile_sound_personal_vib_stop_by_homekey_press(ad);
+               }
+       }
+
+       return EINA_TRUE;
+}
+
+#if 0 
 void __setting_profile_ug_key_grab(SettingProfileUG *ad)
 {
        SETTING_TRACE_BEGIN;
@@ -422,19 +1023,45 @@ void __setting_profile_ug_key_grab(SettingProfileUG *ad)
        if(ad == NULL)
                return;
 
+       /* To prevent conflict with volume app */
+       vconf_set_int(VCONFKEY_STARTER_USE_VOLUME_KEY, 2);
+
        disp = ecore_x_display_get();
-       xwin = elm_win_xwindow_get((Evas_Object*)ug_get_window());
+       xwin = elm_win_xwindow_get(ad->win_get);
 
        ret = utilx_grab_key(disp, xwin, KEY_VOLUMEUP, TOP_POSITION_GRAB);
        if(ret)
-               return;
+       {
+               SETTING_TRACE_DEBUG("KEY_VOLUMEUP grab failed");
+       }
        ret = utilx_grab_key(disp, xwin, KEY_VOLUMEDOWN, TOP_POSITION_GRAB);
        if(ret)
-               return;
+       {
+               SETTING_TRACE_DEBUG("KEY_VOLUMEDOWN grab failed");
+       }
+       if(ad->keydown_handler)
+       {
+               ecore_event_handler_del(ad->keydown_handler);
+               ad->keydown_handler = NULL;
+       }
+       if(ad->keyup_handler)
+       {
+               ecore_event_handler_del(ad->keyup_handler);
+               ad->keyup_handler = NULL;
+       }
+       ad->keydown_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __volume_key_down_cb, ad);
+       if(!ad->keydown_handler)
+               SETTING_TRACE_DEBUG("ecore_event_handler_add() failed");
+
+       ad->keyup_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, __volume_key_up_cb, ad);
+       if(!ad->keyup_handler)
+               SETTING_TRACE_DEBUG("ecore_event_handler_add() failed");
 
-       ad->event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, NULL, NULL);
        SETTING_TRACE_END;
 }
+#endif
+
+#if 0
 void __setting_profile_ug_key_ungrab(SettingProfileUG *ad)
 {
        SETTING_TRACE_BEGIN;
@@ -446,21 +1073,67 @@ void __setting_profile_ug_key_ungrab(SettingProfileUG *ad)
        if(ad == NULL)
                return;
 
+       /* To prevent conflict with volume app */
+       vconf_set_int(VCONFKEY_STARTER_USE_VOLUME_KEY, 0);
+
        disp = ecore_x_display_get();
-       xwin = elm_win_xwindow_get((Evas_Object*)ug_get_window());
+       xwin = elm_win_xwindow_get(ad->win_get);
 
        ret = utilx_ungrab_key(disp, xwin, KEY_VOLUMEUP);
        if(ret)
-               return;
+       {
+               SETTING_TRACE_DEBUG("KEY_VOLUMEUP ungrab failed");
+       }
        ret = utilx_ungrab_key(disp, xwin, KEY_VOLUMEDOWN);
        if(ret)
-               return;
+       {
+               SETTING_TRACE_DEBUG("KEY_VOLUMEDOWN ungrab failed");
+       }
 
-       ecore_event_handler_del(ad->event_handler);
+       if(ad->updown_timer)
+       {
+               ecore_timer_del(ad->updown_timer);
+               ad->updown_timer = NULL;
+       }
+       if(ad->keydown_handler)
+       {
+               ecore_event_handler_del(ad->keydown_handler);
+               ad->keydown_handler = NULL;
+       }
+       if(ad->keyup_handler)
+       {
+               ecore_event_handler_del(ad->keyup_handler);
+               ad->keyup_handler = NULL;
+       }
 }
+#endif
 
+#if 0
+static void __sound_manager_active_device_changed_cb(sound_device_in_e in, sound_device_out_e out, void *user_data)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!user_data);
+       SettingProfileUG *ad = (SettingProfileUG *)user_data;
+
+       if(!ad->volume_popup)
+               return;
+
+       //Update media volume for Earjack
+       if(ad->data_media_volume && ad->data_media_volume->eo_check)
+       {
+               int media_volume = 0;
+               sound_manager_get_volume(SOUND_TYPE_MEDIA, &media_volume);
+               SETTING_TRACE("media volume : %d", media_volume);
+               if(media_volume != ad->data_media_volume->chk_status)
+               {
+                       ad->data_media_volume->chk_status = media_volume;
+                       elm_slider_value_set(ad->data_media_volume->eo_check, ad->data_media_volume->chk_status);
+               }
+       }
+}
+#endif
 static void *setting_profile_ug_on_create(ui_gadget_h ug,
-                                         enum ug_mode mode, service_h service,
+                                         enum ug_mode mode, app_control_h service,
                                          void *priv)
 {
        SETTING_TRACE_BEGIN;
@@ -479,35 +1152,59 @@ static void *setting_profile_ug_on_create(ui_gadget_h ug,
 
        setting_retvm_if(profileUG->win_main_layout == NULL, NULL, "cannot get main window ");
 
+       //elm_win_wm_rotation_preferred_rotation_set(profileUG->win_get, 0);
+#if 0
        //At present, there are only 4 types supported:RINGTONE,NOTIFICATION,SYSTEM,MEDIA
+       // To apply correct volume value to slider if volume can be changed to other modules.
        sound_manager_set_volume_changed_cb(__sound_volume_changed_cb, profileUG);
+#endif
+#if 0
+       sound_manager_set_active_device_changed_cb(__sound_manager_active_device_changed_cb, profileUG);
+#endif
+       bindtextdomain(SETTING_PACKAGE, SETTING_LOCALEDIR);
 
-       setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
+       setting_create_Gendial_itc("1line", &(profileUG->itc_1text_1icon));
+       setting_create_Gendial_itc("groupindex", &(profileUG->itc_group_item));
+       setting_create_Gendial_itc("2line.top", &(profileUG->itc_2text_2));
+
+       profileUG->itc_layout.item_style = "slider.main";
+       profileUG->itc_layout.func.text_get = __gl_sound_slider_text_get;
+       profileUG->itc_layout.func.content_get = __gl_sound_slider_content_get;
+       profileUG->itc_layout.func.state_get = NULL;
+       profileUG->itc_layout.func.del = __gl_sound_slider_del;
+
+       setting_create_Gendial_itc("2line.top", &(profileUG->itc_2text_3_parent));
+       setting_create_Gendial_itc("1line", &(profileUG->itc_1icon_1text_sub));
+       setting_create_Gendial_itc("multiline_sub", &(profileUG->itc_bg_1icon));
 
        /* register view node table */
        setting_view_node_table_intialize();
        setting_view_node_table_register(&setting_view_profile_sound_main, NULL);
 
-       setting_create_Gendial_itc("dialogue/1text.1icon", &(profileUG->itc_1text_1icon));
-       setting_create_Gendial_itc("dialogue/title", &(profileUG->itc_group_item));
-       setting_create_Gendial_itc("dialogue/2text.3", &(profileUG->itc_2text_2));
-       profileUG->itc_layout.item_style = "dialogue/1icon";
-       profileUG->itc_layout.func.text_get = NULL; //__gl_sound_slider_text_get;
-       profileUG->itc_layout.func.content_get = __gl_sound_slider_content_get;
-       profileUG->itc_layout.func.state_get = NULL;
-       profileUG->itc_layout.func.del = __gl_sound_slider_del;
+       int value = -1;
+       vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &value);
+       if(value == 1)
+       {
+               profileUG->sound_on = TRUE;
+       }
+       else if(value == 0)
+       {
+               profileUG->sound_on = FALSE;
+       }
 
-       setting_create_Gendial_itc("dialogue/2text.3/expandable", &(profileUG->itc_2text_3_parent));
-       setting_create_Gendial_itc("dialogue/1text.1icon/expandable2", &(profileUG->itc_1icon_1text_sub));
-       setting_create_Gendial_itc("multiline/1text", &(profileUG->itc_bg_1icon));
+       vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &value);
+       if(value == 1)
+       {
+               profileUG->vibration_on = TRUE;
+       }
+       else if(value == 0)
+       {
+               profileUG->vibration_on = FALSE;
+       }
 
-       profileUG->itc_seperator.item_style = "dialogue/separator";
-       profileUG->itc_seperator.func.text_get = NULL;
-       profileUG->itc_seperator.func.content_get = NULL;
-       profileUG->itc_seperator.func.state_get = NULL;
-       profileUG->itc_seperator.func.del = NULL;
+       app_control_get_caller(service, &(profileUG->viewtype));
 
-       /*  creating a view. */
+       /* creating a view. */
        setting_view_node_set_cur_view(&setting_view_profile_sound_main);
        setting_view_create(&setting_view_profile_sound_main, (void *)profileUG);
 
@@ -520,64 +1217,154 @@ static void *setting_profile_ug_on_create(ui_gadget_h ug,
        return profileUG->ly_main;
 }
 
-static void setting_profile_ug_on_start(ui_gadget_h ug, service_h service, void *priv)
+static void setting_profile_ug_on_start(ui_gadget_h ug, app_control_h service, void *priv)
 {
+       SETTING_TRACE_BEGIN;
+       SettingProfileUG *ad = (SettingProfileUG *)priv;
+
+       /* To support 2nd depth search */
+#if 1
+       char* viewtype = NULL;
+       app_control_get_extra_data(service, "viewtype", &viewtype);
+
+       char* tab = NULL;
+       app_control_get_extra_data(service, "tab", &tab);
+
+       char* keyword = NULL;
+       app_control_get_extra_data(service, "keyword", &keyword);
+
+
+       SETTING_TRACE_DEBUG("----------------------------------------------");
+       SETTING_TRACE_DEBUG("SEARCH FUNCTION : viewtype (%s)", viewtype);
+       SETTING_TRACE_DEBUG("SEARCH FUNCTION : tab(%s)", tab);
+       SETTING_TRACE_DEBUG("SEARCH FUNCTION : keyword(%s)", keyword);
+       SETTING_TRACE_DEBUG("----------------------------------------------");
+#endif
+
+       if( keyword  && safeStrCmp(_(keyword), _("IDS_CST_MBODY_ADAPT_SOUND")) == 0)
+       {
+               SETTING_TRACE("FOUND - Adapt Sound");
+               //elm_toolbar_item_selected_set(ad->ctrl_item[SETTING_MAIN_VIEW_DEVICE], EINA_TRUE);
+               if (ad->data_adapt_sound &&ad->data_adapt_sound->item)
+                       elm_genlist_item_bring_in(ad->data_adapt_sound->item, ELM_GENLIST_ITEM_SCROLLTO_IN);
+       } else {
+               SETTING_TRACE("NOT FOUND - Adapt Sound");
+       }
+
+       if(tab && !safeStrCmp(tab, "second"))
+       {
+               elm_toolbar_item_selected_set(ad->ctrl_item[1], EINA_TRUE);
+       }
+
+       FREE(viewtype);
+       FREE(tab);
+       FREE(keyword);
+
+       SETTING_TRACE_END;
 }
 
-static void setting_profile_ug_on_pause(ui_gadget_h ug, service_h service, void *priv)
+static void setting_profile_ug_on_pause(ui_gadget_h ug, app_control_h service, void *priv)
 {
        ret_if(priv == NULL);
        SettingProfileUG *profileUG = (SettingProfileUG*)priv;
 
+       if(profileUG->no_play_popup)
+       {
+               evas_object_del(profileUG->no_play_popup);
+               profileUG->no_play_popup = NULL;
+       }
+
        /* if click home key, players have to be closed */
        setting_profile_close_all_mm_players(profileUG);
+
+       /* If sound ug is paused, others can use volume HW key popup (set 0) */
+       vconf_set_int(VCONFKEY_STARTER_USE_VOLUME_KEY, 0);
 }
 
-static void setting_profile_ug_on_resume(ui_gadget_h ug, service_h service, void *priv)
+void setting_profile_ug_update_volume_sliders(void *data)
 {
-       ret_if(priv == NULL);
-       SettingProfileUG *profileUG = (SettingProfileUG *)priv;
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       SettingProfileUG *profileUG = (SettingProfileUG *)data;
 
-       /* update path of tones */
-       char *pa_tone_path = NULL;
+       if(!profileUG->volume_popup)
+               return;
+       if(!profileUG->data_call_volume)
+               return;
+
+       if(profileUG->data_call_volume && profileUG->data_call_volume->eo_check)
+       {
+               int volume = 0;
+               sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
+               if(profileUG->data_call_volume->chk_status != volume)
+               {
+                       profileUG->data_call_volume->chk_status = volume;
+                       elm_slider_value_set(profileUG->data_call_volume->eo_check, profileUG->data_call_volume->chk_status);
+                       SETTING_TRACE("profileUG->data_call_volume->chk_status : %d", profileUG->data_call_volume->chk_status);
+
+                       setting_profile_update_slider_icon(profileUG->data_call_volume, SND_SLIDER_CALL);
+               }
+       }
+
+       if(profileUG->data_noti_volume && profileUG->data_noti_volume->eo_check && (profileUG->data_call_volume->chk_status > 0))
+       {
+               int volume = 0;
+               sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &volume);
+               if(profileUG->data_noti_volume->chk_status != volume)
+               {
+                       profileUG->data_noti_volume->chk_status = volume;
+                       elm_slider_value_set(profileUG->data_noti_volume->eo_check, profileUG->data_noti_volume->chk_status);
+
+                       setting_profile_update_slider_icon(profileUG->data_noti_volume, SND_SLIDER_NOTI);
+               }
+       }
 
-       if(profileUG->data_call_volume)
+       if(profileUG->data_media_volume && profileUG->data_media_volume->eo_check)
        {
-               int volume;
-               SETTING_TRACE_DEBUG("ringtone volume %x", profileUG->data_call_volume);
-               sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume); /* system */
-               SETTING_TRACE_DEBUG("get_volume is %d", volume);
-               elm_slider_value_set(profileUG->data_call_volume->eo_check, (double)volume);
-               SETTING_TRACE_DEBUG("update to new value %d", volume);
+               int volume = 0;
+               sound_manager_get_volume(SOUND_TYPE_MEDIA, &volume);
+               if(profileUG->data_media_volume->chk_status != volume)
+               {
+                       profileUG->data_media_volume->chk_status = volume;
+                       elm_slider_value_set(profileUG->data_media_volume->eo_check, profileUG->data_media_volume->chk_status);
+               }
        }
-       if(profileUG->data_noti_volume)
+
+       if(profileUG->data_touch_volume && profileUG->data_touch_volume->eo_check && (profileUG->data_call_volume->chk_status > 0))
        {
-               int volume;
-               SETTING_TRACE_DEBUG("noti volume %x", profileUG->data_noti_volume);
-               sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &volume);     /* system */
-               SETTING_TRACE_DEBUG("get_volume is %d", volume);
-               elm_slider_value_set(profileUG->data_noti_volume->eo_check, (double)volume);
-               SETTING_TRACE_DEBUG("update to new value %d", volume);
+               int volume = 0;
+               sound_manager_get_volume(SOUND_TYPE_SYSTEM, &volume);
+               if(profileUG->data_touch_volume->chk_status != volume)
+               {
+                       profileUG->data_touch_volume->chk_status = volume;
+                       elm_slider_value_set(profileUG->data_touch_volume->eo_check, profileUG->data_touch_volume->chk_status);
+
+                       setting_profile_update_slider_icon(profileUG->data_touch_volume, SND_SLIDER_SYSTEM);
+               }
        }
-       if(profileUG->data_media_volume)
+}
+
+static void setting_profile_ug_on_resume(ui_gadget_h ug, app_control_h service, void *priv)
+{
+       ret_if(priv == NULL);
+       SettingProfileUG *profileUG = (SettingProfileUG *)priv;
+
+       /* If current view is sound main, block volume app */
+       /* To prevent conflict with volume app */
+       if(profileUG->volume_popup)
        {
-               int volume;
-               SETTING_TRACE_DEBUG("media volume %x", profileUG->data_media_volume);
-               sound_manager_get_volume(SOUND_TYPE_MEDIA, &volume);    /* system */
-               SETTING_TRACE_DEBUG("get_volume is %d", volume);
-               elm_slider_value_set(profileUG->data_media_volume->eo_check, (double)volume);
-               SETTING_TRACE_DEBUG("update to new value %d", volume);
+               vconf_set_int(VCONFKEY_STARTER_USE_VOLUME_KEY, 2);
        }
-       if(profileUG->data_touch_volume)
+       else
        {
-               int volume;
-               SETTING_TRACE_DEBUG("system volume %x", profileUG->data_touch_volume);
-               sound_manager_get_volume(SOUND_TYPE_SYSTEM, &volume);   /* system */
-               SETTING_TRACE_DEBUG("get_volume is %d", volume);
-               elm_slider_value_set(profileUG->data_touch_volume->eo_check, (double)volume);
-               SETTING_TRACE_DEBUG("update to new value %d", volume);
+               vconf_set_int(VCONFKEY_STARTER_USE_VOLUME_KEY, 0);
        }
 
+       setting_profile_ug_update_volume_sliders(profileUG);
+
+       /* update path of tones */
+       char *pa_tone_path = NULL;
+
        /* 1. incoming call ringtone */
        if(profileUG->data_call_alert_tone)
        {
@@ -585,13 +1372,17 @@ static void setting_profile_ug_on_resume(ui_gadget_h ug, service_h service, void
                pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
                if((pa_tone_path == NULL) || (setting_profile_check_file_exist(profileUG, pa_tone_path) == SETTING_RETURN_FAIL))
                {
-                       pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
-                       if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0)
+                       if(isEmulBin())
+                               pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE_SDK);
+                       else
+                               pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
+                       if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0) {
+                               FREE(pa_tone_path);
                                return;
-                       profileUG->data_call_alert_tone->sub_desc = setting_file_basename(pa_tone_path);
+                       }
+                       profileUG->data_call_alert_tone->sub_desc = setting_media_basename(pa_tone_path);
                        elm_genlist_item_update(profileUG->data_call_alert_tone->item);
                }
-
                FREE(pa_tone_path);
        }
 
@@ -608,72 +1399,114 @@ static void setting_profile_ug_on_resume(ui_gadget_h ug, service_h service, void
                                return;
                        }
 
-                       profileUG->data_msg_alert_tone->sub_desc = setting_file_basename(pa_tone_path);
+                       profileUG->data_msg_alert_tone->sub_desc = setting_media_basename(pa_tone_path);
                        elm_genlist_item_update(profileUG->data_msg_alert_tone->item);
                }
-
                FREE(pa_tone_path);
-
        }
+       if(profileUG->is_dock_on){
+               //__setting_profile_sound_persional_vib_record_pause_play(profileUG, false);
 
-       /* 3. email ringtone */
-       if(profileUG->data_email_alert_tone)
-       {
-               SETTING_TRACE_DEBUG("change email_alert_tone %x", profileUG->data_email_alert_tone);
-               pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
-               if((pa_tone_path == NULL) || (setting_profile_check_file_exist(profileUG, pa_tone_path) == SETTING_RETURN_FAIL))
-               {
-                       pa_tone_path = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
-                       if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0) {
-                               FREE(pa_tone_path);
-                               return;
+               if(profileUG->curitem) {
+                       Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(profileUG->curitem);
+                       if (data_subItem) {
+                               data_subItem->isPlaying = EINA_FALSE;
+                       }
+                       Evas_Object *btn = elm_object_item_part_content_get(profileUG->curitem, "elm.icon.2");
+                       if (btn) {
+                               elm_object_item_part_content_unset(profileUG->curitem, "elm.icon.2");
+                               evas_object_hide(btn);
+                               evas_object_del(btn);
                        }
-                       profileUG->data_email_alert_tone->sub_desc = setting_file_basename(pa_tone_path);
-                       elm_genlist_item_update(profileUG->data_email_alert_tone->item);
+                       elm_genlist_item_update(profileUG->curitem);
                }
-
-               FREE(pa_tone_path);
-
        }
 }
 
-static void setting_profile_ug_on_destroy(ui_gadget_h ug, service_h service, void *priv)
+static void setting_profile_ug_on_destroy(ui_gadget_h ug, app_control_h service, void *priv)
 {
+       SETTING_TRACE_BEGIN;
        ret_if(priv == NULL);
 
        SettingProfileUG *profileUG = priv;
 
+       //elm_win_wm_rotation_preferred_rotation_set(profileUG->win_get, -1);
+
        setting_profile_unlisten_vconf_change(profileUG);
        evas_object_event_callback_del(profileUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_profile_ug_cb_resize); /* fix flash issue for gallery */
        profileUG->ug = ug;
-
-       //At present, there are only 4 types supported:RINGTONE,NOTIFICATION,SYSTEM,MEDIA
+#if 0
+       // cb should be unset.
        sound_manager_unset_volume_changed_cb();
+#endif
 
+       setting_profile_close_all_mm_players(profileUG);
 
-       int ret = haptic_close(profileUG->hnd_hpt);
-       if (ret != 0) {
-               SETTING_TRACE_DEBUG("%s*** [ERR] Failed haptic_deinitialize ***%s",
-                                               SETTING_FONT_RED, SETTING_FONT_BLACK);
+       if(profileUG->no_play_popup)
+       {
+               evas_object_del(profileUG->no_play_popup);
+               profileUG->no_play_popup = NULL;
+       }
+
+       char *data = NULL;
+
+       if(profileUG->updown_timer)
+       {
+               ecore_timer_del(profileUG->updown_timer);
+               profileUG->updown_timer = NULL;
+       }
+       if(profileUG->keydown_handler)
+       {
+               ecore_event_handler_del(profileUG->keydown_handler);
+               profileUG->keydown_handler = NULL;
+       }
+       if(profileUG->keyup_handler)
+       {
+               ecore_event_handler_del(profileUG->keyup_handler);
+               profileUG->keyup_handler = NULL;
        }
-       setting_profile_close_all_mm_players(profileUG);
+
+       //app_control_destroy(profileUG->source_svc);
+
+       FREE(profileUG->viewtype);
 
        /* it is the view manage strategy to invoke view's destory operation. */
        setting_view_destroy(&setting_view_profile_sound_main, profileUG);
+
        if (NULL != ug_get_layout(profileUG->ug)) {
                evas_object_hide((Evas_Object *) ug_get_layout(profileUG->ug));
                evas_object_del((Evas_Object *) ug_get_layout(profileUG->ug));
        }
+       SETTING_TRACE_END;
+}
+
+static void setting_profile_ug_on_message(ui_gadget_h ug, app_control_h msg,
+                                         app_control_h service, void *priv)
+{
+
 }
 
-static void setting_profile_ug_on_message(ui_gadget_h ug, service_h msg,
-                                         service_h service, void *priv)
+static void setting_profile_ug_update_title(void *data)
 {
+       SETTING_TRACE_BEGIN;
+       SettingProfileUG *ad = (SettingProfileUG *)data;
 
+       if(setting_view_profile_sound_main.is_create == TRUE)
+       {
+               int repeat_value = 0;
+               if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) == 0)
+               {
+                       if(ad->data_msg_alert_repeat && ad->data_msg_alert_repeat->item)
+                       {
+                               ad->data_msg_alert_repeat->sub_desc = (char*)g_strdup(_(repeat_type[repeat_value]));
+                               elm_genlist_item_update(ad->data_msg_alert_repeat->item);
+                       }
+               }
+       }
 }
 
 static void setting_profile_ug_on_event(ui_gadget_h ug,
-                                       enum ug_event event, service_h service, void *priv)
+                                       enum ug_event event, app_control_h service, void *priv)
 {
        SETTING_TRACE_BEGIN;
        SettingProfileUG *ad = (SettingProfileUG *)priv;
@@ -684,13 +1517,14 @@ static void setting_profile_ug_on_event(ui_gadget_h ug,
                case UG_EVENT_LOW_BATTERY:
                        break;
                case UG_EVENT_LANG_CHANGE:
+                       {
+                               SETTING_TRACE("laugnage changes");
+                       }
                        break;
                case UG_EVENT_ROTATE_PORTRAIT:
-                       break;
                case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
                        break;
                case UG_EVENT_ROTATE_LANDSCAPE:
-                       break;
                case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
                        break;
                case UG_EVENT_REGION_CHANGE:
@@ -701,7 +1535,7 @@ static void setting_profile_ug_on_event(ui_gadget_h ug,
 }
 
 static void setting_profile_ug_on_key_event(ui_gadget_h ug,
-                                           enum ug_key_event event, service_h service, void *priv)
+                                           enum ug_key_event event, app_control_h service, void *priv)
 {
        ret_if(priv == NULL);
 
@@ -750,7 +1584,11 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
        ops->key_event = setting_profile_ug_on_key_event;
        ops->priv = profileUG;
        ops->opt = UG_OPT_INDICATOR_ENABLE;
+
+       memset(profileUG, 0x00, sizeof(SettingProfileUG));
+
        /* Haptic init */
+#if 0
        SETTING_TRACE("before haptic initilization");
        int haptic_return = 0;
        haptic_return = haptic_open(HAPTIC_DEVICE_0, &(profileUG->hnd_hpt));
@@ -759,6 +1597,7 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
                SETTING_TRACE_DEBUG("%s*** [ERR] Failed haptic_open ***%s",
                                                SETTING_FONT_RED, SETTING_FONT_BLACK);
        }
+#endif
 
        return 0;
 }
@@ -779,26 +1618,183 @@ UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
  *
  ***************************************************/
 
-int setting_profile_check_file_exist(void *data, const char *file_path)
+static void pipe_handler(void *data, void *buf, unsigned int len)
 {
-       retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-       retv_if(file_path == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+       SETTING_TRACE_BEGIN;
+}
 
-       if (!ecore_file_exists(file_path)) {
-               SETTING_TRACE_ERROR("Cannot find the ringtone file[%s]!", file_path);
-               return SETTING_RETURN_FAIL;
+static Eina_Bool __stop_timer_cb(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(!data, EINA_FALSE);
+       SettingProfileUG *ad = (SettingProfileUG*)data;
+
+       setting_profile_close_all_mm_players(ad);
+
+       return EINA_FALSE;
+}
+
+/* complete cb : It is called that playing is done at the end of file */
+static void __mm_player_msg_cb(void *user_param)
+{
+       ret_if(user_param == NULL);
+       SettingProfileUG *ad = (SettingProfileUG *)user_param;
+
+       SETTING_TRACE("completed_cb is called.");
+       //setting_profile_close_all_mm_players(ad);
+
+       ecore_timer_add(0.0, (Ecore_Task_Cb)__stop_timer_cb, ad);
+       /* Do not call player_destroy() API in the same thread. So, added timer */
+
+       Ecore_Pipe *pipe;
+       pipe = ecore_pipe_add(pipe_handler, NULL);
+       ecore_pipe_write_close(pipe);
+       ecore_pipe_del(pipe);
+}
+
+static void __mm_player_interrupted_cb(player_interrupted_code_e code, void *user_data)
+{
+       ret_if(user_data == NULL);
+       SettingProfileUG *ad = (SettingProfileUG *)user_data;
+
+       SETTING_TRACE("interrupted code : %d", code);
+
+       if(ad->mp_ringtone)
+       {
+               player_state_e state;
+               player_get_state(*(ad->mp_ringtone), &state);
+               SETTING_TRACE("ringtone player state : %d", state);
+       }
+       else if(ad->mp_noti)
+       {
+               player_state_e state;
+               player_get_state(*(ad->mp_noti), &state);
+               SETTING_TRACE("noti player state : %d", state);
        }
+       else if(ad->mp_media)
+       {
+               player_state_e state;
+               player_get_state(*(ad->mp_media), &state);
+               SETTING_TRACE("media player state : %d", state);
+       }
+}
 
-       int mmc_status = VCONFKEY_SYSMAN_MMC_REMOVED;
-       vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_status);
-       if (VCONFKEY_SYSMAN_MMC_MOUNTED != mmc_status)
+static Eina_Bool __play_timer_cb(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(!data, EINA_FALSE);
+       SettingProfileUG *ad = (SettingProfileUG*)data;
+
+       if(ad->mp_prepare_async)
        {
-               if (!safeStrNCmp(SETTING_PROFILE_MMC_PATH, file_path, safeStrLen(SETTING_PROFILE_MMC_PATH)))
+               SETTING_TRACE("player (%x)", ad->mp_prepare_async);
+               int err;
+               player_state_e state = -1;
+               err = player_get_state(*(ad->mp_prepare_async), &state);
+               SETTING_TRACE("state:%d", state);
+
+               if (state != PLAYER_STATE_READY) {
+                       SETTING_TRACE_ERROR("state of player is invalid %d", err);
+                       player_unprepare(*(ad->mp_prepare_async));
+                       player_destroy(*(ad->mp_prepare_async));
+                       if(ad->mp_prepare_async == ad->mp_ringtone)
+                       {
+                               free(ad->mp_ringtone);
+                               ad->mp_ringtone = NULL;
+                       }
+                       else if(ad->mp_prepare_async == ad->mp_noti)
+                       {
+                               free(ad->mp_noti);
+                               ad->mp_noti = NULL;
+                       }
+                       else if(ad->mp_prepare_async == ad->mp_media)
+                       {
+                               free(ad->mp_media);
+                               ad->mp_media = NULL;
+                       }
+                       ad->mp_prepare_async = NULL;
+                       return EINA_FALSE;
+               }
+
+               player_set_completed_cb(*(ad->mp_prepare_async), __mm_player_msg_cb, ad);
+               player_set_interrupted_cb(*(ad->mp_prepare_async), __mm_player_interrupted_cb, ad);
+
+               err = player_start(*(ad->mp_prepare_async));
+               if (err != PLAYER_ERROR_NONE) { /* if directly return error.. */
+                       SETTING_TRACE_ERROR("player_start [%d]", err);
+                       player_unset_completed_cb(*(ad->mp_prepare_async));
+                       player_unset_interrupted_cb(*(ad->mp_prepare_async));
+                       player_unprepare(*(ad->mp_prepare_async));
+                       player_destroy(*(ad->mp_prepare_async));
+                       if(ad->mp_prepare_async == ad->mp_ringtone)
+                       {
+                               free(ad->mp_ringtone);
+                               ad->mp_ringtone = NULL;
+                       }
+                       else if(ad->mp_prepare_async == ad->mp_noti)
+                       {
+                               free(ad->mp_noti);
+                               ad->mp_noti = NULL;
+                       }
+                       else if(ad->mp_prepare_async == ad->mp_media)
+                       {
+                               free(ad->mp_media);
+                               ad->mp_media = NULL;
+                       }
+                       ad->mp_prepare_async = NULL;
+               }
+       }
+       return EINA_FALSE;
+}
+
+/* Async cb : to improve slider's performance when creating player */
+static void __mm_player_prepared_cb(void *user_data)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!user_data);
+       SettingProfileUG *ad = (SettingProfileUG*)user_data;
+
+       ecore_timer_add(0.0, (Ecore_Task_Cb)__play_timer_cb, ad);
+
+       Ecore_Pipe *pipe;
+       pipe = ecore_pipe_add(pipe_handler, NULL);
+       ecore_pipe_write_close(pipe);
+       ecore_pipe_del(pipe);
+}
+
+static void __no_play_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ret_if(data == NULL);
+       SettingProfileUG *ad = (SettingProfileUG *) data;
+
+       if(ad->no_play_popup)
+       {
+               evas_object_del(ad->no_play_popup);
+               ad->no_play_popup = NULL;
+       }
+}
+
+/* Show guide popup, when drag or tap slider if during call.
+       Do not provide pre-listening. */
+void setting_profile_create_warning_popup_during_call(void *data)
+{
+       ret_if(data == NULL);
+       SettingProfileUG *ad = (SettingProfileUG *) data;
+
+       int call_state = 0;
+       vconf_get_int(VCONFKEY_CALL_STATE, &call_state);
+       if(call_state != VCONFKEY_CALL_OFF)
+       {
+               SETTING_TRACE("Call status is not OFF (%d)", call_state);
+               if(!ad->no_play_popup)
                {
-                       return SETTING_RETURN_FAIL;
+                       ad->no_play_popup = setting_create_popup_with_btn(ad, ad->win_get,
+                                                                               NULL,
+                                                                               "IDS_ST_POP_UNABLE_TO_PLAY_DURING_CALL",
+                                                                               __no_play_popup_cb, 0,
+                                                                               1, "IDS_COM_SK_OK");
                }
        }
-       return SETTING_RETURN_SUCCESS;
 }
 
 player_h *setting_profile_play_sound(void *data, void *cb,
@@ -808,38 +1804,41 @@ player_h *setting_profile_play_sound(void *data, void *cb,
 {
        /* error check */
        retv_if(data == NULL, NULL);
-
        SettingProfileUG *ad = (SettingProfileUG *) data;
 
        int is_existing = setting_profile_check_file_exist(ad, ringtone_file);
        if(is_existing == SETTING_RETURN_FAIL || NULL == ringtone_file)
        {
-               char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
                switch(sound_type)
                {
                        case SOUND_TYPE_RINGTONE:
-                               ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
+                               if(isEmulBin())
+                                       ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE_SDK);
+                               else
+                                       ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
                                break;
                        case SOUND_TYPE_MEDIA:
-                               ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_MEDIA_TONE);
+                               if(isEmulBin())
+                                       ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE_SDK);
+                               else
+                                       ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_MEDIA_TONE);
                                break;
                        case SOUND_TYPE_NOTIFICATION:
                                ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_MSG_TONE);
                                break;
-#if DISABLED_CODE
-                       case SOUND_TYPE_SYSTEM:
-                               svi_get_path(SVI_TYPE_SND, SVI_SND_TOUCH_TOUCH1, pattern_file, sizeof(pattern_file));
-                               retv_if(pattern_file == NULL, NULL);
-                               ad->song_playing = (char *)g_strdup(pattern_file);
-                               break;
-#endif
                        default:
-                               ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
+                               if(isEmulBin())
+                                       ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE_SDK);
+                               else
+                                       ad->song_playing = (char *)g_strdup(SETTING_DEFAULT_CALL_TONE);
                                break;
                }
 
        }
        else {
+               if(safeStrCmp(ringtone_file, "Silent") == 0)
+                       return NULL;
+
                ad->song_playing = (char *)g_strdup(ringtone_file);
        }
 
@@ -851,6 +1850,9 @@ player_h *setting_profile_play_sound(void *data, void *cb,
 
        int err = 0;
 
+       sound_manager_set_session_type(SOUND_SESSION_TYPE_MEDIA);
+       sound_manager_set_media_session_option(SOUND_SESSION_OPTION_PAUSE_OTHERS_WHEN_START, SOUND_SESSION_OPTION_INTERRUPTIBLE_DURING_PLAY);
+
        err = player_create(player);
        if (err != PLAYER_ERROR_NONE) {
                SETTING_TRACE_ERROR("creating the player handle failed[%d]", err);
@@ -865,6 +1867,7 @@ player_h *setting_profile_play_sound(void *data, void *cb,
                free(player);
                return NULL;
        }
+
        SETTING_TRACE_DEBUG("player_set_sound_type [%d]", sound_type);
 
        err = player_set_uri(*player, ad->song_playing);
@@ -875,44 +1878,61 @@ player_h *setting_profile_play_sound(void *data, void *cb,
                return NULL;
        }
 
-       err = player_prepare(*player);
+#if SUPPORT_PLAYER_ASYNC
+       err = player_prepare_async(*player, __mm_player_prepared_cb, ad);
        if (err != PLAYER_ERROR_NONE) {
                SETTING_TRACE_ERROR("realizing the player handle failed[%d]", err);
+               ad->mp_prepare_async = NULL;
+               player_destroy(*player);
+               free(player);
+               return NULL;
+       }
+       ad->mp_prepare_async = player;
+       SETTING_TRACE("waiting..player (%x)", ad->mp_prepare_async);
+#else
+       err = player_prepare(*player);
+       if(err != PLAYER_ERROR_NONE)
+       {
+               SETTING_TRACE_ERROR("player_prepare() error %d", err);
                player_destroy(*player);
                free(player);
                return NULL;
        }
 
        player_state_e state = -1;
-       player_get_state(*player, &state);
+       err = player_get_state(*player, &state);
        SETTING_TRACE("state:%d", state);
-
-       if (state != PLAYER_STATE_READY) {
+       if (state != PLAYER_STATE_READY)
+       {
                SETTING_TRACE_ERROR("state of player is invalid %d", err);
                player_unprepare(*player);
                player_destroy(*player);
                free(player);
                return NULL;
+
        }
 
-       player_set_completed_cb(*player, cb, ad);
+       player_set_completed_cb(*player, __mm_player_msg_cb, ad);
+       player_set_interrupted_cb(*player, __mm_player_interrupted_cb, ad);
+
        err = player_start(*player);
-       if (err != PLAYER_ERROR_NONE) { /* if directly return error.. */
+       if (err != PLAYER_ERROR_NONE)
+       {       /* if directly return error.. */
                SETTING_TRACE_ERROR("player_start [%d]", err);
                player_unset_completed_cb(*player);
+               player_unset_interrupted_cb(*player);
                player_unprepare(*player);
                player_destroy(*player);
                free(player);
                return NULL;
        }
+#endif
 
-       SETTING_TRACE("waiting..");
        ad->playing_volume = vol;
 
        return player;
 }
 
-#define EXP 0.001
 void setting_profile_play_sound_origin(player_h **mp_handle, void *data,
                                       void *cb, char *ringtone_file,
                                       /* int vol, */
@@ -934,16 +1954,24 @@ void setting_profile_play_sound_origin(player_h **mp_handle, void *data,
                return;
        }
 
+       int vconf_value = 0;
+       vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS, &vconf_value);
+       if(vconf_value == TRUE)
+               return;
+
        SettingProfileUG *ad = (SettingProfileUG *) data;
        if (*mp_handle == NULL) {
                *mp_handle = setting_profile_play_sound(ad, cb, ringtone_file, vol, sound_type);
+               SETTING_TRACE("mp_handle (%x)", *mp_handle);
        }
 }
 
 int setting_profile_stop_sound(void *data, player_h *player)
 {
        SETTING_TRACE_BEGIN;
-       retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+       retv_if(data == NULL || player == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+
+       SETTING_TRACE("player (%x)", player);
 
        SettingProfileUG *ad = (SettingProfileUG *) data;
        if (ad->song_playing) {
@@ -964,6 +1992,9 @@ int setting_profile_stop_sound(void *data, player_h *player)
                }
        }
 
+       player_unset_completed_cb(*player);
+       player_unset_interrupted_cb(*player);
+
        if ((prev_behavior == 0) && (player_unprepare(*player) != PLAYER_ERROR_NONE)) {
                SETTING_TRACE("mm player unrealize failed");
                ret = SETTING_MMPLAYER_UNREALIZE_ERR;
@@ -980,56 +2011,47 @@ int setting_profile_stop_sound(void *data, player_h *player)
        return ret;
 }
 
-int __close_player(void *data, setting_volume_types type)
+static int __close_player(void *data, setting_volume_types type)
 {
+       SETTING_TRACE_BEGIN;
        /* error check */
        retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingProfileUG *ad = (SettingProfileUG *) data;
-       player_h **player= NULL;
-
-       double value = 0.0;
 
        switch(type)
        {
                case SETTING_VOL_TYPE_RINGTONE:
                        retv_if(ad->mp_ringtone == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-                       player = &(ad->mp_ringtone);
-                       value = elm_slider_value_get(ad->data_call_volume->eo_check);
-                       sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)(value+0.5));
+                       SETTING_TRACE("ringtone player (%x)", ad->mp_ringtone);
+                       if(ad->mp_prepare_async == ad->mp_ringtone)
+                               ad->mp_prepare_async = NULL;
+                       if(setting_profile_stop_sound(ad, ad->mp_ringtone) == SETTING_RETURN_SUCCESS)
+                               ad->mp_ringtone = NULL;
                        break;
                case SETTING_VOL_TYPE_NOTIFICATION:
                        retv_if(ad->mp_noti == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-                       player = &(ad->mp_noti);
-                       value = elm_slider_value_get(ad->data_noti_volume->eo_check);
-                       sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)(value+0.5));
+                       SETTING_TRACE("noti player (%x)", ad->mp_noti);
+                       if(ad->mp_prepare_async == ad->mp_noti)
+                               ad->mp_prepare_async = NULL;
+                       if(setting_profile_stop_sound(ad, ad->mp_noti) == SETTING_RETURN_SUCCESS)
+                               ad->mp_noti = NULL;
                        break;
                case SETTING_VOL_TYPE_MEDIA:
                        retv_if(ad->mp_media == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-                       player = &(ad->mp_media);
-                       value = elm_slider_value_get(ad->data_media_volume->eo_check);
-                       sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)(value+0.5));
+                       SETTING_TRACE("media player (%x)", ad->mp_media);
+                       if(ad->mp_prepare_async == ad->mp_media)
+                               ad->mp_prepare_async = NULL;
+                       if(setting_profile_stop_sound(ad, ad->mp_media) == SETTING_RETURN_SUCCESS)
+                               ad->mp_media = NULL;
                        break;
                case SETTING_VOL_TYPE_SYSTEM:
-                       retv_if(ad->mp_sys == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-                       player = &(ad->mp_sys);
-                       value = elm_slider_value_get(ad->data_touch_volume->eo_check);
-                       sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)(value+0.5));
-                       break;
                case SETTING_VOL_TYPE_NOTI_VIB:
                case SETTING_VOL_TYPE_HAPTIC_VIB:
                default:
                        return SETTING_RETURN_FAIL;
        }
 
-       if (*player) {
-               if (setting_profile_stop_sound(ad, *player)) {
-                       *player = NULL;
-               } else {
-                       return SETTING_RETURN_FAIL;
-               }
-       }
-
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -1050,37 +2072,25 @@ setting_profile_close_other_mm_players_but_type(void *data, sound_type_e type)
                                ret++;
                        if (__close_player(ad, SETTING_VOL_TYPE_MEDIA) != SETTING_RETURN_SUCCESS)
                                ret++;
-                       if (__close_player(ad, SETTING_VOL_TYPE_SYSTEM) != SETTING_RETURN_SUCCESS)
-                               ret++;
                        break;
                case SOUND_TYPE_NOTIFICATION:   /*  close ringtone, media and system players */
                        if (__close_player(ad, SETTING_VOL_TYPE_RINGTONE) != SETTING_RETURN_SUCCESS)
                                ret++;
                        if (__close_player(ad, SETTING_VOL_TYPE_MEDIA) != SETTING_RETURN_SUCCESS)
                                ret++;
-                       if (__close_player(ad, SETTING_VOL_TYPE_SYSTEM) != SETTING_RETURN_SUCCESS)
-                               ret++;
                        break;
                case SOUND_TYPE_MEDIA:  /*  close ringtone, noti and system players */
                        if (__close_player(ad, SETTING_VOL_TYPE_RINGTONE) != SETTING_RETURN_SUCCESS)
                                ret++;
                        if (__close_player(ad, SETTING_VOL_TYPE_NOTIFICATION) != SETTING_RETURN_SUCCESS)
                                ret++;
-                       if (__close_player(ad, SETTING_VOL_TYPE_SYSTEM) != SETTING_RETURN_SUCCESS)
-                               ret++;
-                       break;
-               case SOUND_TYPE_SYSTEM: /*  close ringtone, noti and media players */
-                       if (__close_player(ad, SETTING_VOL_TYPE_RINGTONE) != SETTING_RETURN_SUCCESS)
-                               ret++;
-                       if (__close_player(ad, SETTING_VOL_TYPE_NOTIFICATION) != SETTING_RETURN_SUCCESS)
-                               ret++;
-                       if (__close_player(ad, SETTING_VOL_TYPE_MEDIA) != SETTING_RETURN_SUCCESS)
-                               ret++;
                        break;
                default:                /*  if unknown type, dont close any player */
                        break;
        }
 
+       SETTING_TRACE_DEBUG("ret: %d", ret);
+
        if (ret == 0)
                return SETTING_RETURN_SUCCESS;
        else
@@ -1102,8 +2112,6 @@ int setting_profile_close_all_mm_players(void *data)
                ret++;
        if (__close_player(ad, SETTING_VOL_TYPE_MEDIA) != SETTING_RETURN_SUCCESS)
                ret++;
-       if (__close_player(ad, SETTING_VOL_TYPE_SYSTEM) != SETTING_RETURN_SUCCESS)
-               ret++;
 
        if(ad->volume_timer)
        {
@@ -1119,83 +2127,266 @@ int setting_profile_close_all_mm_players(void *data)
                return SETTING_RETURN_FAIL;
 }
 
-void setting_profile_play_vibration(void *data, int value)
-{
-       /* error check */
-       ret_if(data == NULL);
+static Setting_Cfg_Node_T s_cfg_node_array[] = {
+       {"IDS_ST_BODY_VIBRATE_WHEN_RINGING", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_VIBRATE_WHEN_RINGING", 0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, NULL, NULL, NULL},
+       {"IDS_ST_MBODY_DIALLING_KEYPAD_TONE", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_MBODY_DIALLING_KEYPAD_TONE", 0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, NULL, NULL, NULL},
+       {"IDS_ST_BODY_TOUCH_SOUNDS", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_TOUCH_SOUNDS", 0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, NULL, NULL, NULL},
+       {"IDS_ST_BODY_SCREEN_LOCK_SOUND", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_SCREEN_LOCK_SOUND", 0, 0, 0, Cfg_Item_View_Node_Toggle, NULL, NULL, NULL, NULL},
+       {"IDS_CST_MBODY_ADAPT_SOUND", NULL, "viewtype:frontpage;tab:first;keyword:IDS_CST_MBODY_ADAPT_SOUND", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
+       {"IDS_ST_HEADER_RINGTONES", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_HEADER_RINGTONES", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
+       {"IDS_ST_BODY_NOTIFICATION_ALERT", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_NOTIFICATION_ALERT", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
+       {"IDS_ST_BODY_NOTIFICATION_ALERT_REPETITION", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_NOTIFICATION_ALERT_REPETITION", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
+};
 
-       SettingProfileUG *ad = (SettingProfileUG *) data;
 
-       char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
-       svi_get_path(SVI_TYPE_VIB, value, pattern_file, sizeof(pattern_file));
+UG_MODULE_API int setting_plugin_search_init(app_control_h service, void *priv, char** applocale)
+{
+       SETTING_TRACE_BEGIN;
+       SETTING_TRACE(">> setting-profile-efl DB search code");
+
+       *applocale = strdup("setting:/usr/apps/org.tizen.setting/res/locale");
 
-#if MIGRATION_HAPTIC
-       if(ad->hnd_hpt < 0)
-       {
-               SETTING_TRACE_DEBUG("[ERROR] Can't use haptic handle.");
-               return;
+       Eina_List **pplist = (Eina_List**)priv;
+       int i;
+       int size = sizeof(s_cfg_node_array)/sizeof(s_cfg_node_array[0]);
+       for(i=0;i<size;i++) {
+               Setting_Cfg_Node_T * node = setting_plugin_search_item_subindex_add(s_cfg_node_array[i].key_name, s_cfg_node_array[i].ug_args, IMG_Sounds,s_cfg_node_array[i].item_type,  s_cfg_node_array[i].data, "Sound");
+               *pplist = eina_list_append(*pplist, node);
        }
-       if(haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, HAPTIC_FEEDBACK_AUTO, HAPTIC_PRIORITY_MIN, NULL) != 0){
-               SETTING_TRACE("ERROR device_haptic_play_pattern");
+       return 0;
+}
+
+static int set_profile_searchbar_bool_value(Cfg_Item_State stat,const char *in_key)
+{
+       int value = -1;
+
+       if (stat == Cfg_Item_On){
+               value = 1;
+       }else if (stat == Cfg_Item_Off){
+               value = 0;
+       }else{
+               value = 0;
        }
-#endif
+       int ret = vconf_set_bool(in_key, value);
+       return ret;
 }
 
-int setting_profile_get_call_playing_vib_by_vconf_value(int call_vib_value)
+static int get_profile_searchbar_bool_value(Cfg_Item_State* stat,const char *in_key)
 {
-       /*  select vibration pattern */
-       switch (call_vib_value) {
-               case SETTING_CALL_ALERT_VIB_TYPE1:
-               {
-                       return SVI_VIB_NOTIFICATION_INCOMING_CALL01;
-               }
-               case SETTING_CALL_ALERT_VIB_TYPE2:
-               {
-                       return SVI_VIB_NOTIFICATION_INCOMING_CALL02;
-               }
-               case SETTING_CALL_ALERT_VIB_TYPE3:
-               {
-                       return SVI_VIB_NOTIFICATION_INCOMING_CALL03;
-               }
-               default:
-                       return SVI_VIB_NOTIFICATION_INCOMING_CALL01;
+       int value = -1;
+       int ret = vconf_get_bool(in_key, &value);
+
+       if (value == 1){
+               *stat = Cfg_Item_On;
+       }else{
+               *stat = Cfg_Item_Off;
        }
+       return ret;
 }
 
-UG_MODULE_API int setting_plugin_reset(service_h service, void *priv)
+
+/**
+* @brief get toggle state for "Vibrate when ringing"
+*
+* @param stat store the toggle state
+* @param data application context
+*
+* @return 0 for success
+*/
+EXPORT_PUBLIC
+int get_profile_ug_vibrate_when_ringing_state(Cfg_Item_State* stat, void* data)
 {
        SETTING_TRACE_BEGIN;
-       int ret = 0;
+       int ret = get_profile_searchbar_bool_value(stat,VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL);
+       return ret;
+}
 
-#if SUPPORT_RUN_SYSTEM_COMMAND
-       ret += excuteCmd(SETTING_POSTINST_FILE, 1, "sounds");
-#else
+/**
+* @brief set toggle state for "Vibrate when ringing"
+*
+* @param stat the toggle state will be set
+* @param data application context
+*
+* @return 0 for success
+*/
+EXPORT_PUBLIC
+int set_profile_ug_vibrate_when_ringing_state(Cfg_Item_State stat, void* item, void* data)
+{
+       SETTING_TRACE_BEGIN;
+       int ret = set_profile_searchbar_bool_value(stat,VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL);
+       return ret;
+}
+
+/**
+* @brief get toggle state for "Dialling keypad tone"
+*
+* @param stat store the toggle state
+* @param data application context
+*
+* @return 0 for success
+*/
+EXPORT_PUBLIC
+int get_profile_ug_dialling_keypad_tone_state(Cfg_Item_State* stat, void* data)
+{
+       SETTING_TRACE_BEGIN;
+       int ret = get_profile_searchbar_bool_value(stat,VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL);
+       return ret;
+}
 
-       ret += vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
-       ret += vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE); /* after support incoming call vibration, it should be change to TRUE */
-       ret += vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, SETTING_DEFAULT_NOTI_VIB_INT);
-       ret += vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, SETTING_DEFAULT_HAPTIC_VIB_INT);
-       ret += vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, SETTING_DEFAULT_HAPTIC_VIB_INT);
+/**
+* @brief set toggle state for "Dialling keypad tone"
+*
+* @param stat the toggle state will be set
+* @param data application context
+*
+* @return 0 for success
+*/
+EXPORT_PUBLIC
+int set_profile_ug_dialling_keypad_tone_state(Cfg_Item_State stat, void* item, void* data)
+{
+       SETTING_TRACE_BEGIN;
+       int ret = set_profile_searchbar_bool_value(stat,VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL);
+       return ret;
+}
 
-       ret += vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, SETTING_DEFAULT_CALL_TONE);
 
-       ret += vconf_set_int(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, SETTING_CALL_ALERT_VIB_TYPE3);
+/**
+* @brief get toggle state for "Touch Sounds"
+*
+* @param stat store the toggle state
+* @param data application context
+*
+* @return 0 for success
+*/
+EXPORT_PUBLIC
+int get_profile_ug_touch_sounds_state(Cfg_Item_State* stat, void* data)
+{
+       SETTING_TRACE_BEGIN;
+       int ret = get_profile_searchbar_bool_value(stat,VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL);
+       return ret;
+}
 
-       ret += vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
-       ret += vconf_set_int(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT);
+/**
+* @brief set toggle state for "Touch Sounds"
+*
+* @param stat the toggle state will be set
+* @param data application context
+*
+* @return 0 for success
+*/
+EXPORT_PUBLIC
+int set_profile_ug_touch_sounds_state(Cfg_Item_State stat, void* item, void* data)
+{
+       SETTING_TRACE_BEGIN;
+       int ret = set_profile_searchbar_bool_value(stat,VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL);
+       return ret;
+}
 
-       ret += vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
-       ret += vconf_set_int(VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT, SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT);
 
-       ret += vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, TRUE);
+/**
+* @brief get toggle state for "Screen lock sound"
+*
+* @param stat store the toggle state
+* @param data application context
+*
+* @return 0 for success
+*/
+EXPORT_PUBLIC
+int get_profile_ug_screen_lock_sound_state(Cfg_Item_State* stat, void* data)
+{
+       SETTING_TRACE_BEGIN;
+       int ret = get_profile_searchbar_bool_value(stat,VCONFKEY_SETAPPL_SOUND_LOCK_BOOL);
+       return ret;
+}
 
-       /* if ret is 0, finish completely */
-       /* if ret is minus, it means times of failure */
-#endif
-       sound_manager_set_volume(SOUND_TYPE_RINGTONE, SETTING_DEFAULT_RINGTONE_VOL_INT);
-       sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, SETTING_DEFAULT_NOTI_VOL_INT);
-       sound_manager_set_volume(SOUND_TYPE_MEDIA, SETTING_DEFAULT_MEDIA_VOL_INT);
-       sound_manager_set_volume(SOUND_TYPE_SYSTEM, SETTING_DEFAULT_SYSTEM_VOL_INT);
+/**
+* @brief set toggle state for "Screen lock sound"
+*
+* @param stat the toggle state will be set
+* @param data application context
+*
+* @return 0 for success
+*/
+EXPORT_PUBLIC
+int set_profile_ug_screen_lock_sound_state(Cfg_Item_State stat, void* item, void* data)
+{
+       SETTING_TRACE_BEGIN;
+       int ret = set_profile_searchbar_bool_value(stat,VCONFKEY_SETAPPL_SOUND_LOCK_BOOL);
        return ret;
 }
 
+
+/**
+* @brief function table for searchable menu item "Vibrate when ringing"
+*
+* @see the struct cfg_func_table defination
+*/
+EXPORT_PUBLIC
+cfg_func_table opt_tab_vibrate_when_ringing = {
+       .get_item_state = get_profile_ug_vibrate_when_ringing_state,
+       .set_item_state = set_profile_ug_vibrate_when_ringing_state,
+       .set_item_update_ui = NULL,
+};
+
+/**
+* @brief function table for searchable menu item "Dialling keypad tone"
+*
+* @see the struct cfg_func_table defination
+*/
+EXPORT_PUBLIC
+cfg_func_table opt_tab_dialling_keypad_tone = {
+       .get_item_state = get_profile_ug_dialling_keypad_tone_state,
+       .set_item_state = set_profile_ug_dialling_keypad_tone_state,
+       .set_item_update_ui = NULL,
+};
+
+/**
+* @brief function table for searchable menu item "Touch Sounds"
+*
+* @see the struct cfg_func_table defination
+*/
+EXPORT_PUBLIC
+cfg_func_table opt_tab_touch_sounds = {
+       .get_item_state = get_profile_ug_touch_sounds_state,
+       .set_item_state = set_profile_ug_touch_sounds_state,
+       .set_item_update_ui = NULL,
+};
+
+/**
+* @brief function table for searchable menu item "Screen lock sound"
+*
+* @see the struct cfg_func_table defination
+*/
+EXPORT_PUBLIC
+cfg_func_table opt_tab_screen_lock_sound = {
+       .get_item_state = get_profile_ug_screen_lock_sound_state,
+       .set_item_state = set_profile_ug_screen_lock_sound_state,
+       .set_item_update_ui = NULL,
+};
+
+
+/**
+* @brief get the operation function table for searchable menu items
+*
+* @param str_id key string for searchable menu items
+* @param tfunc_obj application context
+*
+* @return 0 for success
+*/
+UG_MODULE_API int setting_plugin_search_query_ops(char* str_id, void** tfunc_obj)
+{
+       SETTING_TRACE_BEGIN;
+       SETTING_TRACE(">> get tfunc operation via plugin-model 1");
+       if (str_id && !safeStrCmp(str_id, _("IDS_ST_BODY_VIBRATE_WHEN_RINGING"))) {
+               *tfunc_obj = (void*)&opt_tab_vibrate_when_ringing;
+       }else if(str_id && !safeStrCmp(str_id, _("IDS_ST_MBODY_DIALLING_KEYPAD_TONE"))){
+               *tfunc_obj = (void*)&opt_tab_dialling_keypad_tone;
+       }else if(str_id && !safeStrCmp(str_id, _("IDS_ST_BODY_TOUCH_SOUNDS"))){
+               *tfunc_obj = (void*)&opt_tab_touch_sounds;
+       }else if(str_id && !safeStrCmp(str_id, _("IDS_ST_BODY_SCREEN_LOCK_SOUND"))){
+               *tfunc_obj = (void*)&opt_tab_screen_lock_sound;
+       }
+       SETTING_TRACE(">> get tfunc operation via plugin-model 2");
+       return 0;
+}
+