From 9f96b778af5881e8f75b53096715396de1166873 Mon Sep 17 00:00:00 2001 From: "jinwoo.shin" Date: Thu, 6 Aug 2015 14:11:03 +0900 Subject: [PATCH 01/16] Add keygrab handler Change-Id: Icf5182f14a497375957a43847e19b1f0b4723640 Signed-off-by: jinwoo.shin --- src/main.c | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index 179ff35..08323ab 100644 --- a/src/main.c +++ b/src/main.c @@ -36,6 +36,7 @@ struct _appdata { Evas_Object *base; Evas_Object *progress; + Ecore_Event_Handler *key_down; Ecore_Timer *hide_timer; Eina_Bool visibility; }; @@ -54,6 +55,7 @@ Evas_Object *_add_win(const char *name) elm_win_role_set(win, VOLUME_WIN_ROLE); elm_win_alpha_set(win, EINA_TRUE); + elm_win_prop_focus_skip_set(win, EINA_TRUE); evas_object_resize(win, VOLUME_WIN_WIDTH, VOLUME_WIN_HEIGHT); evas_object_show(win); @@ -185,7 +187,7 @@ Eina_Bool _hide_timer(void *data) return ECORE_CALLBACK_CANCEL; } -static void _key_pressed(void *data, Evas *e, Evas_Object *obj, void *ei) +static Eina_Bool _key_down(void *data, int type, void *ei) { struct _appdata *ad; Evas_Event_Key_Down *ev; @@ -193,7 +195,7 @@ static void _key_pressed(void *data, Evas *e, Evas_Object *obj, void *ei) if (!data || !ei) { _ERR("failed to get data and ei"); - return; + return ECORE_CALLBACK_PASS_ON; } ad = data; @@ -234,6 +236,35 @@ static void _key_pressed(void *data, Evas *e, Evas_Object *obj, void *ei) _update_volume_info(ad); } + + return ECORE_CALLBACK_PASS_ON; +} + +Eina_Bool _register_keygrab(void *data) +{ + struct _appdata *ad; + + if (!data) { + _ERR("failed to get data"); + return false; + } + + ad = data; + + elm_win_keygrab_set(ad->win, KEY_VOLUMEUP, + 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); + elm_win_keygrab_set(ad->win, KEY_VOLUMEUP_REMOTE, + 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); + elm_win_keygrab_set(ad->win, KEY_VOLUMEDOWN, + 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); + elm_win_keygrab_set(ad->win, KEY_VOLUMEDOWN_REMOTE, + 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); + elm_win_keygrab_set(ad->win, KEY_MUTE, + 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); + elm_win_keygrab_set(ad->win, KEY_MUTE_REMOTE, + 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); + + return ECORE_CALLBACK_CANCEL; } static bool _create(void *data) @@ -278,8 +309,9 @@ static bool _create(void *data) ad->base = base; ad->progress = progress; - evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_DOWN, - _key_pressed, ad); + ecore_timer_add(1, _register_keygrab, ad); + ad->key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, + _key_down, ad); return true; } @@ -293,8 +325,7 @@ static void _terminate(void *data) ad = data; - evas_object_event_callback_del(ad->win, EVAS_CALLBACK_KEY_DOWN, - _key_pressed); + ecore_event_handler_del(ad->key_down); if (ad->hide_timer) ecore_timer_del(ad->hide_timer); -- 2.7.4 From 930f08ba8381bb1cf1df9d93169e15cc2512cdd7 Mon Sep 17 00:00:00 2001 From: "jinwoo.shin" Date: Thu, 6 Aug 2015 17:08:37 +0900 Subject: [PATCH 02/16] Add keygrab unset Change-Id: Id599863f783e1599800f7c7c866fe2323eea923f Signed-off-by: jinwoo.shin --- src/main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main.c b/src/main.c index 08323ab..0726efd 100644 --- a/src/main.c +++ b/src/main.c @@ -325,6 +325,13 @@ static void _terminate(void *data) ad = data; + elm_win_keygrab_unset(ad->win, KEY_VOLUMEUP, 0, 0); + elm_win_keygrab_unset(ad->win, KEY_VOLUMEUP_REMOTE, 0, 0); + elm_win_keygrab_unset(ad->win, KEY_VOLUMEDOWN, 0, 0); + elm_win_keygrab_unset(ad->win, KEY_VOLUMEDOWN_REMOTE, 0, 0); + elm_win_keygrab_unset(ad->win, KEY_MUTE, 0, 0); + elm_win_keygrab_unset(ad->win, KEY_MUTE_REMOTE, 0, 0); + ecore_event_handler_del(ad->key_down); if (ad->hide_timer) -- 2.7.4 From e109a98341424a514313b99f6a8739b17a1434b1 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Fri, 7 Aug 2015 13:21:11 +0900 Subject: [PATCH 03/16] set window title to package name Change-Id: I4d9cce2cdae65d4f9e57589fb9cd1222b7e12950 Signed-off-by: Soohye Shin --- src/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.c b/src/main.c index 0726efd..af81924 100644 --- a/src/main.c +++ b/src/main.c @@ -53,6 +53,7 @@ Evas_Object *_add_win(const char *name) return NULL; } + elm_win_title_set(win, name); elm_win_role_set(win, VOLUME_WIN_ROLE); elm_win_alpha_set(win, EINA_TRUE); elm_win_prop_focus_skip_set(win, EINA_TRUE); -- 2.7.4 From 0128cd946d58883d56793772402f0335a15fd819 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Fri, 7 Aug 2015 14:02:45 +0900 Subject: [PATCH 04/16] set no display package Change-Id: Ief15f84aba10ab0128a27a0029ea5827bd510c2a Signed-off-by: Soohye Shin --- org.tizen.volume.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.tizen.volume.xml.in b/org.tizen.volume.xml.in index 23dcaa7..ef4fa88 100644 --- a/org.tizen.volume.xml.in +++ b/org.tizen.volume.xml.in @@ -3,7 +3,7 @@ Jinwoo Shin volume - + @DESKTOP_ICON@ -- 2.7.4 From 61b779067fd4df9bd085b5999df625dcaee144ec Mon Sep 17 00:00:00 2001 From: "jinwoo.shin" Date: Fri, 7 Aug 2015 14:45:58 +0900 Subject: [PATCH 05/16] Update volume layout Change-Id: I8fe96ecf828043f1a2d8f26cae4b4ce0eb5fb1eb Signed-off-by: jinwoo.shin --- data/volume.edc | 3 + data/widget/progressbar.edc | 658 +++++++++++++++++++++----------------------- 2 files changed, 314 insertions(+), 347 deletions(-) diff --git a/data/volume.edc b/data/volume.edc index bb87aac..3b2472a 100644 --- a/data/volume.edc +++ b/data/volume.edc @@ -58,6 +58,7 @@ collections { part { name, PART_VOLUME_TEXT; type, TEXT; + effect, SHADOW; scale, 1; description { state, "default" 0.0; @@ -69,6 +70,8 @@ collections { align, 0.5 0.5; } color, 255 255 255 178; + color2, 0 0 0 78; + color3, 0 0 0 78; min, 62 36; align, 0.5 0.0; fixed, 1 1; diff --git a/data/widget/progressbar.edc b/data/widget/progressbar.edc index a07849e..7990429 100644 --- a/data/widget/progressbar.edc +++ b/data/widget/progressbar.edc @@ -15,357 +15,321 @@ */ -group { - name: "elm/progressbar/horizontal/volume_progressbar"; - parts { - part { - name: "elm.background.progressbar"; - type: RECT; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; +group { name: "elm/progressbar/vertical/volume_progressbar"; + parts { + part { name: "elm.background.progressbar"; type: RECT; mouse_events: 0; + description { state: "default" 0.0; + } + } + part { name: "elm.swallow.bar"; type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + min: 6 4; + max: 6 9999; + fixed: 1 1; + align: 0.5 1.0; + rel1 { + to_y: "elm.text"; + relative: 0.0 1.0; + } + rel2 { + to_y: "elm.text.box"; + relative: 1.0 0.0; + } + } + } + part { name : "elm.padding.top"; type: SPACER; + scale: 1; + description { state: "default" 0.0; + min: 0 1; + fixed: 1 1; + align: 0.0 0.0; + rel1 { + to_y: "elm.swallow.bar"; + relative: 0.0 0.0; } - } - part { - name: "elm.swallow.bar"; - type: SWALLOW; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; - min: 0 28; - max: 99999 28; - rel1 { - to_x: "elm.text"; - to_y: "elm.background.progressbar"; - relative: 1.0 0.0; - } - rel2 { - to: "elm.background.progressbar"; - } + rel2 { + to_y: "elm.swallow.bar"; + relative: 1.0 0.0; } - } - part { - name: "elm.swallow.content"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - align: 0.0 0.5; - rel1 { - to_y: "elm.background.progressbar"; - } - rel2 { - relative: 0.0 1.0; - to_y: "elm.background.progressbar"; - } + } + } + part { name : "elm.padding.bottom"; type: SPACER; + scale: 1; + description { state: "default" 0.0; + min: 0 1; + fixed: 1 1; + align: 0.0 1.0; + rel1 { + to_y: "elm.swallow.bar"; + relative: 0.0 1.0; } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - aspect: 1.0 1.0; - aspect_preference: VERTICAL; + rel2 { + to_y: "elm.swallow.bar"; + relative: 1.0 1.0; } - } - part { - name: "elm.text"; - type: TEXT; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - fixed: 1 1; - align: 0.0 0.5; - rel1.to_x: "elm.swallow.content"; - rel1.relative: 1.0 0.0; - rel2.to_x: "elm.swallow.content"; - rel2.relative: 1.0 1.0; - color: 0 0 0 255; - text { - font: "Sans,Edje-Vera"; - size: 10; - min: 0 0; - align: 0.0 0.5; - ellipsis: -1; - } + } + } + part { name: "elm.swallow.content"; type: SWALLOW; + description { state: "default" 0.0; + visible: 0; + align: 0.5 0.0; + rel1.to_x: "elm.swallow.bar"; + rel2 { + relative: 1.0 0.0; + to_x: "elm.swallow.bar"; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + aspect: 1.0 1.0; + aspect_preference: HORIZONTAL; + } + } + part { name: "elm.text"; type: TEXT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + fixed: 1 1; + align: 0.5 0.0; + rel1.to_y: "elm.swallow.content"; + rel1.relative: 0.5 1.0; + rel2.to_y: "elm.swallow.content"; + rel2.relative: 0.5 1.0; + color: 0 0 0 0; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.5 0.0; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + text.ellipsis: -1; + } + } + part { name: "background"; type: RECT; mouse_events: 0; + clip_to: "elm.background.progressbar"; + description { state: "default" 0.0; + rel1.to: "elm.swallow.bar"; + rel2.to: "elm.swallow.bar"; + color: 0 0 0 76; + } + } + part { name: "elm.progress.progressbar"; type: RECT; mouse_events: 0; + clip_to: "elm.background.progressbar"; + description { state: "default" 0.0; + min: 4 4; + max: 4 9999; + fixed: 1 1; + rel1 { + to_x: "elm.swallow.bar"; + to_y: "elm.padding.top"; + relative: 0.0 1.0; } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - text.min: 1 1; + rel2 { + to_x: "elm.swallow.bar"; + to_y: "elm.cur.progressbar"; + } + color: 255 255 255 255; + } + description { state: "invert" 0.0; + inherit: "default" 0.0; + rel1 { + to_x: "elm.swallow.bar"; + to_y: "elm.cur.progressbar"; + } + rel2 { + to_x: "elm.swallow.bar"; + to_y: "elm.padding.bottom"; + relative: 1.0 0.0; } - } - part { - name: "background"; - type: RECT; - mouse_events: 0; - clip_to: "elm.background.progressbar"; - scale: 1; - description { - state: "default" 0.0; - min: 0 14; - max: 9999 14; - rel1.to: "elm.swallow.bar"; - rel2.to: "elm.swallow.bar"; - color, 0 0 0 76; - } - } - part { - name: "elm.text.status"; - type: TEXT; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; - fixed: 1 1; - visible: 0; - rel1 { - to: "background"; - relative: 0.5 0.5; - } - rel2 { - to: "background"; - relative: 0.5 0.5; - } - text { - font: "Sans:style=Bold,Edje-Vera-Bold"; - size: 10; - min: 1 1; - align: 0.5 0.0; - ellipsis: -1; - } - color: 0 0 0 255; - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - text.min: 0 0; - } - } - part { - name: "elm.progress.progressbar"; - type, RECT; - mouse_events: 0; - scale: 1; - clip_to: "elm.background.progressbar"; - description { - state: "default" 0.0; - min: 0 14; - max: 9999 14; - fixed: 1 1; - rel1.to: "elm.swallow.bar"; - rel2 { - to_y: "elm.swallow.bar"; - to_x: "elm.cur.progressbar"; - } - color, 255 255 255 255; - } - description { - state: "invert" 0.0; - inherit: "default" 0.0; - rel1 { - to_y: "elm.swallow.bar"; - to_x: "elm.cur.progressbar"; - } - rel2.to: "elm.swallow.bar"; - } - description { - state: "state_begin" 0.0; - inherit: "default" 0.0; - rel1.to: "elm.swallow.bar"; - rel2 { - to: "elm.swallow.bar"; - relative: 0.1 1.0; - } - } - description { - state: "state_end" 0.0; - inherit: "default" 0.0; - rel1 { - to: "elm.swallow.bar"; - relative: 0.9 0.0; - } - rel2.to: "elm.swallow.bar"; - } - } - part { - name: "text-bar"; - type: TEXT; - mouse_events: 0; - clip_to: "progress-rect"; - effect: SOFT_SHADOW; - scale: 1; - description { - state: "default" 0.0; - align: 0.0 0.0; - fixed: 1 1; - visible: 0; - rel1.to: "elm.text.status"; - rel2.to: "elm.text.status"; - text { - text_source: "elm.text.status"; - font: "Sans:style=Bold,Edje-Vera-Bold"; - size: 10; - min: 1 1; - align: 0.0 0.0; - ellipsis: -1; - } - color: 224 224 224 255; - color3: 0 0 0 64; - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - text.min: 0 0; - } - } - part { - name: "elm.cur.progressbar"; - mouse_events: 0; - scale: 1; - dragable { - confine: "background"; - x: 1 1 1; - y: 0 0 0; - } - description { - state: "default" 0.0; - min: 0 28; - fixed: 1 1; - visible: 0; - rel1 { - to: "background"; - relative: 0 0; - } - rel2.to: "background"; - } - } - part { - name: "progress-rect"; - type: RECT; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; - rel1.to: "elm.progress.progressbar"; - rel2.to: "elm.progress.progressbar"; - } - } - } - programs { - program { - name: "label_show"; - signal: "elm,state,text,visible"; - source: "elm"; - action: STATE_SET "visible" 0.0; - target: "elm.text"; - } - program { - name: "label_hide"; - signal: "elm,state,text,hidden"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "elm.text"; - } - program { - name: "icon_show"; - signal: "elm,state,icon,visible"; - source: "elm"; - action: STATE_SET "visible" 0.0; - target: "elm.swallow.content"; - } - program { - name: "icon_hide"; - signal: "elm,state,icon,hidden"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "elm.swallow.content"; - } - program { - name: "units_show"; - signal: "elm,state,units,visible"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "text-bar"; - target: "elm.text.status"; - } - program { - name: "units_hide"; - signal: "elm,state,units,hidden"; - source: "elm"; - action: STATE_SET "hidden" 0.0; - target: "text-bar"; - target: "elm.text.status"; - } - program { - name: "slide_to_end"; - action: STATE_SET "state_end" 0.0; - transition: LINEAR 0.5; - target: "elm.progress.progressbar"; - after: "slide_to_begin"; - } - program { - name: "slide_to_begin"; - signal: "elm,state,slide,begin"; - action: STATE_SET "state_begin" 0.0; - target: "elm.progress.progressbar"; - transition: LINEAR 0.5; - after: "slide_to_end"; - } - program { - name: "start_pulse"; - signal: "elm,state,pulse,start"; - source: "elm"; - after: "slide_to_end"; - } - program { - name: "stop_pulse"; - signal: "elm,state,pulse,stop"; - source: "elm"; - action: ACTION_STOP; - target: "slide_to_begin"; - target: "slide_to_end"; - target: "start_pulse"; - after: "state_pulse"; - } - program { - name: "state_pulse"; - signal: "elm,state,pulse"; source: "elm"; - action: STATE_SET "state_begin" 0.0; - target: "elm.progress.progressbar"; - after: "units_hide"; - } - program { - name: "state_fraction"; - signal: "elm,state,fraction"; - source: "elm"; - action: ACTION_STOP; - target: "slide_to_begin"; - target: "slide_to_end"; - target: "start_pulse"; - action: STATE_SET "default" 0.0; - target: "elm.progress.progressbar"; - } - program { - name: "set_invert_on"; - signal: "elm,state,inverted,on"; - source: "elm"; - action: STATE_SET "invert" 0.0; - target: "elm.progress.progressbar"; - } - program { - name: "set_invert_off"; - signal: "elm,state,inverted,off"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "elm.progress.progressbar"; - } - } + } + description { state: "state_begin" 0.0; + inherit: "default" 0.0; + rel1.to: "elm.swallow.bar"; + rel2 { + to: "elm.swallow.bar"; + relative: 1.0 0.1; + } + } + description { state: "state_end" 0.0; + inherit: "default" 0.0; + rel1 { + to: "elm.swallow.bar"; + relative: 0.0 0.9; + } + rel2.to: "elm.swallow.bar"; + } + } + part { name: "over1"; type: RECT; mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "elm.progress.progressbar"; + rel2.to: "elm.progress.progressbar"; + rel2.relative: 1.0 0.5; + color: 0 0 0 0; + } + } + part { name: "over2"; type: RECT; mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + rel1.to: "elm.progress.progressbar"; + rel2.to: "elm.progress.progressbar"; + color: 0 0 0 0; + } + } + part { name: "elm.cur.progressbar"; mouse_events: 0; + dragable { + confine: "background"; + x: 0 0 0; + y: 1 1 1; + } + description { state: "default" 0.0; + min: 4 1; + max: 9999 1; + fixed: 1 1; + visible: 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + part { name: "elm.text.box"; mouse_events: 0; type: RECT; + description { state: "default" 0.0; + visible: 0; + rel1.to: "elm.text.status"; + rel2.to: "elm.text.status"; + color: 255 255 255 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.text.status"; type: TEXT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + fixed: 1 1; + align: 0.5 1.0; + rel1.relative: 0.0 1.0; + color: 0 0 0 0; + text { + font: "Sans:style=Bold,Edje-Vera-Bold"; + size: 10; + min: 0 0; + align: 0.5 0.0; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + fixed: 1 1; + visible: 1; + text.min: 1 1; + text.ellipsis: -1; + } + } + } + programs { + program { name: "label_show"; + signal: "elm,state,text,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.text"; + } + program { name: "label_hide"; + signal: "elm,state,text,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.text"; + } + program { name: "icon_show"; + signal: "elm,state,icon,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.swallow.content"; + } + program { name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + } + program { name: "units_show"; + signal: "elm,state,units,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.text.status"; + target: "elm.text.box"; + } + program { name: "units_hide"; + signal: "elm,state,units,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.text.status"; + target: "elm.text.box"; + } + program { name: "slide_to_end"; + action: STATE_SET "state_end" 0.0; + transition: LINEAR 0.5; + target: "elm.progress.progressbar"; + after: "slide_to_begin"; + } + program { name: "slide_to_begin"; + action: STATE_SET "state_begin" 0.0; + target: "elm.progress.progressbar"; + transition: LINEAR 0.5; + after: "slide_to_end"; + } + program { name: "start_pulse"; + signal: "elm,state,pulse,start"; + source: "elm"; + action: STATE_SET "state_begin" 0.0; + target: "elm.progress.progressbar"; + after: "slide_to_end"; + } + program { name: "stop_pulse"; + signal: "elm,state,pulse,stop"; + source: "elm"; + action: ACTION_STOP; + target: "slide_to_begin"; + target: "slide_to_end"; + target: "start_pulse"; + after: "state_pulse"; + } + program { name: "state_pulse"; + signal: "elm,state,pulse"; + source: "elm"; + action: STATE_SET "state_begin" 0.0; + target: "elm.progress.progressbar"; + after: "units_hide"; + } + program { name: "state_fraction"; + signal: "elm,state,fraction"; + source: "elm"; + action: ACTION_STOP; + target: "slide_to_begin"; + target: "slide_to_end"; + target: "start_pulse"; + action: STATE_SET "default" 0.0; + target: "elm.progress.progressbar"; + } + program { name: "set_invert_on"; + signal: "elm,state,inverted,on"; + source: "elm"; + action: STATE_SET "invert" 0.0; + target: "elm.progress.progressbar"; + target: "elm.cur.progressbar"; + } + program { name: "set_invert_off"; + signal: "elm,state,inverted,off"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.progress.progressbar"; + target: "elm.cur.progressbar"; + } + } } -- 2.7.4 From 6d543565f63be0987dd562317c8ec661a232d0f8 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Sat, 8 Aug 2015 16:08:11 +0900 Subject: [PATCH 06/16] change color of font and images Change-Id: I406e800c25f4f9cbb464ae206494e4aa9952f737 Signed-off-by: Minkyu Kang --- data/images/ic_volume_active.png | Bin 2591 -> 1665 bytes data/images/ic_volume_mute.png | Bin 2297 -> 1334 bytes data/volume.edc | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/images/ic_volume_active.png b/data/images/ic_volume_active.png index af1520334faa09f4a7bfb1f72007e3f705e05f71..390c7e9b933b96a96aa6bad3c8d82ffec19b2d1e 100644 GIT binary patch delta 1648 zcmV-$29Nol6oCzpB!3BTNLh0L01FcU01FcV0GgZ_0000WV@Og>004R=004l4008;_ z004mL004C`008P>0026e000+nl3&F}000IDNkl5PbjXt=tMSfp<||u zmfDt9y0U)EEUvZ5s7cf2Bt0kRC-3JkS4RG#V>Ys=x%m^}_$mVyq|t-0<*ll_W_X zB9aq{giJ&-t0-$GDr(Vz0>F8_-mCF=JVZpYD2l?FGiU57sFWOc?%XL8Me(mB6sOZU zURhaL2jF-bptPY-sCjyN`Wpb;vH&$(u%pqabo1uTZhrtr0lWubmqJk7(9qClL?p-K z@la1sPxWkAOAb^+Lqi_V^S>u`Xkuc*f8@xKs{r-_SO>ts;3xs5)$8?Em&@fMB3Y6o z-=RZ?%u5y2V}jk;+36@KC^!XR7l0A~9LqglP@LcI-^!||Y}2MqrvyQmCL-DGcDDe~ zE;Ue(34eB7UEOT}p8&7|$V);}07~ok`)?%@iO|5nzyVf?o3CHLZe!b7tgWprUksoO z$&*pCQUrSsfKmXuC*+3NksC)hYx=PpvyF< zG9`eXAlR!?t0)an=E};-qoODZL?n-ljQq%;tbf08Nt4k*n+dFC38#!5sT z>~jNv&>TOJ06YLN0KiQ|!aQ@oPek`pdp#Bg02R&6&FA;++qWeg4u>rk%bOmLCt6fg zv~z51tT87ihihqR`Mj#Cs)2~&nR+r$z3O|J);w*kXIGa~nEPpBZZ?@r)q)@hL?m~2 zcYmK}Rb_QJ9AiWzI~p?;o;$a2IW--MRYoye*%DBuQw(IeWe?BVrOS(Hvs5# zIz0m=b#-<90RTBUIa&a@Dkwm(+wFq@kbjkx#W5&SUtgaa063200A#D6fOvLxb~yFn zmO+zef4Aa2^ZonxzXkx&XmsXAv3>jYA^?cRVhMG)z^Y~2wr!gMAQ%ivOyIF&$BqgB zkR&OR{BEU#GFU8@EdcQ7(IYPa8Gz1WvAhcaJkN^&qAMO$X=$m^Y&O3E0KL7vJ%0d1 z0J_zySHA@S36#{ORdwFA>RYZEd}*$K*0O*9&Si zn&ZrwoGY>#8yi13c<|ucdcA(l#*G_0#>dCMDk&-XI?djXYiepbWi%Ss#9}czckbK| zJkJjS2o4So)*B24V`ThO*}hc@3P9D# zlP4Phe3*1nm(56>ZJTuf_Rbc1r2|j^Yg6s!W%cesN_9O^=oP+uz-gr{EIUvsux5n* z^y$+-2ZKRDeVgU~bEXRYm!qSjE&%130JV^Fz30~Gvg#@W@CpDYfYE17s`R{<0;n0E uiHWq7R``H`T}6W2upa z5ex=f%Hy(qp>Y%R5Dnqbd#1pv7aIN!ast4uvS2V;pa5WQB3TfCdlqwD5O}#K>1U= z@LqBj5Gv-zDuAuA-hRT^a3M{Ea&bmFspt@a1ONp{l_Wx{q^lUHPrP(!KDUiSAwP+L z;SAJgqXN8qkSv)3KvJ+Ij1W&CAgNR=flQ%N3HC@LotV|JtBhYBHISwKb14&?%F;Y;V!bp|qc?LG1 z6e`4WP%M)o=NJV+vM7*&f-L>)f<*4+^_5tv{1PZAWH^;Tjw4|4IEiG=uTRoS&=>fx z8Q+vv`o+iroG+l1MJa?(K7!HnU?_Hft!PdVvWC7{A%>D7h+xZvQ4&B3^4JU%bb=L$ zMRc|Uo<$*1hzP#hg; zOpXJE!y!;Oj!YJQ9?O#|L4i~V%GLpVFwxy6~)79hil;?LW@YxOu?Sp3d9%3AlXrkghGfcLB;MO)=wxRcVP zN}rmkpP3z|U4L_CeE);TkF9UT1lHGh8=i6f_r%kl?u^3oq(#YVjTGCn?@yd@r6nlz zfCP3~=FOY#U1eouGk23iN~SX&Fk+I!OnMARaI3m7>tViMG0Kbm6qWNg?v8$YU)HyiC@Wv*lQm> zA`Di}jQ-|$Y7X_pwYq@^!{vkkKrehhLT>>IpV$nu#i~J5ScUG*oA}g#LVvONl}B^# z1|o@6RHX-KM${(zXK!4}tE{ZN-iSE>4?msQ^EZV4Th>p!+ zcUW|>{Ez$d`GqYEg1K>#v$Hd|k9l$3BCUUZeSQ7Mhe>?b@5dSCY9;(yd*acg+X(}G zoV~B{>n01n_ws?-tF!W>@A5l-b^ww6Ky4Bpgr?oL5RJ-Q^ht1|59qlPDJ!Rv;+u-D+jgNoz zFzke3qY{NiXI3~OE{7kh8((H-)0vIB$o7n#7$|g<)z%S!wBOYx^e;Pu^?F+C?Ri#!rhYe-KQl zb+2A+5gfA`9O_eaxgF{ohr{8h%H9_*f^#+%G0(2pSa+js{hqc`gce_8W@$M?6-_=d zMT9j{hF|pe8%khC4Avv9Hm(}#bE@6iC22>F`~pwG%wAq0h3Hws1kR<@=V{&Tc~gIn9C8t*~ryzh-TW#r{s$%4y?s@Bf*AHi$k;iq?C+ fuzht`yq+=aAb2CT+(Pwn?w5_n@n)AZ_ay!YxIIf_ diff --git a/data/images/ic_volume_mute.png b/data/images/ic_volume_mute.png index a396fd403ca61e64b7ca1c8d59266692a954ac5b..bb4d0fc557ba98d6210c06a08e8ac6029f78503a 100644 GIT binary patch delta 1315 zcmV+;1>E}i5w;4DB!3BTNLh0L01FcU01FcV0GgZ_0000WV@Og>004R=004l4008;_ z004mL004C`008P>0026e000+nl3&F}000EMNklzI9LK+7VsY(MB_5=b zLWL+xVQnESViZZ^Cb0A-deCAi9!gJM?A1j}G3~{JdRf>*g?|b;XlZG&6qF=VJ8q$e zLaVh+Kv=uW&Lo*h$e)S%^Xp}@#F&`qjwWvA2M+@I&6_u$`OWwJ-tRqzh@e?{YtRsA zpfpe#C=HYbN&}_Y6@g+H=2ERv+uq*pPNh=&48z<~6F|jdAR<-TWvzmKb;rlYGbbk} zVIqJflZ0Jj0K3Y@wHbw;o`j{B#*z5O!)_W*PP&?$Y_Ehrt&^N%u_Oq_`1SS%KGI-NfP z_!xj0Kx+2#VlHh(t$FqusA9LN0t;5PtIE(3{S7@Z&p57O!MQ;y^Amh*HAYR5l0l*L7PXNb66ust}~Cy*O5_0YtC!$0DtJn*P;shHW&H7V{B|}Mv|m35y{D9 zGURr<`wIQsZg*cYnG6w;EJ;#$WMpIpK*x29`KgCdGvTcO6br!Oa5xr3Q7j58ACf4F z;o;%o1tmvg>jsqKV*oH{x7(fhu)JPxUm+x$&E^C!s9b}(0#yo@EX$%S%VIG|)yku) z4u7f?tWuC}boD@mMScjtzR_s(=T|QohM}&mu73gSD?U}L9@Ioc<%B!;xdns4NH7?T zD4*e(*|2Uuy+Yw08X8&|7#LV7H5=9?s6t3~yWI)E0l;Ci*__2-)g36W*Lz+HU;r>! z3|3u%vRbVMS(b$|vsZ6=~!<@W#){eNCq zW>JcLjR0chDiI9BumD~MkOB}ccF(KKqgVjl6;ut(%3B{FA0L0n^L!{5E#YwZ*Tuy} z!^`GTuT&{mDY4kv+S+Dzc6JVOn+wTgQtkJ}AN2P2et&*=c=%tT&}*RbHb9lxs1Lv=Yinz}sZ=UXL~=Tv zj%;pju4tgnP6)RFj1~&L2CB$OmQq5mfhrE`h0xE=&VC<>M4}p~(tYL&{TD|^M^6CU zsRk%DGxMt|TIQmw8^9X?d;pHrKKfMl`ECHH7hCoKUQ;$s6E_yrt8Uska~utn2C6Fd Z{{RR|ph<8Xj1~X@002ovPDHLkV1ie`SS|nn literal 2297 zcmbVOX;c&E8jd1}D6S~7C?SXfhb$A4kOYEeBMBxnLKIv{AOnezOqvW3Kt%;axCb|| z7hEbRNKqDR1q%@nt8jppf(x4>rbk4CT)Cohg(`PYvG<3kKkj#C=3C}{o_C)!8R9^m zwUxaU3Wc&3@Hs)q9Dv+JOAF*VSs>~|COeoL3I{`xaJ)eVBoq!63F#4#3MZSE!Rb{R1dT%ZuGed15z!!w4hN%@Y6j+|p&o-)${Cmt zvWOtkut9~ApQr_c69Xj?iO~@>IcB{d+E-6U2vi^}L+e#BY8_qAz1(il5`a-PMeGU{7GQ3`t~UZtA$>!Y*|4g&u& z!PVSAIo5i$&qGnQSHnv7So?0A!D(p2S65 zAalHlB+O^5{Qrp=9x(<#T^#>YEHg()1x_!&ls>Zg(mbFV=@>228q8H}EDB}rF5oaF z`reUKJNYglHccW5pnMT|Pr=GK(AXK^)O#cJMPugSErx3t#r^YclkHbu8j6<7%+s(~ z8`iSpapTT?8_b8wRh4(rJ@zq53-H)C4J~WYrQ*ZcD}$Gj^42hT|GL&gYF^_Ud9iJQ zBhhR8QMFh7qsjGykL?7+ywb(qZ$%!M#mtO+j@b9H{LYpf{u*0*VdAl6NjcQlxRq`r zf4u8%X=xcykS3N$s&k;Tdpw~McZ$*Tr2mhVi%k5t*mH{iY6{x zW$-5UHvi{QUvY8qK!a4nFWa)+cp&$2*t`|)-_Q)_L4_p}GKLHjM=5-j7K ztSH<~$w#uX7#jN7qXpCrsoSw~@zj!->kr@mU@#;#zZ{>;_qB{;rQTrukl!}PP*XE; zNaC^iywu0>h*M)zQ*sJ%eRr4?KEb=3Sv1ErWpJXdJz!VG_|cAzj+a$cRo~wq9ET~Jec_%Tfb;BGvk&8{jE#+rEtf7`8YbrbI%o1+X+=f9Iy(9S@f~Zc zNT(ZHwenSEXp@5UVc`<*ZEd~*r%w#$j^^Ge-|wE+Gi&4a-W>@xyP~Ahn+rPbW%wZp z2`eirdr&xOqNcc zIC8&XmQF;A%6|pq=J=rs_7+QmbE~VXqiwi-u6Ez diff --git a/data/volume.edc b/data/volume.edc index 3b2472a..8fbfdbe 100644 --- a/data/volume.edc +++ b/data/volume.edc @@ -58,7 +58,7 @@ collections { part { name, PART_VOLUME_TEXT; type, TEXT; - effect, SHADOW; + effect, OUTLINE_SOFT_SHADOW; scale, 1; description { state, "default" 0.0; @@ -69,8 +69,8 @@ collections { size, 36; align, 0.5 0.5; } - color, 255 255 255 178; - color2, 0 0 0 78; + color, 255 255 255 255; + color2, 0 0 0 25; color3, 0 0 0 78; min, 62 36; align, 0.5 0.0; -- 2.7.4 From 0e9fc4ebb0e04c5721d19496c96c5b49ea9c11fa Mon Sep 17 00:00:00 2001 From: "jinwoo.shin" Date: Tue, 11 Aug 2015 14:48:31 +0900 Subject: [PATCH 07/16] Fix check patch warning Change-Id: I59436d03c74e8dd18977882f6ba734f2c8afde79 Signed-off-by: jinwoo.shin --- src/volume.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/volume.c b/src/volume.c index 66f9ed2..9109dc8 100644 --- a/src/volume.c +++ b/src/volume.c @@ -80,11 +80,10 @@ int volume_get_volume(void) if (volume_is_mute()) return volume; - else { - r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol); - if (r < 0) - return -1; - return vol; - } + r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol); + if (r < 0) + return -1; + + return vol; } -- 2.7.4 From 95fe6754005c0d1d50c427afcc4878d54e15ca76 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Mon, 17 Aug 2015 10:25:41 +0900 Subject: [PATCH 08/16] launch volume app at boot time Change-Id: Ib9a9081c93bd0867aed5d522fdc49cd5e897cbb2 Signed-off-by: Minkyu Kang --- packaging/org.tizen.volume.path | 5 +++++ packaging/org.tizen.volume.service | 5 +++++ packaging/org.tizen.volume.spec | 11 +++++++++++ 3 files changed, 21 insertions(+) create mode 100644 packaging/org.tizen.volume.path create mode 100644 packaging/org.tizen.volume.service diff --git a/packaging/org.tizen.volume.path b/packaging/org.tizen.volume.path new file mode 100644 index 0000000..2f5b597 --- /dev/null +++ b/packaging/org.tizen.volume.path @@ -0,0 +1,5 @@ +[Unit] +Description=This path will tell you that volume is ready to launch + +[Path] +PathExists=/run/.wm_ready diff --git a/packaging/org.tizen.volume.service b/packaging/org.tizen.volume.service new file mode 100644 index 0000000..da14b48 --- /dev/null +++ b/packaging/org.tizen.volume.service @@ -0,0 +1,5 @@ +[Unit] +Description=volume + +[Service] +ExecStart=/bin/sh -c -l '/usr/bin/aul_test launch org.tizen.volume' diff --git a/packaging/org.tizen.volume.spec b/packaging/org.tizen.volume.spec index 23709fc..ebede8a 100644 --- a/packaging/org.tizen.volume.spec +++ b/packaging/org.tizen.volume.spec @@ -5,6 +5,8 @@ Release: 1 Group: Applications License: Apache Source0: %{name}-%{version}.tar.gz +Source1: %{name}.service +Source2: %{name}.path BuildRequires: cmake BuildRequires: pkgconfig(capi-appfw-application) @@ -22,6 +24,8 @@ BuildRequires: edje-bin %define _datadir %{_pkgdir}/data %define _edjedir %{_resdir}/edje %define _manifestdir /usr/share/packages +%define _sysuserdir /systemd/user +%define _servicedir /systemd/user/default.target.wants %description Volume widget for Tizen TV @@ -43,6 +47,10 @@ make %{?jobs:-j%jobs} %install %make_install install --directory %{buildroot}/%{_datadir} +install --directory %{buildroot}%{_libdir}%{_servicedir} +install -m 0644 %{SOURCE1} %{buildroot}%{_libdir}%{_sysuserdir} +install -m 0644 %{SOURCE2} %{buildroot}%{_libdir}%{_sysuserdir} +ln -sf ../%{name}.path %{buildroot}%{_libdir}%{_servicedir} %clean rm -rf %{buildroot} @@ -53,3 +61,6 @@ rm -rf %{buildroot} %{_resdir}/* %{_datadir} %{_manifestdir}/%{name}.xml +%{_libdir}%{_sysuserdir}/%{name}.service +%{_libdir}%{_sysuserdir}/%{name}.path +%{_libdir}%{_servicedir}/%{name}.path -- 2.7.4 From 1d41b7cd4a3b09054a0f3734ace3c6797ce30625 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Wed, 9 Sep 2015 19:58:49 +0900 Subject: [PATCH 09/16] add manifest file to avoid smack error this patch will fix systemd service file's label "system" to "_" Change-Id: Ib508ce109a927eb2241c234a9f9064b62138a512 Signed-off-by: Minkyu Kang --- packaging/org.tizen.volume.manifest | 5 +++++ packaging/org.tizen.volume.spec | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 packaging/org.tizen.volume.manifest diff --git a/packaging/org.tizen.volume.manifest b/packaging/org.tizen.volume.manifest new file mode 100644 index 0000000..97e8c31 --- /dev/null +++ b/packaging/org.tizen.volume.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/packaging/org.tizen.volume.spec b/packaging/org.tizen.volume.spec index ebede8a..9ccd6d6 100644 --- a/packaging/org.tizen.volume.spec +++ b/packaging/org.tizen.volume.spec @@ -7,6 +7,7 @@ License: Apache Source0: %{name}-%{version}.tar.gz Source1: %{name}.service Source2: %{name}.path +Source3: %{name}.manifest BuildRequires: cmake BuildRequires: pkgconfig(capi-appfw-application) @@ -32,6 +33,7 @@ Volume widget for Tizen TV %prep %setup -q +cp %{SOURCE3} . %build cmake \ @@ -56,6 +58,7 @@ ln -sf ../%{name}.path %{buildroot}%{_libdir}%{_servicedir} rm -rf %{buildroot} %files +%manifest %{name}.manifest %defattr(-,root,root,-) %{_bindir}/* %{_resdir}/* -- 2.7.4 From 3918e789c8ae024621bbba96b88cbb407825673c Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Wed, 16 Sep 2015 14:26:29 +0900 Subject: [PATCH 10/16] modify key values as key_define Change-Id: I6846a2db1114eb257236843154149d8b8c9f00b9 Signed-off-by: Minkyu Kang --- src/main.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/main.c b/src/main.c index af81924..63a7bd4 100644 --- a/src/main.c +++ b/src/main.c @@ -207,8 +207,7 @@ static Eina_Bool _key_down(void *data, int type, void *ei) else ad->hide_timer = ecore_timer_add(HIDE_DUR, _hide_timer, ad); - if (!strcmp(ev->keyname, KEY_VOLUMEUP) || - !strcmp(ev->keyname, KEY_VOLUMEUP_REMOTE)) { + if (!strcmp(ev->keyname, KEY_VOLUMEUP)) { vol = volume_get_volume() + 1; r = volume_set_volume(vol); @@ -218,8 +217,7 @@ static Eina_Bool _key_down(void *data, int type, void *ei) volume_set_mute(false); _update_volume_info(ad); - } else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN) || - !strcmp(ev->keyname, KEY_VOLUMEDOWN_REMOTE)) { + } else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN)) { vol = volume_get_volume() - 1; r = volume_set_volume(vol); @@ -229,8 +227,7 @@ static Eina_Bool _key_down(void *data, int type, void *ei) volume_set_mute(false); _update_volume_info(ad); - } else if (!strcmp(ev->keyname, KEY_MUTE) || - !strcmp(ev->keyname, KEY_MUTE_REMOTE)) { + } else if (!strcmp(ev->keyname, KEY_MUTE)) { bool mute = !volume_is_mute(); volume_set_mute(mute); @@ -254,16 +251,10 @@ Eina_Bool _register_keygrab(void *data) elm_win_keygrab_set(ad->win, KEY_VOLUMEUP, 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); - elm_win_keygrab_set(ad->win, KEY_VOLUMEUP_REMOTE, - 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); elm_win_keygrab_set(ad->win, KEY_VOLUMEDOWN, 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); - elm_win_keygrab_set(ad->win, KEY_VOLUMEDOWN_REMOTE, - 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); elm_win_keygrab_set(ad->win, KEY_MUTE, 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); - elm_win_keygrab_set(ad->win, KEY_MUTE_REMOTE, - 0, 0, 0, ELM_WIN_KEYGRAB_SHARED); return ECORE_CALLBACK_CANCEL; } @@ -327,11 +318,8 @@ static void _terminate(void *data) ad = data; elm_win_keygrab_unset(ad->win, KEY_VOLUMEUP, 0, 0); - elm_win_keygrab_unset(ad->win, KEY_VOLUMEUP_REMOTE, 0, 0); elm_win_keygrab_unset(ad->win, KEY_VOLUMEDOWN, 0, 0); - elm_win_keygrab_unset(ad->win, KEY_VOLUMEDOWN_REMOTE, 0, 0); elm_win_keygrab_unset(ad->win, KEY_MUTE, 0, 0); - elm_win_keygrab_unset(ad->win, KEY_MUTE_REMOTE, 0, 0); ecore_event_handler_del(ad->key_down); -- 2.7.4 From 9bfc6b1b23a229d831c14e69ca12e5b73cac6e6b Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Thu, 17 Sep 2015 08:39:31 +0900 Subject: [PATCH 11/16] version update: m1 Change-Id: Ibc5de1b568f35ce1cccb24349248e95d9ea2f95d Signed-off-by: Minkyu Kang --- packaging/org.tizen.volume.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/org.tizen.volume.spec b/packaging/org.tizen.volume.spec index 9ccd6d6..0169880 100644 --- a/packaging/org.tizen.volume.spec +++ b/packaging/org.tizen.volume.spec @@ -1,6 +1,6 @@ Name: org.tizen.volume Summary: Volume widget for Tizen TV -Version: 0.1 +Version: 0.2 Release: 1 Group: Applications License: Apache -- 2.7.4 From 14dd22889835d01f08c815088da548ea8ed4ec52 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Thu, 17 Sep 2015 16:46:33 +0900 Subject: [PATCH 12/16] remove unused file Change-Id: I0ce0fd78031a6f12515b8c6d140e1bee6d74a251 Signed-off-by: Minkyu Kang --- org.tizen.volume.png | Bin 38658 -> 0 bytes packaging/org.tizen.volume.spec | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 org.tizen.volume.png diff --git a/org.tizen.volume.png b/org.tizen.volume.png deleted file mode 100644 index affa43645cd9689ed9ea1d41404cfbb195a130ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38658 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�>=c|6It zB9{>TD4*!2)eY)(cou-Bc*u@7P{yUeRP_(RrcO{D);>waWxki8hxh`>13tVQlsZv- zPV53!S-lz|`xQHaS&eP#efVY1)x5PSOt%#q={PwhnJZ~<#kWy6E_bl^4@`SUf!C7% z?4{YykL|0xxu2N)tRq`X<+LC%fwRX=xe?MaC!8_7W0c zn4RZiy)Z0?2{R>}rFUEZOUw>?OM>xCVfKX31v>a= z;d}&HtXZJ>dzagM3`oS7a!j!B1%FhiPYL^2-}9!WLLCf4=AMmD$7hfOYQvZrMY)`k z3tcmF)u|w9~tGRgVtiwyrmd^^7~DvaT76IumC-JxlR7L6uf6 zN+(rmHd*7bsHQ1+9-%plE8p0K8NVo)*G~Unb1*pDL{N*JxM}J3jP?T-8*ij(V$o>l zH7tl%?&!w#HtN77=&|}-2<4ldAy>!JX$nzt9yYO-`W`LC^GFh6ppC4%O_zt|1w)n=}^FftB)F$xb7sG`!>$c zRRTUsWJ;fu3Le?ni_3TuG^nsgC8-mB;xr@+=iI;6Rb)s65q&{ftcg((RLmiD_7rxK z@6L2~%Wa^zmZvNt8$LBs=*D$5OrewRhDxUJ#T)I!c^sK2%{HM%m2TkyaK07$?H;bBA%<`lW;ZMhRy%oAFiSvGJo`otb335b2Q9}XQsBcaw zq!=Eo_5iR2n$v|W=M1CS*^i>2+O4fHb5Mtat{7X zwm2HWvhtVB8_^$R|L+Um?ehI2z9d@FP};sbkha`Ys41f<$-u@qaK(atJben`Nzcmj z#!`MlH!u#b+I>VLQH|AF)ivIMFgr=k(9a}a1UY%v*}OWas5gJhwWuM$;;s~#1FxZ> zm^rrZ8NEve#&^~>i9KR;TsqdPzN5YYkGE6VZtW3CaT52_=Hfk%lW?9Sp-Q@58&$>? z$0_6s368FK4lE(dZ_%I9_nbtujxSBtJRq{Ar3AO8v38ureZ437YQdYj)zOb^E@p+scaHSXN7|e*=`jdj zHHB!3|8#;CuNWscZTUn)HO~6}kR7^L&hI4s@BH^sA zj4&2M`$NK);M^^kRzyLsaT6@s7zzzV*I^NBwq;J4hL^(ta@O`-yk4;u1AOqSq&M!G zn5b=6Yx25$URd9_7Lmwf^6yk_4)*HoAz0$#4bXxe(p@ zrV6R~0~a_cv%94O=|K2?pi@qJyRCt8?l`(`a>NG=0{1(w0iJneW|qFY#%W|Ku#d1%eKwbY~aCmkkW#j(|A9HxkN3Of^E z$ZPaD;4(y&45^$N8e4kxQ~-iiQ>>&^9+;7yhtIm+S*EH&t-Znr?htA18yy{8tB+GP4Pky34Wh$Ab(&2kwjYrDM_J>#KS4N z1xOdsDASuBR#}poie_TlOK7G?33-V)y>;Yr!3Zk7rh7S7k?fJ0C>h-g6hs@@&>i%Y zPU3IdX6ari(Q~_#W#HbrlsK(Wvu4RVt#I=$voSgf(hTy&*ME~J*86V(}UmbFO-_4D&oDWD--o~ zxquW5{+x5J$yc>MO-7oy>w_gEgVvM_f@JXbK2)-R6<-^bU(ZTVpc(3;38h1?KNl@d z(4O>cm>kPy;K#hXZU|(z@U{W7w$R*EPgI9*Ims4LD6xZz&WhfZVlG?~*0BE?&N#D7 z!MZtJT!OuqN<<4(Su4J>wl+>#)~^(YJ5tU)Hzj6jPULF-lrFu?oeA`*mj_N({{VFv z&2$Av?(9x(sO)Z>Aw6?TJ6)y1{2Xdkw>`_*DQ@nM$@^880z)8qg3 z8)lwcB)E~|Yn@RTdc$cg)KQmJH>eF^iOSDBKTbb7V)ZO%^MR_>b#xK$vnJw8BOA-C z&ptYF;)FRrEaJGjSbJQs{oQa<>fgdYc>W*v-$Ryj|6}(b?!SgFUYt4};D5RQ9^U)< z$MFDv+x>_8U%;!bEdRIjzlZ-U_& Date: Wed, 23 Sep 2015 19:42:09 +0900 Subject: [PATCH 13/16] modify the font Change-Id: I8de4862203772bad0c1be6da853236d32a207834 Signed-off-by: Minkyu Kang --- data/volume.edc | 2 +- data/widget/progressbar.edc | 4 ++-- include/define.h | 4 ++++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/data/volume.edc b/data/volume.edc index 8fbfdbe..baa90fe 100644 --- a/data/volume.edc +++ b/data/volume.edc @@ -65,7 +65,7 @@ collections { rel1.relative, 0.5 0.0; rel2.relative, 0.5 0.0; text { - font, "TizenSans:style=Light"; + font, FONT_LIGHT; size, 36; align, 0.5 0.5; } diff --git a/data/widget/progressbar.edc b/data/widget/progressbar.edc index 7990429..cc8ec0b 100644 --- a/data/widget/progressbar.edc +++ b/data/widget/progressbar.edc @@ -99,7 +99,7 @@ group { name: "elm/progressbar/vertical/volume_progressbar"; rel2.relative: 0.5 1.0; color: 0 0 0 0; text { - font: "Sans,Edje-Vera"; + font: FONT_REGULAR; size: 10; min: 0 0; align: 0.5 0.0; @@ -218,7 +218,7 @@ group { name: "elm/progressbar/vertical/volume_progressbar"; rel1.relative: 0.0 1.0; color: 0 0 0 0; text { - font: "Sans:style=Bold,Edje-Vera-Bold"; + font: FONT_BOLD; size: 10; min: 0 0; align: 0.5 0.0; diff --git a/include/define.h b/include/define.h index 3a8e731..581729b 100644 --- a/include/define.h +++ b/include/define.h @@ -36,4 +36,8 @@ #define SIGNAL_SHOW_MUTE "signal.show.mute" #define SIGNAL_HIDE_MUTE "signal.hide.mute" +#define FONT_REGULAR "BreezeSans" +#define FONT_LIGHT "BreezeSans:style=Light" +#define FONT_BOLD "BreezeSans:style=Bold" + #endif -- 2.7.4 From 6828f456c1b20ea3237a0f8461a0881f8fd8a009 Mon Sep 17 00:00:00 2001 From: "jinwoo.shin" Date: Mon, 14 Dec 2015 10:44:14 +0900 Subject: [PATCH 14/16] Replace volume control api Change-Id: I7a7c0ab2f4ce1a1bdda67ce94e97702511cf407e Signed-off-by: jinwoo.shin --- src/volume.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/volume.c b/src/volume.c index 9109dc8..c2551ce 100644 --- a/src/volume.c +++ b/src/volume.c @@ -16,6 +16,7 @@ #include #include +#include #include "define.h" #include "volume.h" @@ -41,9 +42,9 @@ int volume_set_mute(bool is_mute) mute = is_mute; if (mute) - sound_manager_set_volume(SOUND_TYPE_MEDIA, MUTE_VALUE); + sound_manager_set_master_volume(MUTE_VALUE); else - sound_manager_set_volume(SOUND_TYPE_MEDIA, volume); + sound_manager_set_master_volume(volume); return 0; } @@ -63,7 +64,7 @@ int volume_set_volume(int vol) return -1; } - r = sound_manager_set_volume(SOUND_TYPE_MEDIA, vol); + r = sound_manager_set_master_volume(vol); if (r < 0) { _ERR("failed to set volume"); return -1; @@ -81,7 +82,7 @@ int volume_get_volume(void) if (volume_is_mute()) return volume; - r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol); + r = sound_manager_get_master_volume(&vol); if (r < 0) return -1; -- 2.7.4 From 059147377ad64e7487f83362067da62168bcba17 Mon Sep 17 00:00:00 2001 From: "jinwoo.shin" Date: Mon, 14 Dec 2015 19:11:56 +0900 Subject: [PATCH 15/16] Add volume set privilege Change-Id: I079ff8a469f581c8b4177a391b201df8ee0a9e6b Signed-off-by: jinwoo.shin --- org.tizen.volume.xml.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/org.tizen.volume.xml.in b/org.tizen.volume.xml.in index ef4fa88..63a889d 100644 --- a/org.tizen.volume.xml.in +++ b/org.tizen.volume.xml.in @@ -7,4 +7,7 @@ @DESKTOP_ICON@ + + http://tizen.org/privilege/volume.set + -- 2.7.4 From 909a96a7eb5387f1ae0111a9e39944bb1744aa43 Mon Sep 17 00:00:00 2001 From: "jinwoo.shin" Date: Mon, 14 Dec 2015 19:15:19 +0900 Subject: [PATCH 16/16] Add volume range translation Change-Id: Ibf32f03ce41c7b134e6873f76c0bd96d3e4676c3 Signed-off-by: jinwoo.shin --- include/volume.h | 2 +- src/volume.c | 34 ++++++++++++++++++++++------------ 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/include/volume.h b/include/volume.h index 1ba1ed8..05b3c21 100644 --- a/include/volume.h +++ b/include/volume.h @@ -21,7 +21,7 @@ #define MUTE_VALUE 0 #define VOLUME_MIN 0 -#define VOLUME_MAX 15 +#define VOLUME_MAX 50 #define VOLUME_DEFAULT 10 void volume_init(void); diff --git a/src/volume.c b/src/volume.c index c2551ce..e804beb 100644 --- a/src/volume.c +++ b/src/volume.c @@ -26,13 +26,8 @@ static int volume; void volume_init(void) { - int r; - - r = volume_get_volume(); - if (r < 0) - volume = VOLUME_DEFAULT; - else - volume = r; + volume = VOLUME_DEFAULT; + sound_manager_get_master_volume(&volume); mute = false; } @@ -54,6 +49,16 @@ bool volume_is_mute(void) return mute; } +static int _volume_get_max_volume(void) +{ + int vol; + + vol = VOLUME_MAX; + sound_manager_get_max_master_volume(&vol); + + return vol; +} + int volume_set_volume(int vol) { int r; @@ -64,6 +69,8 @@ int volume_set_volume(int vol) return -1; } + vol = (vol * _volume_get_max_volume()) / VOLUME_MAX; + r = sound_manager_set_master_volume(vol); if (r < 0) { _ERR("failed to set volume"); @@ -79,12 +86,15 @@ int volume_get_volume(void) { int vol, r; - if (volume_is_mute()) - return volume; + if (volume_is_mute()) { + vol = volume; + } else { + r = sound_manager_get_master_volume(&vol); + if (r < 0) + return -1; + } - r = sound_manager_get_master_volume(&vol); - if (r < 0) - return -1; + vol = (vol * VOLUME_MAX) / _volume_get_max_volume(); return vol; } -- 2.7.4