X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=setting-profile%2Fsrc%2Fsetting-profile-sound-main.c;h=239b5da271e054b56ec10978435fc36cae5b5485;hb=5ddfeecc79d4eac1f9829993cd65896cafea6ff2;hp=3841f08610658108b8cc25584b8718058fa4c480;hpb=9662ffc25fb2744b41685f64b3663e9ff0ceb7ae;p=apps%2Fcore%2Fpreloaded%2Fsettings.git diff --git a/setting-profile/src/setting-profile-sound-main.c b/setting-profile/src/setting-profile-sound-main.c index 3841f08..239b5da 100755 --- a/setting-profile/src/setting-profile-sound-main.c +++ b/setting-profile/src/setting-profile-sound-main.c @@ -19,12 +19,20 @@ * */ #include +#include -#define VOLUME_STR _("IDS_ST_SK_VOLUME") +#define VOLUME_STR _("IDS_ST_BODY_VOLUME") #define RINGTONE_STR _("IDS_COM_BODY_RINGTONES") #define SOUND_DESC "IDS_ST_BODY_ADJUST_VOLUME_AND_INTENSITY_FOR_SOUNDS_WHEN_MSG" +char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = { + SETTING_SOUND_TEXT_REPEAT_ONCE, + SETTING_SOUND_TEXT_REPEAT_2MIN, + SETTING_SOUND_TEXT_REPEAT_5MIN, + SETTING_SOUND_TEXT_REPEAT_10MIN + }; + static int setting_profile_sound_main_create(void *cb); static int setting_profile_sound_main_destroy(void *cb); static int setting_profile_sound_main_update(void *cb); @@ -33,6 +41,34 @@ static int setting_profile_sound_main_cleanup(void *cb); static void setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode, void *priv); +static void setting_profile_sound_main_click_softkey_cancel_cb(void *data, + Evas_Object *obj, void *event_info); + +static void setting_profile_sound_main_Gendial_chk_cb(void *data, + Evas_Object *obj, void *event_info); + +static void setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data, + Evas_Object *obj, void *event_info); + +static void setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data, + Evas_Object *obj, void *event_info); + +static void setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data, + Evas_Object *obj, void *event_info); + +static void setting_profile_sound_main_media_sound_slider_value_change_cb(void *data, + Evas_Object *obj, void *event_info); + +static void setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data, + Evas_Object *obj, void *event_info); + +static void setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data, + Evas_Object *obj, void *event_info); + +static void settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data, + Evas_Object *obj, void *event_info); + + setting_view setting_view_profile_sound_main = { .create = setting_profile_sound_main_create, .destroy = setting_profile_sound_main_destroy, @@ -106,7 +142,7 @@ void __sound_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info) setting_set_int_slp_key(data_parentItem->int_slp_setting_binded, data_subItem->chk_status, &err); - if (data_parentItem) { + if (data_parentItem && data_parentItem->item) { data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr)); elm_object_item_data_set(data_parentItem->item, data_parentItem); @@ -115,8 +151,13 @@ void __sound_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info) if (data_parentItem->int_slp_setting_binded == INT_SLP_SETTING_CALL_ALERT_VIB) { - if (device_haptic_stop_play(ad->hnd_hpt) != 0) { - SETTING_TRACE("ERROR device_haptic_stop_play"); + if(ad->hnd_hpt < 0) + { + SETTING_TRACE_DEBUG("[ERROR] Can't use haptic handle."); + return; + } + if (haptic_stop_all_effects(ad->hnd_hpt) != 0) { + SETTING_TRACE("ERROR haptic_stop_all_effects"); /* return; */ } setting_profile_play_vibration(ad, @@ -180,7 +221,7 @@ static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info) ad, parentItem, SWALLOW_Type_1RADIO, rgd, 0, - SETTING_SOUND_TEXT_REPEAT_ONCE, + _(SETTING_SOUND_TEXT_REPEAT_ONCE), NULL); setting_create_Gendial_exp_sub_field(scroller, @@ -189,7 +230,7 @@ static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info) ad, parentItem, SWALLOW_Type_1RADIO, rgd, 1, - SETTING_SOUND_TEXT_REPEAT_2MIN, + _(SETTING_SOUND_TEXT_REPEAT_2MIN), NULL); setting_create_Gendial_exp_sub_field(scroller, @@ -198,7 +239,7 @@ static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info) ad, parentItem, SWALLOW_Type_1RADIO, rgd, 2, - SETTING_SOUND_TEXT_REPEAT_5MIN, + _(SETTING_SOUND_TEXT_REPEAT_5MIN), NULL); setting_create_Gendial_exp_sub_field(scroller, &(ad->itc_1icon_1text_sub), @@ -206,12 +247,11 @@ static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info) ad, parentItem, SWALLOW_Type_1RADIO, rgd, 3, - SETTING_SOUND_TEXT_REPEAT_10MIN, + _(SETTING_SOUND_TEXT_REPEAT_10MIN), NULL); setting_update_chk_status(rgd, - data_parentItem-> - int_slp_setting_binded); + data_parentItem->int_slp_setting_binded); } } @@ -273,6 +313,46 @@ void __system_start_change_cb(void *data, Evas_Object *obj, void *event_info) setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_SYSTEM); } +void __noti_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info) +{ + ret_if(data == NULL); + + Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data; + SettingProfileUG *ad = list_item->userdata; + + ad->cur_vol_type = SETTING_VOL_TYPE_NOTI_VIB; + setting_profile_close_all_mm_players(ad); + + int err = 0; + char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,}; + svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, MAX_COMMON_BUFFER_LEN); + haptic_stop_all_effects(ad->hnd_hpt); + err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL); + if (err < 0) + SETTING_TRACE("Failed to play haptic monotone"); +} + +void __haptic_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info) + { + SETTING_TRACE_BEGIN; + ret_if(data == NULL); + + Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data; + SettingProfileUG *ad = list_item->userdata; + + ad->cur_vol_type = SETTING_VOL_TYPE_HAPTIC_VIB; + setting_profile_close_all_mm_players(ad); + + int err = 0; + char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,}; + svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, MAX_COMMON_BUFFER_LEN); + haptic_stop_all_effects(ad->hnd_hpt); + err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL); + + if (err < 0) + SETTING_TRACE("Failed to play haptic monotone"); +} + void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info) { SETTING_TRACE_BEGIN; @@ -285,11 +365,12 @@ void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info) player_h **player = NULL; double value = elm_slider_value_get(obj); + list_item->chk_status = (unsigned int)(value+0.5); switch(ad->cur_vol_type) { case SETTING_VOL_TYPE_RINGTONE: - sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)(value+0.5)); + sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status); player = &(ad->mp_ringtone); if(*player != NULL) return; @@ -297,10 +378,12 @@ void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info) pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR); if(pa_tone_path == NULL) { - pa_tone_path = SETTING_DEFAULT_CALL_TONE; + pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE); - if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0) + if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0) { + FREE(pa_tone_path); return; + } } setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb, pa_tone_path, @@ -308,7 +391,7 @@ void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info) SOUND_TYPE_RINGTONE); break; case SETTING_VOL_TYPE_NOTIFICATION: - sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)(value+0.5)); + sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status); player = &(ad->mp_noti); if(*player != NULL) return; @@ -316,9 +399,11 @@ void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info) pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR); if(pa_tone_path == NULL) { - pa_tone_path = SETTING_DEFAULT_MSG_TONE; - if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0) + pa_tone_path = (char *)strdup(SETTING_DEFAULT_MSG_TONE); + if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0) { + FREE(pa_tone_path); return; + } } setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb, pa_tone_path, @@ -326,7 +411,7 @@ void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info) SOUND_TYPE_NOTIFICATION); break; case SETTING_VOL_TYPE_MEDIA: - sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)(value+0.5)); + sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status); player = &(ad->mp_media); if(*player != NULL) return; @@ -339,7 +424,7 @@ void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info) SOUND_TYPE_MEDIA); break; case SETTING_VOL_TYPE_SYSTEM: - sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)(value+0.5)); + sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status); player = &(ad->mp_sys); if(*player != NULL) return; @@ -356,17 +441,93 @@ void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info) return; } - FREE(pa_tone_path); + if(pa_tone_path) { + free(pa_tone_path); + pa_tone_path = NULL; + } + + SETTING_TRACE_END; +} + +void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info) +{ + ret_if(data == NULL); + + Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data; + SettingProfileUG *ad = list_item->userdata; + if (haptic_stop_all_effects(ad->hnd_hpt) != 0) { + SETTING_TRACE("ERROR haptic_stop_all_effects"); + /* return; */ + } + + double value = 0.0; + switch(ad->cur_vol_type) + { + case SETTING_VOL_TYPE_NOTI_VIB: + if(ad->data_vib_volume) + { + value = elm_slider_value_get(ad->data_vib_volume->eo_check); + vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5)); + if(value < 0.5) + elm_slider_value_set(ad->data_vib_volume->eo_check, 0); + else + elm_slider_value_set(ad->data_vib_volume->eo_check, (unsigned int)(value+0.5)); + } + break; + case SETTING_VOL_TYPE_HAPTIC_VIB: + if(ad->data_touch_vib) + { + value = elm_slider_value_get(ad->data_touch_vib->eo_check); + vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5)); + vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, (unsigned int)(value+0.5)); + if(value < 0.5) + elm_slider_value_set(ad->data_touch_vib->eo_check, 0); + else + elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5)); + } + break; + default: + break; + } + ad->cur_vol_type = SETTING_VOL_TYPE_MAX; SETTING_TRACE_END; } +static void __main_list_unrealized_cb(void *data, Evas_Object *obj, void *event_info) +{ + SETTING_TRACE_BEGIN; + ret_if(data == NULL); + + SettingProfileUG *ad = (SettingProfileUG *) data; + + Elm_Object_Item *item = (Elm_Object_Item *)event_info; + Setting_GenGroupItem_Data *list_item = + (Setting_GenGroupItem_Data *) elm_object_item_data_get(item); + + /* backup each slider's value */ + if(list_item == ad->data_call_volume) + sound_manager_set_volume(SOUND_TYPE_RINGTONE, ad->data_call_volume->chk_status); + else if(list_item == ad->data_noti_volume) + sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, ad->data_noti_volume->chk_status); + else if(list_item == ad->data_media_volume) + sound_manager_set_volume(SOUND_TYPE_MEDIA, ad->data_media_volume->chk_status); + else if(list_item == ad->data_touch_volume) + sound_manager_set_volume(SOUND_TYPE_SYSTEM, ad->data_touch_volume->chk_status); + else if(list_item == ad->data_vib_volume) + vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ad->data_vib_volume->chk_status); + else if(list_item == ad->data_touch_vib) + vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, ad->data_touch_vib->chk_status); +} + static Evas_Object *__get_main_list(void *data) { retv_if(data == NULL, NULL); SettingProfileUG *ad = (SettingProfileUG *) data; + __setting_profile_ug_key_grab(ad); + if(ad->sub_view[SETTING_PROF_VIEW_VOL]) return ad->sub_view[SETTING_PROF_VIEW_VOL]; @@ -399,6 +560,21 @@ static Evas_Object *__get_main_list(void *data) } else { SETTING_TRACE_ERROR("ad->data_sound is NULL"); } + /* b.use vib */ + if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0) + vconf_value = TRUE; /* default value of vibration : on */ + ad->data_vibration = + setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon), + setting_profile_sound_main_mouse_up_Gendial_list_cb, + ad, SWALLOW_Type_1TOGGLE, NULL, + NULL, vconf_value, + SETTING_SOUND_TEXT_VIBRATION, NULL, + setting_profile_sound_main_Gendial_chk_cb); + if (ad->data_vibration) { + ad->data_vibration->userdata = ad; + } else { + SETTING_TRACE_ERROR("ad->data_vibration is NULL"); + } (void)setting_create_Gendial_field_titleItem(genlist, &(ad->itc_group_item), @@ -433,13 +609,17 @@ static Evas_Object *__get_main_list(void *data) /* e.noti volumn */ if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0) mm_value = SETTING_DEFAULT_NOTI_VOL_INT; + + (void)setting_create_Gendial_field_titleItem(genlist, + &(itc_group_item), + SETTING_SOUND_TEXT_NOTIFICATION, NULL); ad->data_noti_volume = setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL, NULL, SWALLOW_Type_LAYOUT_SLIDER, IMG_SLIDER_BTN_VOLUME01, IMG_SLIDER_BTN_VOLUME02, mm_value, - SETTING_SOUND_TEXT_NOTIFICATION, + NULL,//SETTING_SOUND_TEXT_NOTIFICATION, NULL, setting_profile_sound_main_noti_sound_slider_value_change_cb); if (ad->data_noti_volume) { @@ -459,13 +639,17 @@ static Evas_Object *__get_main_list(void *data) /* g.media volume */ if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0) mm_value = SETTING_DEFAULT_MEDIA_VOL_INT; + + (void)setting_create_Gendial_field_titleItem(genlist, + &(itc_group_item), + SETTING_SOUND_TEXT_MEDIA, NULL); ad->data_media_volume = setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL, NULL, SWALLOW_Type_LAYOUT_SLIDER, IMG_SLIDER_BTN_VOLUME01, IMG_SLIDER_BTN_VOLUME02, mm_value, - SETTING_SOUND_TEXT_MEDIA, NULL, + NULL, NULL, setting_profile_sound_main_media_sound_slider_value_change_cb); if (ad->data_media_volume) { ad->data_media_volume->win_main = ad->win_main_layout; @@ -483,14 +667,20 @@ static Evas_Object *__get_main_list(void *data) /* h.system volume */ if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0) + { + SETTING_TRACE_DEBUG("Fail to get volume"); mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT; + } + (void)setting_create_Gendial_field_titleItem(genlist, + &(itc_group_item), + SETTING_SOUND_TEXT_SYSTEM, NULL); ad->data_touch_volume = setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL, NULL, SWALLOW_Type_LAYOUT_SLIDER, IMG_SLIDER_BTN_VOLUME01, IMG_SLIDER_BTN_VOLUME02, mm_value, - SETTING_SOUND_TEXT_SYSTEM, NULL, + NULL, NULL, settings_profile_sound_main_sys_sound_slider_value_change_cb); if (ad->data_touch_volume) { ad->data_touch_volume->win_main = ad->win_main_layout; @@ -506,10 +696,81 @@ static Evas_Object *__get_main_list(void *data) SETTING_TRACE_ERROR("ad->data_touch_volume is NULL"); } + (void)setting_create_Gendial_field_titleItem(genlist, + &(ad->itc_group_item), + "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL); + + /* f.noti vib */ + if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) < 0) + vconf_value = SETTING_DEFAULT_NOTI_VIB_INT; /* default value of notification vibration volume : 5 */ + + (void)setting_create_Gendial_field_titleItem(genlist, + &(itc_group_item), + SETTING_SOUND_TEXT_NOTIFICATION, NULL); + ad->data_vib_volume = + setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL, + NULL, + SWALLOW_Type_LAYOUT_SLIDER, + IMG_VIBRATION_ICON_01, + IMG_VIBRATION_ICON_02, vconf_value, + NULL,//SETTING_SOUND_TEXT_NOTIFICATION, + NULL, + setting_profile_sound_main_vib_sound_slider_value_change_cb); + if (ad->data_vib_volume) { + ad->data_vib_volume->win_main = ad->win_main_layout; + ad->data_vib_volume->evas = ad->evas; + ad->data_vib_volume->isIndicatorVisible = true; + ad->data_vib_volume->slider_min = 0; + ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX; + ad->data_vib_volume->userdata = ad; + ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb; + ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb; + ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP; + } else { + SETTING_TRACE_ERROR("ad->data_vib_volume is NULL"); + } + + /* i.haptic vib */ + if (vconf_get_int + (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0) + vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT; /* default value of haptic vibration volume : 3 */ + + (void)setting_create_Gendial_field_titleItem(genlist, + &(itc_group_item), + "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL); + ad->data_touch_vib = + setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL, + NULL, + SWALLOW_Type_LAYOUT_SLIDER, + IMG_VIBRATION_ICON_01, + IMG_VIBRATION_ICON_02, vconf_value, + NULL, NULL, + setting_profile_sound_main_touchVib_sound_slider_value_change_cb); + if (ad->data_touch_vib) { + ad->data_touch_vib->win_main = ad->win_main_layout; + ad->data_touch_vib->evas = ad->evas; + ad->data_touch_vib->isIndicatorVisible = true; + ad->data_touch_vib->slider_min = 0; + ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX; + ad->data_touch_vib->userdata = ad; + ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb; + ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb; + ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP; + } else { + SETTING_TRACE_ERROR("ad->data_touch_vib is NULL"); + } + + setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon), + NULL, ad, + SWALLOW_Type_LAYOUT_SPECIALIZTION_X, + NULL, NULL, 0, SOUND_DESC, NULL, NULL); elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL), ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); /* Touch sounds */ + if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0) + vconf_value = TRUE; /* default value of touch sounds : on */ + ad->data_touch_sounds = setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon), setting_profile_sound_main_mouse_up_Gendial_list_cb, @@ -526,17 +787,15 @@ static Evas_Object *__get_main_list(void *data) setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon), NULL, ad, - SWALLOW_Type_LAYOUT_SPECIALIZTION, + SWALLOW_Type_LAYOUT_SPECIALIZTION_X, NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL); elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL), ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); - item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL, - ELM_GENLIST_ITEM_NONE, NULL, NULL); - elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); - __change_state_of_sliderbars(ad); + evas_object_smart_callback_add(genlist, "unrealized", __main_list_unrealized_cb, ad); + ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist; return ad->sub_view[SETTING_PROF_VIEW_VOL]; @@ -597,12 +856,6 @@ static Evas_Object *__get_ringtone_list(void *data) SETTING_SOUND_TEXT_NOTIFICATION, NULL); - char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = { - _(SETTING_SOUND_TEXT_REPEAT_ONCE), - _(SETTING_SOUND_TEXT_REPEAT_2MIN), - _(SETTING_SOUND_TEXT_REPEAT_5MIN), - _(SETTING_SOUND_TEXT_REPEAT_10MIN) - }; int repeat_value = 0; /* b-1. msg ringtone */ @@ -641,7 +894,7 @@ static Evas_Object *__get_ringtone_list(void *data) setting_profile_sound_main_mouse_up_Gendial_list_cb, ad, SWALLOW_Type_INVALID, SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT, - repeat_type[repeat_value]); + _(repeat_type[repeat_value])); if (ad->data_msg_alert_repeat) { ad->data_msg_alert_repeat->int_slp_setting_binded = INT_SLP_SETTING_MSG_ALERT_REPEAT; @@ -686,7 +939,7 @@ static Evas_Object *__get_ringtone_list(void *data) setting_profile_sound_main_mouse_up_Gendial_list_cb, ad, SWALLOW_Type_INVALID, SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT, - repeat_type[repeat_value]); + _(repeat_type[repeat_value])); if (ad->data_email_alert_repeat) { ad->data_email_alert_repeat->int_slp_setting_binded = INT_SLP_SETTING_EMAIL_ALERT_REPEAT; @@ -712,8 +965,8 @@ static void __view_change_cb(void *data, Evas_Object *obj, void *event_info) SettingProfileUG *ad = (SettingProfileUG *) data; - if (device_haptic_stop_play(ad->hnd_hpt) != 0) { - SETTING_TRACE("ERROR device_haptic_stop_play"); + if (haptic_stop_all_effects(ad->hnd_hpt) != 0) { + SETTING_TRACE("ERROR haptic_stop_all_effects"); /* return; */ } setting_profile_close_all_mm_players(ad); @@ -725,7 +978,7 @@ static void __view_change_cb(void *data, Evas_Object *obj, void *event_info) //SETTING_TRACE("tab_lable:%s", tab_lable); if (0 == safeStrCmp(tab_lable, VOLUME_STR)) { if(ad->hnd_hpt) - device_haptic_stop_play(ad->hnd_hpt); + haptic_stop_all_effects(ad->hnd_hpt); sub_view = __get_main_list(ad); } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) { sub_view = __get_ringtone_list(ad); @@ -768,13 +1021,14 @@ static int setting_profile_sound_main_create(void *cb) ad->ctrl_bar = tabbar; elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND); elm_object_style_set(tabbar, "tabbar"); + elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE); ad->ctrl_item[0] = elm_toolbar_item_append(tabbar, - NULL, + IMG_CTRL_ICON_VOLUME, VOLUME_STR, __view_change_cb, ad); ad->ctrl_item[1] = elm_toolbar_item_append(tabbar, - NULL, + IMG_CTRL_ICON_RINGTONE, RINGTONE_STR, __view_change_cb, ad); elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS); @@ -799,6 +1053,8 @@ static int setting_profile_sound_main_destroy(void *cb) SettingProfileUG *ad = (SettingProfileUG *) cb; + __setting_profile_ug_key_ungrab(ad); + if (ad->ly_main != NULL) { //Fix the memory leak, //Manage ad->sub_view[] separately, unset first, then delete in together @@ -858,8 +1114,7 @@ static int setting_profile_sound_main_cleanup(void *cb) * ***************************************************/ -static void -setting_profile_sound_main_click_softkey_cancel_cb(void *data, +static void setting_profile_sound_main_click_softkey_cancel_cb(void *data, Evas_Object *obj, void *event_info) { @@ -871,8 +1126,8 @@ setting_profile_sound_main_click_softkey_cancel_cb(void *data, /* close mm plaer */ setting_profile_close_all_mm_players(ad); /* close vibration */ - if (device_haptic_stop_play(ad->hnd_hpt) != 0) { - SETTING_TRACE("ERROR device_haptic_stop_play"); + if (haptic_stop_all_effects(ad->hnd_hpt) != 0) { + SETTING_TRACE("ERROR haptic_stop_all_effects"); /* return; */ } @@ -887,6 +1142,8 @@ static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void ret_if(priv == NULL); SettingProfileUG *ad = (SettingProfileUG *) priv; + __setting_profile_ug_key_grab(ad); + if (ug) { ug_destroy(ug); ad->ug_loading = NULL; @@ -968,7 +1225,7 @@ setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode, switch (mode) { case UG_MODE_FULLVIEW: evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(ad->win_get, base); + //elm_win_resize_object_add(ad->win_get, base); evas_object_show(base); break; default: @@ -1008,18 +1265,18 @@ static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad) pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR); if (pa_cur_ringtone == NULL) { - pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE; + pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE); } dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH; } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) { pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR); if (pa_cur_ringtone == NULL) - pa_cur_ringtone = SETTING_DEFAULT_MSG_TONE; + pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE); dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH; } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) { pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR); if (pa_cur_ringtone == NULL) - pa_cur_ringtone = SETTING_DEFAULT_EMAIL_TONE; + pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE); dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH; } SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone); @@ -1041,9 +1298,12 @@ static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad) FREE(cbs); /** @todo verify it's valid */ - if(pa_cur_ringtone) - FREE(pa_cur_ringtone); + if(pa_cur_ringtone) { + free(pa_cur_ringtone); + pa_cur_ringtone = NULL; + } + __setting_profile_ug_key_ungrab(ad); return; } @@ -1094,14 +1354,14 @@ setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj, int err = 0; char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,}; svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file)); - device_haptic_stop_play(ad->hnd_hpt); - err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5)); + haptic_stop_all_effects(ad->hnd_hpt); + err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5) * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL); if (err < 0) SETTING_TRACE("Failed to play haptic monotone"); } else { - if (device_haptic_stop_play(ad->hnd_hpt) != 0) { - SETTING_TRACE("ERROR device_haptic_stop_play"); + if (haptic_stop_all_effects(ad->hnd_hpt) != 0) { + SETTING_TRACE("ERROR haptic_stop_all_effects"); } setting_disable_genlist_item(ad->data_vib_volume->item); setting_disable_genlist_item(ad->data_touch_vib->item); @@ -1114,6 +1374,12 @@ setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj, elm_check_state_set(list_item->eo_check, !state); } } + else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) { + if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, list_item->chk_status) < 0) { + list_item->chk_status = !state; + elm_check_state_set(list_item->eo_check, !state); + } + } /* end */ @@ -1136,7 +1402,7 @@ setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data, SettingProfileUG *ad = data; if(ad->hnd_hpt) - device_haptic_stop_play(ad->hnd_hpt); + haptic_stop_all_effects(ad->hnd_hpt); SETTING_TRACE("clicking item[%s]", _(list_item->keyStr)); if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr) @@ -1164,13 +1430,43 @@ setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data, } } return; + } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) { + int old_status = elm_check_state_get(list_item->eo_check); + if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) { + /* new status */ + list_item->chk_status = !old_status; + elm_check_state_set(list_item->eo_check, list_item->chk_status); + if (list_item->chk_status) { + setting_enable_genlist_item(ad->data_vib_volume->item); + setting_enable_genlist_item(ad->data_touch_vib->item); + + /* Play vib if vib turns on */ + int err = 0; + char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,}; + svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file)); + haptic_stop_all_effects(ad->hnd_hpt); + err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5) * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL); + + if (err < 0) + SETTING_TRACE("Failed to play haptic monotone"); + } else { + if (haptic_stop_all_effects(ad->hnd_hpt) != 0) { + SETTING_TRACE("ERROR haptic_stop_all_effects"); + } + setting_disable_genlist_item(ad->data_vib_volume->item); + setting_disable_genlist_item(ad->data_touch_vib->item); + } + } + return; } else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) { int old_status = elm_check_state_get(list_item->eo_check); /* To do : set vconfkey for touch sounds */ - - list_item->chk_status = !old_status; - elm_check_state_set(list_item->eo_check, list_item->chk_status); + if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) { + /* new status */ + list_item->chk_status = !old_status; + elm_check_state_set(list_item->eo_check, list_item->chk_status); + } } /* end */ else if (ad->data_msg_alert_repeat == list_item @@ -1199,7 +1495,7 @@ setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data if(list_item->chk_status != (int)(val+0.5)) { list_item->chk_status = (int)(val+0.5); - sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)list_item->chk_status); + sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status); SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val); } } @@ -1223,7 +1519,7 @@ setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data, if(list_item->chk_status != (int)(val+0.5)) { list_item->chk_status = val; - sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)list_item->chk_status); + sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status); SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val); } } @@ -1246,7 +1542,7 @@ setting_profile_sound_main_media_sound_slider_value_change_cb(void *data, if(list_item->chk_status != (int)(val+0.5)) { list_item->chk_status = val; - sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)list_item->chk_status); + sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status); SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val); } } @@ -1270,8 +1566,79 @@ settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data, if(list_item->chk_status != (int)(val+0.5)) { list_item->chk_status = val; - sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)list_item->chk_status); + sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status); SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val); } } +static void +setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data, + Evas_Object *obj, + void *event_info) +{ + /* error check */ + ret_if(data == NULL); + + static double priv_val_db = 5.0; + static int priv_val_int = 0; + double val = elm_slider_value_get(obj); + SETTING_TRACE("val = %f", val); + Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data; + SettingProfileUG *ad = list_item->userdata; + + int value; + int err; + + value = (int)(val + 0.5); /* to sync displayed value on slider */ + list_item->chk_status = value; + if (value != priv_val_int) { + vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, list_item->chk_status); + char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,}; + svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file)); + haptic_stop_all_effects(ad->hnd_hpt); + err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL); + + if (err < 0) + SETTING_TRACE("Failed to play haptic monotone"); + priv_val_int = value; + } + priv_val_db = val; + +} + +static void +setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data, + Evas_Object * + obj, void + *event_info) +{ + /* error check */ + ret_if(data == NULL); + + static double priv_val_db = 3.0; + static int priv_val_int = 0; + double val = elm_slider_value_get(obj); + SETTING_TRACE("val = %f", val); + Setting_GenGroupItem_Data *list_item = + (Setting_GenGroupItem_Data *) data; + SettingProfileUG *ad = list_item->userdata; + + int value; + int err; + + value = (int)(val + 0.5); /* to sync displayed value on slider */ + list_item->chk_status = value; + if (value != priv_val_int) { + vconf_set_int (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, list_item->chk_status); + char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,}; + svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file)); + haptic_stop_all_effects(ad->hnd_hpt); + err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL); + + if (err < 0) + SETTING_TRACE("Failed to play haptic monotone"); + priv_val_int = value; + } + priv_val_db = val; +} +