From 5530e8322296195137d9d757af3bf8ff99ca96cc Mon Sep 17 00:00:00 2001 From: Minho Kim Date: Fri, 5 Jul 2013 17:59:12 +0900 Subject: [PATCH] Applying ALARM type volume. --- src/_logic.c | 130 +++++++++++++++++++++-------------------------------------- src/_sound.c | 12 +++--- src/volume.h | 1 + 3 files changed, 53 insertions(+), 90 deletions(-) diff --git a/src/_logic.c b/src/_logic.c index 8bcbbdd..744f0df 100755 --- a/src/_logic.c +++ b/src/_logic.c @@ -97,24 +97,18 @@ int _cache_flush(void *data) int _close_volume(void *data) { struct appdata *ad = (struct appdata *)data; + int i = 0; retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); retvm_if(ad->flag_deleting == EINA_TRUE, -1, "Closing volume\n"); _D("start closing volume\n"); ad->flag_deleting = EINA_TRUE; - if(ad->flag_exclusive_grabed){ + for(i = 0; i < ad->count_grabed; i++) { _ungrab_key_new(ad); + _D("ungrab key : %d/%d", i+1, ad->count_grabed); } - - if(ad->flag_top_positioni_grabed){ - _ungrab_key_new(ad); - } - - if(ad->flag_shared_grabed){ - _ungrab_key_new(ad); - } - + ad->count_grabed = 0; _grab_key_new(ad, ad->input_win, SHARED_GRAB); DEL_TIMER(ad->sutimer) @@ -169,7 +163,7 @@ Eina_Bool _su_timer_cb(void *data) type = _get_volume_type(); retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: appdata is NULL\n"); retvm_if(ad->win == NULL, ECORE_CALLBACK_CANCEL, "window is NULL"); - retvm_if(evas_object_visible_get(ad->win) == EINA_FALSE && type != VOLUME_TYPE_MEDIA, ECORE_CALLBACK_CANCEL, "window is hide\n"); + retvm_if(evas_object_visible_get(ad->win) == EINA_FALSE && type == VOLUME_TYPE_RINGTONE, ECORE_CALLBACK_CANCEL, "window is hide\n"); ecore_timer_interval_set(ad->sutimer, 0.1); DEL_TIMER(ad->stimer) @@ -222,7 +216,7 @@ Eina_Bool _sd_timer_cb(void *data) type = _get_volume_type(); retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: appdata is NULL\n"); retvm_if(ad->win == NULL, ECORE_CALLBACK_CANCEL, "window is NULL"); - retvm_if(evas_object_visible_get(ad->win) == EINA_FALSE && type != VOLUME_TYPE_MEDIA, ECORE_CALLBACK_CANCEL, "window is hide\n"); + retvm_if(evas_object_visible_get(ad->win) == EINA_FALSE && type == VOLUME_TYPE_RINGTONE, ECORE_CALLBACK_CANCEL, "window is hide\n"); ecore_timer_interval_set(ad->sdtimer, 0.1); DEL_TIMER(ad->stimer) @@ -246,7 +240,7 @@ Eina_Bool _sd_timer_cb(void *data) _D("already 0\n"); return ECORE_CALLBACK_RENEW; } - if(snd || ad->type == VOLUME_TYPE_MEDIA){ + if(snd || ad->type != VOLUME_TYPE_RINGTONE){ _set_sound_level(ad->type, val -1 <= 0 ? 0 : val - 1); _D("down, type(%d), step(%d) val[%d]\n", ad->type, ad->step, val+1); } @@ -293,6 +287,13 @@ Eina_Bool _volume_show(void *data) //_grab_key_new(ad, -1, TOP_POSITION_GRAB); ecore_idler_add(_grab_top_position, ad); } + else if(status == LOCK_AND_MEIDA) + { + /* type = alarm or media */ + ad->type = _get_volume_type(); + ad->step = _get_step(ad->type); + } + ad->flag_launching = EINA_TRUE; _mm_func(ad); return EINA_TRUE; @@ -317,8 +318,6 @@ static Eina_Bool _key_press_cb(void *data, int type, void *event) int is_turn_off_all_sounds = 0; struct appdata *ad = (struct appdata *)data; - status = _check_status(&lock, &mtype); - retvm_if(ev == NULL, ECORE_CALLBACK_CANCEL, "Invalid arguemnt: event is NULL\n"); retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: appdata is NULL\n"); retvm_if(ad->win == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: window is NULL\n"); @@ -337,6 +336,11 @@ static Eina_Bool _key_press_cb(void *data, int type, void *event) } status = _check_status(&lock, &mtype); + if(mtype == VOLUME_TYPE_ALARM) { + _D("VOLUME_TYPE_ALARM"); + return ECORE_CALLBACK_CANCEL; + } + if(!ad->flag_launching) { if(_volume_show(data) != EINA_TRUE) @@ -376,6 +380,7 @@ static Eina_Bool _key_press_cb(void *data, int type, void *event) vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 1); _play_vib(ad->sh); _set_icon(ad, 1); + ad->flag_vib = EINA_TRUE; _set_slider_value(ad, 0); } else{ @@ -390,6 +395,7 @@ static Eina_Bool _key_press_cb(void *data, int type, void *event) } _set_sound_level(ad->type, val + 1); _D("type (%d) set volume %d -> [%d]\n", ad->type, val, val + 1); + ad->flag_vib = EINA_FALSE; if(snd)_play_sound(ad->type); } DEL_TIMER(ad->sutimer) @@ -422,10 +428,12 @@ static Eina_Bool _key_press_cb(void *data, int type, void *event) vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 1); _play_vib(ad->sh); _set_icon(ad, 1); + ad->flag_vib = EINA_TRUE; } if(snd || ad->type != VOLUME_TYPE_RINGTONE) { _set_sound_level(ad->type, val - 1); + ad->flag_vib = EINA_FALSE; if(ad->type == VOLUME_TYPE_RINGTONE) _play_sound(ad->type); _D("type (%d) set volume %d -> [%d]\n", ad->type, val, val-1); @@ -490,20 +498,13 @@ static Eina_Bool _key_release_cb(void *data, int type, void *event) int _grab_key_new(struct appdata *ad, Ecore_X_Window _xwin, int grab_mode) { _D("%s\n", __func__); + retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n"); + Ecore_X_Display *disp = NULL; Ecore_X_Window xwin = 0; int ret = -1; - - /* ALREADY GRAB check */ - switch(grab_mode) - { - case SHARED_GRAB : if(ad->flag_shared_grabed)return -1; - break; - case EXCLUSIVE_GRAB : if(ad->flag_exclusive_grabed)return -1; - break; - case TOP_POSITION_GRAB : if(ad->flag_top_positioni_grabed)return -1; - break; - } + ad->count_grabed++; + _D("ad->count_grabed : %d", ad->count_grabed); disp = ecore_x_display_get(); retvm_if(disp == NULL, -1, "Failed to get display\n"); @@ -525,19 +526,6 @@ int _grab_key_new(struct appdata *ad, Ecore_X_Window _xwin, int grab_mode) retvm_if(ret < 0, -1, "Failed to grab key up\n"); retvm_if(ret == 1, -1, "Already grab\n"); - switch(grab_mode) - { - case SHARED_GRAB : - ad->flag_shared_grabed = EINA_TRUE; - break; - case EXCLUSIVE_GRAB : - ad->flag_exclusive_grabed = EINA_TRUE; - break; - case TOP_POSITION_GRAB : - ad->flag_top_positioni_grabed = EINA_TRUE; - break; - } - return 0; } @@ -559,13 +547,6 @@ int _ungrab_key_new(struct appdata *ad) utilx_ungrab_key(disp, ad->input_win, KEY_VOLUMEDOWN); _D("key ungrabed\n"); - if(ad->flag_exclusive_grabed) - ad->flag_exclusive_grabed = EINA_FALSE; - else if(ad->flag_top_positioni_grabed) - ad->flag_top_positioni_grabed = EINA_FALSE; - else if(ad->flag_shared_grabed) - ad->flag_shared_grabed = EINA_FALSE; - return 0; } @@ -616,13 +597,13 @@ int _check_status(int *lock, int *type) return -1; } - if (*lock == IDLELOCK_ON && *type != VOLUME_TYPE_MEDIA) { + if (*lock == IDLELOCK_ON && *type == VOLUME_TYPE_RINGTONE) { _D("lock is set, not in media\n"); return -1; } - if (*lock == IDLELOCK_ON && *type == VOLUME_TYPE_MEDIA) { - _D("lock is set, in media\n"); + if (*lock == IDLELOCK_ON && *type != VOLUME_TYPE_RINGTONE) { + _D("lock is set, in media or in alarm\n"); return 1; } _D("unlock status, normal case\n"); @@ -876,6 +857,7 @@ Eina_Bool _slider_timer_cb(void *data) vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 1); } _set_sound_level(ad->type, (int)val); + ad->flag_vib = EINA_FALSE; _set_icon(ad, 1); } if (val < 1) { @@ -888,7 +870,8 @@ Eina_Bool _slider_timer_cb(void *data) elm_slider_value_set(ad->sl, 0); _set_sound_level(ad->type, 0); _set_icon(ad, 1); - if(ad->type != VOLUME_TYPE_MEDIA){ + if(ad->flag_vib == EINA_FALSE && ad->type == VOLUME_TYPE_RINGTONE){ + ad->flag_vib = EINA_TRUE; _play_vib(ad->sh); } } @@ -900,48 +883,26 @@ Eina_Bool _slider_timer_cb(void *data) static void _slider_start_cb(void *data, Evas_Object *obj, void *event_info) { _D("%s\n", __func__); - double val = 0.0; - int snd = 0, vib = 0; + int snd= 0 ; struct appdata *ad = (struct appdata *)data; retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + ad->flag_touching = EINA_TRUE; + + DEL_TIMER(ad->ptimer) + vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd); - vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vib); + if(!snd){ +// vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, EINA_TRUE); +// _set_icon(data, -1); + } if (ad->lutimer || ad->ldtimer) { _D("return when long press is working\n"); return; } - DEL_TIMER(ad->stimer) - if (ad->sl) { - val = elm_slider_value_get(ad->sl); - val += 0.5; - if ((int)val != 0) { - if(ad->type != VOLUME_TYPE_MEDIA){ - vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 0); - vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 1); - } - _set_sound_level(ad->type, (int)val); - _set_icon(ad, 1); - } - if (val < 1) { - if(ad->type != VOLUME_TYPE_MEDIA){ - vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 0); - if(snd){ - vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 1); - } - } - elm_slider_value_set(ad->sl, 0); - _set_sound_level(ad->type, 0); - _set_icon(ad, 1); - if(ad->type != VOLUME_TYPE_MEDIA){ - _play_vib(ad->sh); - } - } - } - if(snd)_play_sound(ad->type); - ad->flag_touching = EINA_FALSE; - ADD_TIMER(ad->ptimer, 3.0, popup_timer_cb, ad) + + ADD_TIMER(ad->stimer, 0.2, _slider_timer_cb, data) } static void _slider_changed_cb(void *data, Evas_Object *obj, void *event_info) @@ -995,8 +956,9 @@ static void _slider_stop_cb(void *data, Evas_Object *obj, void *event_info) elm_slider_value_set(ad->sl, 0); _set_sound_level(ad->type, 0); _set_icon(ad, 1); - if(ad->flag_vib == EINA_FALSE && ad->type != VOLUME_TYPE_MEDIA){ + if(ad->flag_vib == EINA_FALSE && ad->type == VOLUME_TYPE_RINGTONE){ ad->flag_vib = EINA_TRUE; + _play_vib(ad->sh); } } } diff --git a/src/_sound.c b/src/_sound.c index 38a890d..cd47c35 100755 --- a/src/_sound.c +++ b/src/_sound.c @@ -228,14 +228,13 @@ void _mm_func(void *data) if(ad->device != device) { if(device == SYSTEM_AUDIO_ROUTE_PLAYBACK_DEVICE_EARPHONE && val > 9) { val = 9; + _D("%s", __func__); _set_sound_level(ad->type, val); + ad->device = device; } - ad->device = device; - } - _set_device_warning(ad, val, device); - if(ad->flag_pressing == EINA_TRUE){ - _set_slider_value(ad, val); } + //_set_device_warning(ad, val, device); + _set_slider_value(ad, val); _set_icon(ad, val); _D("type(%d) val(%d)\n", ad->type, val); } @@ -252,7 +251,8 @@ void _mm_notification_cb(void *data) void _mm_alarm_cb(void *data) { - _mm_func(data); + //_mm_func(data); + _D("VOLUME_TYPE_ALARM"); } void _mm_ringtone_cb(void *data) diff --git a/src/volume.h b/src/volume.h index 60e969e..42d34dc 100755 --- a/src/volume.h +++ b/src/volume.h @@ -111,6 +111,7 @@ struct appdata int flag_launching; /* EINA_TRUE : volume is launcing block double lauch*/ int flag_deleting; /* EINA_TRUE : closing volume, block double close_volume() */ int flag_vib; + int count_grabed; int flag_shared_grabed; int flag_top_positioni_grabed; int flag_exclusive_grabed; -- 2.7.4