Sync with private pkg. Applying sound status change flow.
authorMinho Kim <minho07.kim@samsung.com>
Wed, 3 Jul 2013 02:27:21 +0000 (11:27 +0900)
committerMinho Kim <minho07.kim@samsung.com>
Wed, 3 Jul 2013 02:27:21 +0000 (11:27 +0900)
src/_logic.c
src/_sound.c
src/_sound.h
src/volume.h

index 43beb58..c7fcf25 100755 (executable)
@@ -163,23 +163,32 @@ Eina_Bool _lu_timer_cb(void *data)
 
 Eina_Bool _su_timer_cb(void *data)
 {
-       int val = -1;
+       int val = -1, snd = 0, vib =0;
        struct appdata *ad = (struct appdata *)data;
+       int type = MM_ERROR_SOUND_VOLUME_CAPTURE_ONLY;
+       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, ECORE_CALLBACK_CANCEL, "window is hide\n");
+       retvm_if(evas_object_visible_get(ad->win) == EINA_FALSE && type != VOLUME_TYPE_MEDIA, ECORE_CALLBACK_CANCEL, "window is hide\n");
 
        ecore_timer_interval_set(ad->sutimer, 0.1);
        DEL_TIMER(ad->stimer)
 
+       vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd);
+       vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vib);
+
        _get_sound_level(ad->type, &val);
        if(ad->flag_touching == EINA_TRUE){
-                return ECORE_CALLBACK_RENEW;
-        }
+               return ECORE_CALLBACK_RENEW;
+       }
        if(val == 15){
                _D("already 15\n");
                return ECORE_CALLBACK_RENEW;
        }
+       if(!snd && ad->type != VOLUME_TYPE_MEDIA){
+               vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 1);
+               vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 0);
+       }
        _set_sound_level(ad->type, val +1 > ad->step ? ad->step : val + 1);
        _D("down, type(%d), step(%d) val[%d]\n", ad->type, ad->step, val+1);
        return ECORE_CALLBACK_RENEW;
@@ -207,25 +216,39 @@ Eina_Bool _ld_timer_cb(void *data)
 
 Eina_Bool _sd_timer_cb(void *data)
 {
-       int val = 0;
+       int val = 0, snd = 0, vib =0;
        struct appdata *ad = (struct appdata *)data;
+       int type = MM_ERROR_SOUND_VOLUME_CAPTURE_ONLY;
+       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, ECORE_CALLBACK_CANCEL, "window is hide\n");
+       retvm_if(evas_object_visible_get(ad->win) == EINA_FALSE && type != VOLUME_TYPE_MEDIA, ECORE_CALLBACK_CANCEL, "window is hide\n");
 
        ecore_timer_interval_set(ad->sdtimer, 0.1);
        DEL_TIMER(ad->stimer)
 
+       vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd);
+       vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vib);
+
        _get_sound_level(ad->type, &val);
        if(ad->flag_touching == EINA_TRUE){
-                return ECORE_CALLBACK_RENEW;
-        }
+               return ECORE_CALLBACK_RENEW;
+       }
+       if(val == 1){
+               if(snd && ad->type != VOLUME_TYPE_MEDIA){
+                       _D("Set sound status to vibration in long press\n");
+                       vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 0);
+                       vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 1);
+               }
+       }
        if(val == 0){
                _D("already 0\n");
                return ECORE_CALLBACK_RENEW;
        }
-       _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);
+       if(snd || ad->type == VOLUME_TYPE_MEDIA){
+               _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);
+       }
        return ECORE_CALLBACK_RENEW;
 }
 
@@ -295,7 +318,6 @@ static Eina_Bool _key_press_cb(void *data, int type, void *event)
        int mtype = MM_ERROR_SOUND_VOLUME_CAPTURE_ONLY;
        int lock = IDLELOCK_ON;
        int is_turn_off_all_sounds = 0;
-       int ret = -1;
        struct appdata *ad = (struct appdata *)data;
 
        status = _check_status(&lock, &mtype);
@@ -310,23 +332,28 @@ static Eina_Bool _key_press_cb(void *data, int type, void *event)
                return ECORE_CALLBACK_CANCEL;
        }
 
-       ret = vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS, &is_turn_off_all_sounds);
-       if(is_turn_off_all_sounds)
-       {
-               if(status == LOCK_AND_NOT_MEDIA)
-                       return ECORE_CALLBACK_CANCEL;
+       vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS, &is_turn_off_all_sounds);
+       if(is_turn_off_all_sounds) {
+               _D("VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS is set, all sound is mute");
                notification_status_message_post(_("IDS_PN_POP_UNABLE_TO_ADJUST_VOLUME_WHILE_ALL_SOUND_IS_OFF_YOU_CAN_TURN_ON_SOUND_BY_GOING_TO_ACCESSIBILITY_SETTINGS"));
-               retvm_if(is_turn_off_all_sounds == EINA_TRUE, ECORE_CALLBACK_CANCEL,
-                       "VCONFKEY_SETAPPL_ACCESSIBILITY_TURN_OFF_ALL_SOUNDS is set, all sound is mute\n");
+               return ECORE_CALLBACK_CANCEL;
        }
 
+       status = _check_status(&lock, &mtype);
        if(!ad->flag_launching)
        {
                if(_volume_show(data) != EINA_TRUE)
                {
+                       _E("_volume_show() failed");
                        return ECORE_CALLBACK_CANCEL;
                }
        }
+       else{
+               if(evas_object_visible_get(ad->win) == EINA_FALSE && lock == IDLELOCK_OFF){
+                       _D("music launching, volume window is not showing.\n");
+                       _volume_show(data);
+               }
+       }
 
        if(ad->flag_touching == EINA_TRUE) {
                return ECORE_CALLBACK_CANCEL;
@@ -347,37 +374,70 @@ static Eina_Bool _key_press_cb(void *data, int type, void *event)
        if (!strcmp(ev->keyname, KEY_VOLUMEUP)) {
                _get_sound_level(ad->type, &val);
                if (val == ad->step) {
-                       _set_sound_level(ad->type, ad->step);
-                       if(snd)_play_sound(ad->type, ad->sh);
+                       ADD_TIMER(ad->sutimer, 0.5, _su_timer_cb, ad);
+                       if(snd)_play_sound(ad->type);
                        return ECORE_CALLBACK_CANCEL;
                }
-               _set_sound_level(ad->type, val + 1);
-               if(snd)_play_sound(ad->type, ad->sh);
+               if(!snd && !vib && ad->type != VOLUME_TYPE_MEDIA){
+                       _D("Set sound status to vibration from mute.\n");
+                       vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 1);
+                       _set_icon(ad, 1);
+                       ad->flag_vib = EINA_TRUE;
+                       _set_slider_value(ad, 0);
+               }
+               else{
+                       if(vib && ad->type != VOLUME_TYPE_MEDIA){
+                               _D("Set sound status to sound from vibration.\n");
+                               vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 0);
+                               vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 1);
+                               vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd);
+                               _set_icon(ad, 1);
+                       }
+                       _set_sound_level(ad->type, val + 1);
+                       ad->flag_vib = EINA_FALSE;
+                       if(snd)_play_sound(ad->type);
+               }
                DEL_TIMER(ad->sutimer)
                DEL_TIMER(ad->sdtimer)
                DEL_TIMER(ad->ldtimer)
                ADD_TIMER(ad->sutimer, 0.5, _su_timer_cb, ad)
 
                _D("set volume %d -> [%d]\n", val, val+1);
-               if(ad->sutimer == NULL){
-                       _D("error\n");
-               }
+               if(ad->sutimer == NULL)
+                       _E("error\n");
+
        } else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN)) {
                _get_sound_level(ad->type, &val);
+               if(!snd){
+                       if(ad->type != VOLUME_TYPE_MEDIA){
+                               _D("already vibration mode.\n");
+                               _set_slider_value(ad, 0);
+                       }
+               }
+               if(val == 1 && snd && ad->type != VOLUME_TYPE_MEDIA){
+                       _D("Set sound status to vibration.\n");
+                       vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, 0);
+                       vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, 1);
+                       _set_icon(ad, 1);
+                       ad->flag_vib = EINA_TRUE;
+               }
                if (val == 0) {
-                       if(vib)_play_vib(ad->sh);
+                       ADD_TIMER(ad->sdtimer, 0.5, _sd_timer_cb, ad)
                        return ECORE_CALLBACK_CANCEL;
                }
-               _set_sound_level(ad->type, val - 1);
-               if(snd)_play_sound(ad->type, ad->sh);
+               if(snd || ad->type == VOLUME_TYPE_MEDIA){
+                       _set_sound_level(ad->type, val - 1);
+                       ad->flag_vib = EINA_FALSE;
+                       if(snd)_play_sound(ad->type);
+               }
                DEL_TIMER(ad->sdtimer)
                DEL_TIMER(ad->sutimer)
                DEL_TIMER(ad->lutimer)
                ADD_TIMER(ad->sdtimer, 0.5, _sd_timer_cb, ad)
 
                _D("type (%d) set volume %d -> [%d]\n", ad->type, val, val-1);
-       if(ad->sdtimer == NULL)
-               _D("error\n");
+               if(ad->sdtimer == NULL)
+                       _E("error\n");
 
        }
        _D("key press fini\n");
@@ -388,7 +448,7 @@ static Eina_Bool _key_release_cb(void *data, int type, void *event)
 {
        Ecore_Event_Key *ev = event;
        struct appdata *ad = (struct appdata *)data;
-       _D("%s %s\n", __func__, ev->keyname);
+       _D("%s %s", __func__, ev->keyname);
 
        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");
@@ -798,18 +858,40 @@ static void _block_clicked_cb(void *data, Evas_Object *o, const char *emission,
 
 Eina_Bool _slider_timer_cb(void *data)
 {
+       _D("%s\n", __func__);
        double val = 0;
+       int snd = 0, vib = 0;
        struct appdata *ad = (struct appdata *)data;
        retvm_if(ad == NULL, 0, "Invalid argument: appdata is NULL\n");
+
+       vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd);
+       vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vib);
+
        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);
+                       ad->flag_vib = EINA_FALSE;
+                       _set_icon(ad, 1);
                }
-               if (val <= 0.5) {
+               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->flag_vib == EINA_FALSE && ad->type != VOLUME_TYPE_MEDIA){
+                               ad->flag_vib = EINA_TRUE;
+                       }
                }
                return ECORE_CALLBACK_RENEW;
        }
@@ -829,8 +911,8 @@ static void _slider_start_cb(void *data, Evas_Object *obj, void *event_info)
 
        vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd);
        if(!snd){
-               vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, EINA_TRUE);
-               _set_icon(data, -1);
+//             vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, EINA_TRUE);
+//             _set_icon(data, -1);
        }
 
        if (ad->lutimer || ad->ldtimer) {
@@ -858,9 +940,13 @@ static void _slider_stop_cb(void *data, Evas_Object *obj, void *event_info)
 {
        _D("func\n");
        double val = 0;
+       int snd = 0, vib = 0;
        struct appdata *ad = (struct appdata *)data;
        retm_if(ad == NULL, "Invalid argument: appdata is NULL\n");
 
+       vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &snd);
+       vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vib);
+
        if (ad->lutimer || ad->ldtimer) {
                _D("return when long press is working\n");
                return;
@@ -869,9 +955,31 @@ static void _slider_stop_cb(void *data, Evas_Object *obj, void *event_info)
        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);
+                       ad->flag_vib = EINA_FALSE;
+                       _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->flag_vib == EINA_FALSE && ad->type != VOLUME_TYPE_MEDIA){
+                               ad->flag_vib = EINA_TRUE;
+                       }
+               }
        }
-       _play_sound(ad->type, ad->sh);
+       if(snd)_play_sound(ad->type);
        ad->flag_touching = EINA_FALSE;
        ADD_TIMER(ad->ptimer, 3.0, popup_timer_cb, ad)
 }
@@ -1055,6 +1163,8 @@ int _app_reset(bundle *b, void *data)
        ad->flag_launching = EINA_FALSE;
        ad->flag_pressing = EINA_FALSE;
        ad->flag_touching = EINA_FALSE;
+       ad->flag_vib = EINA_FALSE;
+       ad->lastval = 0;
 
        status = _check_status(&lock, &type);
        ad->type = type;
index ae570b0..815c2e4 100755 (executable)
@@ -43,16 +43,20 @@ void _play_vib(int handle)
        }
 }
 
-void _play_sound(int type, int handle)
+void _play_sound(int type)
 {
-       feedback_initialize();
-
-       if (type == VOLUME_TYPE_MEDIA) {
+       _D("[ == %s == ]", __func__);
 
-       } else {
+       feedback_initialize();
+       int ret = 0;
+       int type_value = 0;
+       ret = mm_sound_volume_get_current_playing_type(&type_value);
+       if(ret == MM_ERROR_SOUND_VOLUME_NO_INSTANCE || 
+               (ret == MM_ERROR_NONE && type_value == VOLUME_TYPE_RINGTONE)) {
                feedback_play(FEEDBACK_PATTERN_VOLUME_KEY);
        }
        feedback_deinitialize();
+       return;
 }
 
 int _init_svi(void *data)
@@ -103,7 +107,17 @@ int _set_icon(void *data, int val)
 
        switch(ad->type){
                case VOLUME_TYPE_RINGTONE:
-                       img = IMG_VOLUME_ICON;
+                       if(snd){
+                               img = IMG_VOLUME_ICON;
+                       }
+                       else{
+                               if(vib){
+                                       img = IMG_VOLUME_ICON_VIB;
+                               }
+                               else{
+                                       img = IMG_VOLUME_ICON_MUTE;
+                               }
+                       }
                        break;
                case VOLUME_TYPE_MEDIA:
                        if(device == SYSTEM_AUDIO_ROUTE_PLAYBACK_DEVICE_EARPHONE)
index fb71df3..b3b5829 100755 (executable)
@@ -28,7 +28,7 @@ int _get_title(volume_type_t type, char *label, int size);
 int _get_sound_level(volume_type_t type, int *val);
 int _get_step(int type);
 void _play_vib(int handle);
-void _play_sound(int type, int handle);
+void _play_sound(int type);
 void _mm_func(void *data);
 int _set_icon(void * data, int val);
 int _set_sound_level(volume_type_t type, int val);
index 4872a8f..60e969e 100755 (executable)
 #define S_(str) dgettext("sys_string", str)
 #define T_(str) dgettext(PACKAGE, str)
 
-#define ADD_TIMER(x, time, _timer_cb, data) \
-       x = ecore_timer_add(time, _timer_cb, data);\
-
 #define DEL_TIMER(x) \
        if (x) {\
+               _D("DELTIMER x : %d\n", x);\
                ecore_timer_del(x);\
                x = NULL;\
        }
+#define ADD_TIMER(x, time, _timer_cb, data) \
+       if(x != NULL) DEL_TIMER(x); \
+       x = ecore_timer_add(time, _timer_cb, data);\
+       _D("ADDTIMER x : %d\n", x);\
 
 #define USE_SETTING_ICON 0
 
@@ -93,6 +95,7 @@ struct appdata
        system_audio_route_device_t device;
        int step;
        int angle;
+       int lastval;
 
        /* bundle */
        bundle *volume_bundle;
@@ -107,7 +110,7 @@ struct appdata
        int flag_touching;      /* EINA_TRUE : slider indicator pressing, block hw key cb */
        int flag_launching;     /* EINA_TRUE : volume is launcing block double lauch*/
        int flag_deleting;      /* EINA_TRUE : closing volume, block double close_volume() */
-       int flag_media;
+       int flag_vib;
        int flag_shared_grabed;
        int flag_top_positioni_grabed;
        int flag_exclusive_grabed;