TIZENIOT-2422 Fix sound muting problem from quickpanel volume slider 00/254800/1 submit/tizen/20210309.113741 submit/tizen/20210310.061929
authorJagrat Patidar <j1.patidar@samsung.com>
Tue, 9 Mar 2021 07:39:27 +0000 (13:09 +0530)
committerJagrat Patidar <j1.patidar@samsung.com>
Tue, 9 Mar 2021 09:51:50 +0000 (09:51 +0000)
Change-Id: Ie7bd4e5172238a8d9e7ad37490fd1ded4cc49eef
(cherry picked from commit 9da1001abc29e30ca2dc483d974037895f11bf25)

src/device/volume.c

index 81557e7d6f9d9c18774a437104e149b716ba44bf..ff0a08be36103a82efa39fa823b4e9e7978134f1 100755 (executable)
 #define SLIDER_LAYOUT_HEIGHT ELM_SCALE_SIZE(VOLUME_BRIGHTNESS_SLIDER_LAYOUT_H)
 #define SLIDER_HEIGHT 32
 
-#define SLIDER_1_COMPARE 1.000001
+#define SLIDER_1_COMPARE 0.100000
 #define SLIDER_9_COMPARE 9.000001
-
+#define SLIDER_COMPARE_LOW 0.000000
+#define SLIDER_COMPARE_HIGH 1.00000
 
 
 #define VCONF_KEY_MUTE_TYPE_SYSTEM             VCONF_KEY_MUTE_PREFIX"/system"
@@ -503,8 +504,17 @@ static void _volume_slider_drag_stop_cb(void *data, Evas_Object *obj, void *even
        double val = 0;
 
        val = elm_slider_value_get(slider);
+
        DBG("**** slider value : %f ***", val);
-       int value = (int)(val + 0.5);
+       int value = 0;
+       // sound_manager APIs take int as input volume value that is why
+       // converting double to int.
+       if (val > SLIDER_COMPARE_LOW && val <= SLIDER_COMPARE_HIGH) {
+               value = 1;
+       } else {
+               value = (int)(val);
+       }
+
        _volume_set_image(val);
        volume_sound_change_set(value);
 }
@@ -595,19 +605,19 @@ static void _volume_set_image(double level)
 {
        int mapped_level;
        DBG("******_volume_set_image level = %lf *********",level);
+
        if (!g_ctrl_obj) {
                ERR("Ctrl Obj is not defined");
                return;
        }
 
-       if (level < SLIDER_1_COMPARE)
+       if (level < SLIDER_1_COMPARE) {
                mapped_level = 0;
-
-       else if (level > SLIDER_1_COMPARE && level <= SLIDER_9_COMPARE)
+       } else if (level >= SLIDER_1_COMPARE && level <= SLIDER_9_COMPARE) {
                mapped_level = 1;
-
-       else
+       } else {
                mapped_level = 2;
+       }
        if (g_ctrl_obj->level_before != mapped_level) {
                char buf[128] = {0,};
                Evas_Object *view;
@@ -804,7 +814,10 @@ static void _volume_create(void *data)
        if (g_ctrl_obj == NULL) {
                g_ctrl_obj = (volume_ctrl_obj *)calloc(1, sizeof(volume_ctrl_obj));
                if (g_ctrl_obj != NULL) {
-                       g_ctrl_obj->min_level = 1;
+                       // If minimum value of slider is 1, quickpanel volume slider shows that volume is muted
+                       // but system volume is still set to 1(slider value), which means in music/video volume level will be 1
+                       // in above case quickpanel is giving wrong info(being muted), that is why setting it to 0.
+                       g_ctrl_obj->min_level = 0;
                        g_ctrl_obj->max_level = 15;
                        g_ctrl_obj->last_requested_level = _volume_get_level();