From d5bd0f4f8eab18404205a6b20ff17695ef2ed985 Mon Sep 17 00:00:00 2001 From: "xiaolong_.ma" Date: Mon, 3 Sep 2012 15:07:50 +0800 Subject: [PATCH] [Request]initial the 2.0 beta. --- .gitignore | 17 ++++++ alarm/CMakeLists.txt | 2 +- alarm/include/alarm_define.h | 2 +- alarm/include/alarm_string.h | 5 -- alarm/src/alarm_subview_type.c | 7 +-- alarm/src/alarm_view_edit.c | 6 +- clock-common/CMakeLists.txt | 2 +- clock-common/include/clock_fwk_sound.h | 4 -- clock-common/src/clock_fwk_sound.c | 108 +-------------------------------- debian/changelog | 0 packaging/org.tizen.clock.spec | 3 +- res/icon/03_mainmenu_icon_clock.png | Bin 13392 -> 13850 bytes res/icon/menu_icon_clock.png | Bin 13392 -> 8515 bytes ring/CMakeLists.txt | 2 +- ring/include/ring.h | 3 - ring/src/ring_fwk_sound.c | 37 +++-------- ring/src/ring_fwk_util.c | 6 -- 17 files changed, 35 insertions(+), 169 deletions(-) create mode 100644 .gitignore mode change 100644 => 100755 debian/changelog mode change 100644 => 100755 packaging/org.tizen.clock.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ffa6b2e --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +cscope.file +cscope.in.out +cscope.out +cscope.po.out +tags +*.install +*.debhelper +*.substvars +*.log +files +build-stamp +configure-stamp +cmake_build_tmp +debian/tmp +debian/com.samsung.clock +debian/com.samsung.clock-dbg +debian/com.samsung.clock-dev diff --git a/alarm/CMakeLists.txt b/alarm/CMakeLists.txt index 8351284..de76f8d 100644 --- a/alarm/CMakeLists.txt +++ b/alarm/CMakeLists.txt @@ -30,7 +30,7 @@ pkg_check_modules(alm_pkgs REQUIRED elementary appcore-efl gobject-2.0 gmodule-2.0 dlog utilX vconf heynoti - mm-sound mm-player devman_haptic mm-session + mm-sound mm-player mm-session ui-gadget-1 bundle aul alarm-service alarm-engine ecore-imf ecore-x ecore ecore-file ecore-input diff --git a/alarm/include/alarm_define.h b/alarm/include/alarm_define.h index f948d30..d684389 100644 --- a/alarm/include/alarm_define.h +++ b/alarm/include/alarm_define.h @@ -38,7 +38,7 @@ #define MAX_ALARM_NUMBER (40) #define SNOOZE_DURATION_ITEM_NUM (3) #define SNOOZE_REPEAT_ITEM_NUM (3) -#define TYPE_ITEM_NUM (3) +#define TYPE_ITEM_NUM (1) #define ALARM_NAME_MAX_LEGNTH (15) #define TYPE_NUM (6) /* 7 */ diff --git a/alarm/include/alarm_string.h b/alarm/include/alarm_string.h index f6d13a1..5b004d2 100644 --- a/alarm/include/alarm_string.h +++ b/alarm/include/alarm_string.h @@ -95,11 +95,6 @@ /*alarm_subview_type.c*/ #define STRING_ALARM_IDS_ALM_BODY_ALERTTYEP_MELODY "IDS_ALM_BODY_ALERTTYEP_MELODY" -#define STRING_ALARM_IDS_ALM_BODY_INCREASING_MELODY "IDS_ALM_BODY_INCREASING_MELODY" -#define STRING_ALARM_IDS_ALM_BODY_ALERTTYEP_VIBRATION "IDS_ALM_BODY_ALERTTYEP_VIBRATION" -#define STRING_ALARM_IDS_ALM_BODY_ALERTTYEP_VIBRATION_THEN_MELODY "IDS_ALM_BODY_ALERTTYEP_VIBRATION_THEN_MELODY" -#define STRING_ALARM_IDS_ALM_BODY_VIBRATION_AND_MELODY "IDS_ALM_BODY_VIBRATION_AND_MELODY" -#define STRING_ALARM_IDS_ALM_BODY_VIBRATION_AND_INCREASING_MELODY "IDS_ALM_BODY_VIBRATION_AND_INCREASING_MELODY" /*alarm_view_del.c*/ #define STRING_ALARM_DEL_NBEAT "alarm_del_nbeat" diff --git a/alarm/src/alarm_subview_type.c b/alarm/src/alarm_subview_type.c index 7cc4688..4d14127 100644 --- a/alarm/src/alarm_subview_type.c +++ b/alarm/src/alarm_subview_type.c @@ -30,8 +30,6 @@ static int _alarm_type_create(struct appdata *ad); ***********************************************************************/ char *title[TYPE_ITEM_NUM] = { STRING_ALARM_IDS_ALM_BODY_ALERTTYEP_MELODY, - STRING_ALARM_IDS_ALM_BODY_ALERTTYEP_VIBRATION, - STRING_ALARM_IDS_ALM_BODY_VIBRATION_AND_MELODY, }; static Ecore_Timer *sp_delaytimer = NULL; @@ -111,9 +109,6 @@ static void _gl_sel_type_sub(void *data, Evas_Object * obj, void *event_info) elm_genlist_item_update(ad->view_setting->item_type); //set volume visible Eina_Bool bret = EINA_FALSE; - if(IS_EQUAL(CLK_SOUND_TYPE_VIBRATION, item_data->index)) { - bret = EINA_TRUE; - } elm_object_item_disabled_set(view->item_volume, bret); } @@ -185,7 +180,7 @@ static Eina_Bool _alarm_type_play_sound_ex(void *data) } view->pSoundMgrForType = clk_create_sound_mgr(s_typeId, view->tmp_alarm.tone, value, - HAPTIC_FEEDBACK_LEVEL_AUTO, EINA_TRUE, NULL, + EINA_TRUE, NULL, NULL, NULL, MAX_RINGING_TIME); ECORE_TIMER_DELIF(sp_delaytimer); return ECORE_CALLBACK_CANCEL; diff --git a/alarm/src/alarm_view_edit.c b/alarm/src/alarm_view_edit.c index a1636f0..ed3b600 100644 --- a/alarm/src/alarm_view_edit.c +++ b/alarm/src/alarm_view_edit.c @@ -173,10 +173,8 @@ static Elm_Genlist_Item_Class itc_type = { .func.del = default_gl_dg_item_del, }; -static char *g_title_type[6] = { +static char *g_title_type[1] = { STRING_ALARM_IDS_ALM_BODY_ALERTTYEP_MELODY, - STRING_ALARM_IDS_ALM_BODY_ALERTTYEP_VIBRATION, - STRING_ALARM_IDS_ALM_BODY_VIBRATION_AND_MELODY, }; static char *_gl_label_get_tone(void *data, Evas_Object * obj, @@ -1153,7 +1151,7 @@ static int _alarm_volume_play_sound(struct appdata *ad, int volume_value) view->pSoundMgrForVolume = clk_create_sound_mgr(CLK_SOUND_TYPE_MELODY, view->tmp_alarm.tone, volume_value, - HAPTIC_FEEDBACK_LEVEL_AUTO, EINA_TRUE, + EINA_TRUE, NULL, _alarm_volume_play_sound_end_cb, ad, MAX_RINGING_TIME); return SUCCESS; diff --git a/clock-common/CMakeLists.txt b/clock-common/CMakeLists.txt index d08021f..db138b5 100644 --- a/clock-common/CMakeLists.txt +++ b/clock-common/CMakeLists.txt @@ -20,7 +20,7 @@ pkg_check_modules(clk_com_pkgs REQUIRED gobject-2.0 gmodule-2.0 dlog utilX vconf icu-i18n - mm-sound mm-player devman_haptic + mm-sound mm-player ui-gadget-1 bundle aul alarm-service alarm-engine ecore-imf ecore-x ecore ecore-file ecore-input diff --git a/clock-common/include/clock_fwk_sound.h b/clock-common/include/clock_fwk_sound.h index abec8f7..9addb6f 100644 --- a/clock-common/include/clock_fwk_sound.h +++ b/clock-common/include/clock_fwk_sound.h @@ -18,7 +18,6 @@ #ifndef __CLK_FWK_SOUND_H__ #define __CLK_FWK_SOUND_H__ -#include #include #include #include @@ -42,8 +41,6 @@ typedef enum { CLK_SOUND_TYPE_OFF = -1, CLK_SOUND_TYPE_MELODY = 0, - CLK_SOUND_TYPE_VIBRATION, - CLK_SOUND_TYPE_VIBRATION_AND_MELODY, CLK_SOUND_TYPE_MAX, } clk_sound_type_t; //******************typedef************************************* @@ -66,7 +63,6 @@ int clk_play_keysound(int volume_value); clk_sound_mgr_t *clk_create_sound_mgr(clk_sound_type_t type, const char *pFile, int volume_value, - int vibration_level, Eina_Bool bPlayAg, MMMessageCallback cb, Callback_end_fun end_fun, diff --git a/clock-common/src/clock_fwk_sound.c b/clock-common/src/clock_fwk_sound.c index f8aab69..079ee64 100644 --- a/clock-common/src/clock_fwk_sound.c +++ b/clock-common/src/clock_fwk_sound.c @@ -31,12 +31,10 @@ struct _clk_sound_mgr_t { int _magic; clk_sound_type_t create_type; //control type MMHandleType pmm_player; //for playing sound - int dev_handle; //for playing vibration char file[MAX_TONE_NAME]; //file name MMMessageCallback msg_cb; //msg callback fun Ecore_Timer *control_timer; //set timer for stop int volume_value; //volume init value - int vibration_level; //vibration_level int increased_volume_value; //for increased volume volume_type_t volume_type; //volume type int volume_step; //volume step, max volume @@ -56,11 +54,7 @@ static int _clk_sound_msg_default_cb(int message, void *data, void *user_data); static int _clk_sound_create_player(clk_sound_mgr_t * pMgr); static int _clk_stop_sound(clk_sound_mgr_t * pMgr); static int _clk_sound_start_sound_mgr(clk_sound_mgr_t * pMgr); -static int _clk_sound_create_vibration(clk_sound_mgr_t * pMgr); -static int _clk_stop_vibration(clk_sound_mgr_t * pMgr); // device_haptic_stop_play(dev_handle) static int _clk_play_sound(clk_sound_mgr_t * pMgr); -static int _clk_play_vibration(clk_sound_mgr_t * pMgr); -static int _clk_play_vibration_and_sound(clk_sound_mgr_t * pMgr); static int _clk_play_sound_continue(clk_sound_mgr_t * pMgr); static int _clk_get_volume(clk_sound_mgr_t * pMgr); /********************************************************************** @@ -100,8 +94,6 @@ static int _clk_get_volume(clk_sound_mgr_t * pMgr) "MAGIC_CHECK_ERROR(pMgr) error"); switch (pMgr->create_type) { case CLK_SOUND_TYPE_MELODY: - - case CLK_SOUND_TYPE_VIBRATION_AND_MELODY: return pMgr->volume_value * CLK_SOUND_MULTI_RATE; default: return 0; @@ -161,7 +153,6 @@ static Eina_Bool _clk_sound_timer_stop_cb(void *data) CLK_FUN_BEG(); /* stop sound and vibe */ _clk_stop_sound(pMgr); - _clk_stop_vibration(pMgr); ECORE_TIMER_DELIF(pMgr->control_timer); //when end. do sth.. if (pMgr->end_fun) { @@ -190,8 +181,6 @@ static int _clk_sound_create_player(clk_sound_mgr_t * pMgr) CLK_FUN_BEG(); CLK_RETVM_IF(IS_EQUAL(NULL, pMgr), FAILED, "pMgr is null"); - CLK_RETVM_IF(IS_EQUAL(CLK_SOUND_TYPE_VIBRATION, pMgr->create_type), - SUCCESS, "only vibration, don't create player"); if(IS_EQUAL(CLK_SOUND_TYPE_MELODY, pMgr->create_type)) { CLK_RETVM_IF(IS_EQUAL(NULL, pMgr->file), FAILED, "pMgr->file is null"); } @@ -231,29 +220,6 @@ static int _clk_sound_create_player(clk_sound_mgr_t * pMgr) return ret; } -/** -* send -* This function is used to create vibaration -* @param pMgr[in] pointer to clk_sound_mgr_t -* @return when success, return SUCCESS or FAILED if error -* @exception -*/ -static int _clk_sound_create_vibration(clk_sound_mgr_t * pMgr) -{ - int nErr = SUCCESS; - int ret = SUCCESS; - - CLK_RETVM_IF(IS_EQUAL(NULL, pMgr), FAILED, "pMgr is null"); - CLK_RETVM_IF(MAGIC_CHECK_ERROR(pMgr), FAILED, - "MAGIC_CHECK_ERROR(pMgr) error"); - CLK_RETVM_IF(IS_EQUAL(CLK_SOUND_TYPE_MELODY, pMgr->create_type), - SUCCESS, "only sound, don't create vibration"); - pMgr->dev_handle = device_haptic_open(DEV_IDX_0, 0); - CLK_RETVM_IF(pMgr->dev_handle <= 0, pMgr->dev_handle, - "device_haptic_open error, errorId=%d", pMgr->dev_handle); - End: - return ret; -} /** * send @@ -271,12 +237,6 @@ static int _clk_sound_start_sound_mgr(clk_sound_mgr_t * pMgr) case CLK_SOUND_TYPE_MELODY: _clk_play_sound(pMgr); break; - case CLK_SOUND_TYPE_VIBRATION: - _clk_play_vibration(pMgr); - break; - case CLK_SOUND_TYPE_VIBRATION_AND_MELODY: - _clk_play_vibration_and_sound(pMgr); - break; default: CLK_ERR("error type=%d", pMgr->create_type); break; @@ -302,46 +262,6 @@ static int _clk_play_sound(clk_sound_mgr_t * pMgr) /** * send -* This function is used to play vibration -* @param pMgr[in] pointer to clk_sound_mgr_t -* @return when success, return SUCCESS or FAILED if error -* @exception -*/ -static int _clk_play_vibration(clk_sound_mgr_t * pMgr) -{ - retvm_if(!pMgr, FAILED, "pMgr null"); - retvm_if(MAGIC_CHECK_ERROR(pMgr), FAILED, - "MAGIC_CHECK_ERROR(pMgr) error"); - return device_haptic_play_pattern(pMgr->dev_handle, - EFFCTVIBE_NOTIFICATION, - HAPTIC_INFINITE_ITERATION, - pMgr->vibration_level); -} - -/** -* send -* This function is used to play vibration and sound -* @param pMgr[in] pointer to clk_sound_mgr_t -* @return when success, return SUCCESS or FAILED if error -* @exception -*/ -static int _clk_play_vibration_and_sound(clk_sound_mgr_t * pMgr) -{ - retvm_if(!pMgr, FAILED, "pMgr null"); - retvm_if(MAGIC_CHECK_ERROR(pMgr), FAILED, - "MAGIC_CHECK_ERROR(pMgr) error"); - int ret = SUCCESS; - ret = - device_haptic_play_pattern(pMgr->dev_handle, EFFCTVIBE_NOTIFICATION, - HAPTIC_INFINITE_ITERATION, - pMgr->vibration_level); - ret |= mm_player_realize(pMgr->pmm_player); - ret |= mm_player_start(pMgr->pmm_player); - return ret; -} - -/** -* send * This function is used to stop sound * @param pMgr[in] pointer to clk_sound_mgr_t * @return when success, return SUCCESS or FAILED if error @@ -365,28 +285,6 @@ static int _clk_stop_sound(clk_sound_mgr_t * pMgr) return ret; } -/** -* send -* This function is used to stop vibration -* @param pMgr[in] pointer to clk_sound_mgr_t -* @return when success, return SUCCESS or FAILED if error -* @exception -*/ -static int _clk_stop_vibration(clk_sound_mgr_t * pMgr) -{ - retvm_if(!pMgr, FAILED, "pMgr null"); - retvm_if(MAGIC_CHECK_ERROR(pMgr), FAILED, - "MAGIC_CHECK_ERROR(pMgr) error"); - retvm_if(pMgr->dev_handle <= 0, FAILED, "pMgr->dev_handle <= 0"); - int ret = SUCCESS; - CLK_FUN_BEG(); - ret = device_haptic_stop_play(pMgr->dev_handle); - ret |= device_haptic_close(pMgr->dev_handle); - pMgr->dev_handle = 0; - CLK_FUN_END(); - return ret; -} - /********************************************************************** ******************Global function ref************************************* ***********************************************************************/ @@ -500,7 +398,6 @@ int clk_play_keysound(int volume_value) clk_sound_mgr_t *clk_create_sound_mgr(clk_sound_type_t type, const char *pFile, int volume_value, - int vibration_level, Eina_Bool bPlayAg, MMMessageCallback cb, Callback_end_fun end_fun, @@ -521,7 +418,6 @@ clk_sound_mgr_t *clk_create_sound_mgr(clk_sound_type_t type, } pMgr->msg_cb = cb ? cb : _clk_sound_msg_default_cb; pMgr->volume_value = volume_value; - pMgr->vibration_level = vibration_level; pMgr->increased_volume_value = volume_value; pMgr->volume_type = CLK_SOUND_VOLUME_TYPE; pMgr->volume_step = clk_sound_get_volume_step(CLK_SOUND_VOLUME_TYPE); @@ -535,10 +431,9 @@ clk_sound_mgr_t *clk_create_sound_mgr(clk_sound_type_t type, } if (!IS_EQUAL(pMgr->create_type, CLK_SOUND_TYPE_OFF)) { _clk_sound_create_player(pMgr); - _clk_sound_create_vibration(pMgr); _clk_sound_start_sound_mgr(pMgr); } - //set a timer for stop vibration and music + //set a timer for stop music pMgr->control_timer = ecore_timer_add(time_sound, _clk_sound_timer_stop_cb, pMgr); ret = pMgr; @@ -563,7 +458,6 @@ int clk_delete_sound_mgr(clk_sound_mgr_t * pMgr) ECORE_TIMER_DELIF(pMgr->control_timer); _clk_stop_sound(pMgr); - _clk_stop_vibration(pMgr); // // mm_sound_route_set_system_policy(pMgr->saved_route); //FREEIF(pMgr); diff --git a/debian/changelog b/debian/changelog old mode 100644 new mode 100755 diff --git a/packaging/org.tizen.clock.spec b/packaging/org.tizen.clock.spec old mode 100644 new mode 100755 index c87e508..1566c11 --- a/packaging/org.tizen.clock.spec +++ b/packaging/org.tizen.clock.spec @@ -2,7 +2,7 @@ Name: org.tizen.clock Summary: background image library Version: 0.2.0 -Release: 47 +Release: 48 License: TBD Source0: %{name}-%{version}.tar.gz BuildRequires: cmake @@ -24,7 +24,6 @@ BuildRequires: pkgconfig(alarm-engine) BuildRequires: pkgconfig(mm-player) BuildRequires: pkgconfig(mm-session) BuildRequires: pkgconfig(mm-sound) -BuildRequires: pkgconfig(devman_haptic) BuildRequires: pkgconfig(xext) BuildRequires: pkgconfig(xcomposite) BuildRequires: pkgconfig(icu-i18n) diff --git a/res/icon/03_mainmenu_icon_clock.png b/res/icon/03_mainmenu_icon_clock.png index 506b31f8ce78e2c3b1b84aec24388c83e072ee06..adaf0a5ba2f553744bdeef0b552c70f009fce2f7 100644 GIT binary patch delta 11229 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 delta 10767 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 Pk0+oYqbgl3X%_N7*1d;# diff --git a/ring/CMakeLists.txt b/ring/CMakeLists.txt index c634075..6c913a2 100755 --- a/ring/CMakeLists.txt +++ b/ring/CMakeLists.txt @@ -46,7 +46,7 @@ pkg_check_modules(ring_pkgs REQUIRED dlog appcore-efl utilX vconf alarm-service alarm-engine - mm-player mm-session mm-sound devman_haptic + mm-player mm-session mm-sound pmapi eina ecore-x ecore ecore-file ecore-input sensor diff --git a/ring/include/ring.h b/ring/include/ring.h index 3ca3e47..0a2c05e 100644 --- a/ring/include/ring.h +++ b/ring/include/ring.h @@ -115,14 +115,11 @@ struct appdata { clk_sound_mgr_t *sound_mgr; Ecore_Timer *timer; Ecore_Timer *lowbattery_timer; - //int haptic_devhandle; // For Haptic device int vconf_call_state; int vconf_alert_on_call; Eina_Bool vconf_system_sound; - Eina_Bool vconf_system_vibration; int vconf_system_sound_volume; - int vconf_system_vibration_level; int saved_lock_state; // set it at entering alarm-ring, and recover it to target at exiting alarm-ring int motion_sensor_handle; }; diff --git a/ring/src/ring_fwk_sound.c b/ring/src/ring_fwk_sound.c index 5d63969..eb0b04c 100644 --- a/ring/src/ring_fwk_sound.c +++ b/ring/src/ring_fwk_sound.c @@ -102,10 +102,7 @@ void _ring_critical_low_popup_cb(void *data, Evas_Object *obj, void *event_info) * 1>in crital case: popup warning and exit * other case: execute 10 sec * 2>sound type: -* vibration, play sound with mix volume: value is 1 -* melody, vibartion and melody: play melody -* increasing melody, viabrtion and increasing melody: play increasing melody -* vibartion then melody: play sound with mix volume: value is 1 , then play melody +* melody: play melody * 3>need to register VONF_KEY changed callback, when in low battery, rules as 1-3) */ static int _ring_volume_play_sound_low_battery(void *data) @@ -130,14 +127,9 @@ static int _ring_volume_play_sound_low_battery(void *data) clk_sound_type_t sound_type = ad->data_s->type; int volume = ad->data_s->volume; int time_control = 10; - int vibration_level = HAPTIC_FEEDBACK_LEVEL_AUTO; // - if (IS_EQUAL(sound_type, CLK_SOUND_TYPE_MELODY) || - IS_EQUAL(sound_type, CLK_SOUND_TYPE_VIBRATION_AND_MELODY)) { + if (IS_EQUAL(sound_type, CLK_SOUND_TYPE_MELODY)) { sound_type = CLK_SOUND_TYPE_MELODY; - } else if (IS_EQUAL(sound_type, CLK_SOUND_TYPE_VIBRATION)) { - sound_type = CLK_SOUND_TYPE_MELODY; - volume = 1; } else { CLK_ERR("sound_type is error"); sound_type = CLK_SOUND_TYPE_MELODY; @@ -150,7 +142,7 @@ static int _ring_volume_play_sound_low_battery(void *data) ring_volume_stop_sound(ad); //time ad->sound_mgr = - clk_create_sound_mgr(sound_type, file, volume, vibration_level, + clk_create_sound_mgr(sound_type, file, volume, EINA_TRUE, NULL, _ring_sound_cb_end_fun, ad, time_control); return SUCCESS; @@ -166,7 +158,7 @@ static int _ring_volume_play_sound_low_battery(void *data) * to timer: low battery > call setting > system setting * to alarm: low battery > call setting > alarm setting * when timer, need to get system setting, and call setting -* and volume and vibration is also need to judge with system setting value +* and volume is also need to judge with system setting value */ static int _ring_volume_play_sound_timer(void *data) { @@ -174,13 +166,9 @@ static int _ring_volume_play_sound_timer(void *data) struct appdata *ad = (struct appdata *)data; clk_sound_type_t sound_type = ad->data_s->type; int volume = ad->data_s->volume; - int vibration_level = HAPTIC_FEEDBACK_LEVEL_AUTO; - if (ad->vconf_system_sound && ad->vconf_system_vibration) { - sound_type = CLK_SOUND_TYPE_VIBRATION_AND_MELODY; - } else if (ad->vconf_system_vibration) { - sound_type = CLK_SOUND_TYPE_VIBRATION; - } else if (ad->vconf_system_sound) { + + if (ad->vconf_system_sound) { sound_type = CLK_SOUND_TYPE_MELODY; } else { sound_type = CLK_SOUND_TYPE_OFF; @@ -188,16 +176,12 @@ static int _ring_volume_play_sound_timer(void *data) if (ad->vconf_system_sound && volume > ad->vconf_system_sound_volume) { volume = ad->vconf_system_sound_volume; } - if (ad->vconf_system_vibration) { - vibration_level = ad->vconf_system_vibration_level; - } + //call state if (IS_CALL_STATE(ad->vconf_call_state)) { if (ad->vconf_alert_on_call == 1) { sound_type = CLK_SOUND_TYPE_MELODY; - } else if (ad->vconf_alert_on_call == 2) { - sound_type = CLK_SOUND_TYPE_VIBRATION; } else { sound_type = CLK_SOUND_TYPE_OFF; } @@ -210,7 +194,7 @@ static int _ring_volume_play_sound_timer(void *data) //time int time_control = MAX_RINGING_TIME; ad->sound_mgr = - clk_create_sound_mgr(sound_type, file, volume, vibration_level, + clk_create_sound_mgr(sound_type, file, volume, EINA_TRUE, NULL, _ring_sound_cb_end_fun, ad, time_control); return SUCCESS; @@ -232,13 +216,10 @@ static int _ring_volume_play_sound_alarm(void *data) struct appdata *ad = (struct appdata *)data; clk_sound_type_t sound_type = ad->data_s->type; int volume = ad->data_s->volume; - int vibration_level = HAPTIC_FEEDBACK_LEVEL_AUTO; //call state if (IS_CALL_STATE(ad->vconf_call_state)) { if (ad->vconf_alert_on_call == 1) { sound_type = CLK_SOUND_TYPE_MELODY; - } else if (ad->vconf_alert_on_call == 2) { - sound_type = CLK_SOUND_TYPE_VIBRATION; } else { sound_type = CLK_SOUND_TYPE_OFF; } @@ -251,7 +232,7 @@ static int _ring_volume_play_sound_alarm(void *data) //time int time_control = MAX_RINGING_TIME; ad->sound_mgr = - clk_create_sound_mgr(sound_type, file, volume, vibration_level, + clk_create_sound_mgr(sound_type, file, volume, EINA_TRUE, NULL, _ring_sound_cb_end_fun, ad, time_control); return SUCCESS; diff --git a/ring/src/ring_fwk_util.c b/ring/src/ring_fwk_util.c index a5b3bb4..4ada254 100644 --- a/ring/src/ring_fwk_util.c +++ b/ring/src/ring_fwk_util.c @@ -89,14 +89,8 @@ int ring_util_state_get(struct appdata *ad) vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, (int *)&ad->vconf_system_sound); nErr |= - vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, - (int *)&ad->vconf_system_vibration); - nErr |= vconf_get_int(VCONFKEY_SETAPPL_NOTI_SOUND_VOLUME_INT, &ad->vconf_system_sound_volume); - nErr |= - vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, - &ad->vconf_system_vibration_level); return nErr; } -- 2.7.4