From 0bb5dd629d7b5048ff42346b755d07a9bda35ed4 Mon Sep 17 00:00:00 2001 From: Agnieszka Janowicz Date: Thu, 4 Feb 2016 14:35:30 +0100 Subject: [PATCH] Sleep timer popup (no functionality available yet) Change-Id: I1245de2df10392605e4303c183484f54453bdd47 Signed-off-by: Agnieszka Janowicz --- include/define.h | 19 ++- include/layout/system.h | 9 +- res/layout/system.edc | 293 +++++++++++++++++++++++++++++++++++++++++++-- src/layout/layout_system.c | 181 +++++++++++++++++++--------- src/view/view_location.c | 12 +- 5 files changed, 432 insertions(+), 82 deletions(-) diff --git a/include/define.h b/include/define.h index e54f701..c014b05 100644 --- a/include/define.h +++ b/include/define.h @@ -78,6 +78,13 @@ #define PART_MAIN_ITEM_TIME_MIN "part.main.item.time.min" #define PART_MAIN_ITEM_TIME_AMPM "part.main.item.time.ampm" +#define PART_POPUP_BUTTON1 "part.popup.btn1" +#define PART_POPUP_BUTTON2 "part.popup.btn2" +#define PART_POPUP_BUTTON3 "part.popup.btn3" +#define PART_POPUP_BUTTON4 "part.popup.btn4" +#define PART_POPUP_BUTTON5 "part.popup.btn5" +#define PART_POPUP_BUTTON6 "part.popup.btn6" + /* Style */ #define STYLE_MENU_BTN "style.menu.button" #define STYLE_BASE_BTN "style.base.button" @@ -120,13 +127,13 @@ /* String for view*/ #define STR_SETTINGS "IDS_ST_OPT_SETTINGS" #define STR_PICTURE "Picture" -#define STR_SOUND "IDS_ST_HEADER_SOUND" +#define STR_SOUND "Sound" #define STR_CHANNEL "Channel" -#define STR_NETWORK "IDS_ST_BODY_NETWORK" -#define STR_SYSTEM "IDS_ST_BODY_SYSTEM" +#define STR_NETWORK "Network" +#define STR_SYSTEM "System" #define STR_SUPPORT "Support" #define STR_INFOSQUARE "Info.Square" -#define STR_VOICE "IDS_ST_BODY_VOICE" +#define STR_VOICE "Voice" #define STR_DONE "Done" #define STR_CANCEL "Cancel" #define STR_NOT_SUPPORTED "Not supported" @@ -140,6 +147,10 @@ #define STR_24HOUR "24 hour" #define STR_TIME "Time" +#define STR_LANGUAGE "Language" +#define STR_LOCATION "Location" +#define STR_SLEEP_TIMER "Sleep timer" + /* Size */ #define SIZE_STR 1024 #define SIZE_LIST_ITEM_X (488 + 26) diff --git a/include/layout/system.h b/include/layout/system.h index 77159fc..e8f5e95 100644 --- a/include/layout/system.h +++ b/include/layout/system.h @@ -20,13 +20,16 @@ /* group */ #define GRP_LAYOUT_SYSTEM "grp.layout.system" #define GRP_POPUP_LANGUAGE "grp.popup.language" +#define GRP_POPUP_SLEEP_TIMER "grp.popup.sleeptimer" /* part */ #define PART_SYSTEM "part.system" -#define PART_LANG_BUTTON1 "part.langpopup.btn1" -#define PART_LANG_BUTTON2 "part.langpopup.btn2" -#define PART_LANG_NAME "part.langpopup.name" +#define PART_POPUP_BUTTON_X "part.popup.btn%d" +#define PART_POPUP_NAME "part.popup.name" + +#define POPUP_SLEEP_TIMER_BTN_COUNT 6 +#define POPUP_LANGUAGE_BTN_COUNT 2 #define PART_LOCATION_TEXT "part.location.text" #define PART_LOCATION_MENU1 "part.location.menu1" diff --git a/res/layout/system.edc b/res/layout/system.edc index 8d7eab7..45dad66 100644 --- a/res/layout/system.edc +++ b/res/layout/system.edc @@ -118,7 +118,7 @@ group { } part { - name, PART_LANG_NAME; + name, PART_POPUP_NAME; type, TEXT; scale, 1; description { @@ -147,17 +147,17 @@ group { state, "default" 0.0; min, 0 32; rel1 { - to, PART_LANG_NAME; + to, PART_POPUP_NAME; relative, 0.0 1.0; } - rel2.to, PART_LANG_NAME; + rel2.to, PART_POPUP_NAME; align, 0.5 0.0; fixed, 0 1; } } part { - name, PART_LANG_BUTTON1; + name, PART_POPUP_BUTTON1; type, SWALLOW; scale, 1; description { @@ -185,17 +185,17 @@ group { state, "default" 0.0; min, 0 32; rel1 { - to, PART_LANG_BUTTON1; + to, PART_POPUP_BUTTON1; relative, 0.0 1.0; } - rel2.to, PART_LANG_BUTTON1; + rel2.to, PART_POPUP_BUTTON1; align, 0.5 0.0; fixed, 0 1; } } part { - name, PART_LANG_BUTTON2; + name, PART_POPUP_BUTTON2; type, SWALLOW; scale, 1; description { @@ -213,7 +213,282 @@ group { color, 0 0 0 255; } } - - } + } } + +group { + name, GRP_POPUP_SLEEP_TIMER; + parts { + part { + name, "area"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + visible, 0; + } + } + + part { + name, "padding.title"; + type, SPACER; + scale, 1; + description { + state, "default" 0.0; + min, 0 24; + rel1.to, "area"; + rel2 { + to, "area"; + relative, 1.0 0.0; + } + align, 0.5 0.0; + fixed, 0 1; + } + } + + part { + name, PART_POPUP_NAME; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + min, 0 32; + rel1 { + to, "padding.title"; + relative, 0.0 1.0; + } + rel2.to, "padding.title"; + align, 0.5 0.0; + fixed, 0 1; + color, COLOR_TEXT_POPUP; + text { + font, FONT_LIGHT; + size, 32; + } + } + } + + part { + name, "padding.btn1"; + type, SPACER; + scale, 1; + description { + state, "default" 0.0; + min, 0 32; + rel1 { + to, PART_POPUP_NAME; + relative, 0.0 1.0; + } + rel2.to, PART_POPUP_NAME; + align, 0.5 0.0; + fixed, 0 1; + } + } + + part { + name, PART_POPUP_BUTTON1; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + min, 488 68; + rel1 { + to, "padding.btn1"; + relative, 0.5 1.0; + } + rel2 { + to, "padding.btn1"; + relative, 0.5 1.0; + } + align, 0.5 0.0; + fixed, 0 1; + color, 0 0 0 255; + } + } + + part { + name, "padding.btn2"; + type, SPACER; + scale, 1; + description { + state, "default" 0.0; + min, 0 32; + rel1 { + to, PART_POPUP_BUTTON1; + relative, 0.0 1.0; + } + rel2.to, PART_POPUP_BUTTON1; + align, 0.5 0.0; + fixed, 0 1; + } + } + + part { + name, PART_POPUP_BUTTON2; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + min, 488 68; + + rel1 { + to, "padding.btn2"; + relative, 0.0 1.0; + } + rel2.to, "padding.btn2"; + + align, 0.5 0.0; + fixed, 0 1; + color, 0 0 0 255; + } + } + + part { + name, "padding.btn3"; + type, SPACER; + scale, 1; + description { + state, "default" 0.0; + min, 0 32; + rel1 { + to, PART_POPUP_BUTTON2; + relative, 0.0 1.0; + } + rel2.to, PART_POPUP_BUTTON2; + align, 0.5 0.0; + fixed, 0 1; + } + } + + part { + name, PART_POPUP_BUTTON3; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + min, 488 68; + + rel1 { + to, "padding.btn3"; + relative, 0.0 1.0; + } + rel2.to, "padding.btn3"; + + align, 0.5 0.0; + fixed, 0 1; + color, 0 0 0 255; + } + } + + part { + name, "padding.btn4"; + type, SPACER; + scale, 1; + description { + state, "default" 0.0; + min, 0 32; + rel1 { + to, PART_POPUP_BUTTON3; + relative, 0.0 1.0; + } + rel2.to, PART_POPUP_BUTTON3; + align, 0.5 0.0; + fixed, 0 1; + } + } + + part { + name, PART_POPUP_BUTTON4; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + min, 488 68; + + rel1 { + to, "padding.btn4"; + relative, 0.0 1.0; + } + rel2.to, "padding.btn4"; + + align, 0.5 0.0; + fixed, 0 1; + color, 0 0 0 255; + } + } + + part { + name, "padding.btn5"; + type, SPACER; + scale, 1; + description { + state, "default" 0.0; + min, 0 32; + rel1 { + to, PART_POPUP_BUTTON4; + relative, 0.0 1.0; + } + rel2.to, PART_POPUP_BUTTON4; + align, 0.5 0.0; + fixed, 0 1; + } + } + + part { + name, PART_POPUP_BUTTON5; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + min, 488 68; + + rel1 { + to, "padding.btn5"; + relative, 0.0 1.0; + } + rel2.to, "padding.btn5"; + + align, 0.5 0.0; + fixed, 0 1; + color, 0 0 0 255; + } + } + part { + name, "padding.btn6"; + type, SPACER; + scale, 1; + description { + state, "default" 0.0; + min, 0 32; + rel1 { + to, PART_POPUP_BUTTON5; + relative, 0.0 1.0; + } + rel2.to, PART_POPUP_BUTTON5; + align, 0.5 0.0; + fixed, 0 1; + } + } + + part { + name, PART_POPUP_BUTTON6; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + min, 488 68; + + rel1 { + to, "padding.btn6"; + relative, 0.0 1.0; + } + rel2.to, "padding.btn6"; + + align, 0.5 0.0; + fixed, 0 1; + color, 0 0 0 255; + } + } + } +} diff --git a/src/layout/layout_system.c b/src/layout/layout_system.c index ab6c7eb..5e89cd9 100644 --- a/src/layout/layout_system.c +++ b/src/layout/layout_system.c @@ -45,9 +45,8 @@ struct _priv { layoutmgr *lmgr; struct menumgr *menu; - Evas_Object * lang_popup; - Evas_Object *popup_btn1; - Evas_Object *popup_btn2; + Evas_Object *popup; + Evas_Object *popup_btn[POPUP_SLEEP_TIMER_BTN_COUNT]; }; enum { @@ -63,8 +62,14 @@ enum { enum object_type { - EO_BTN_LANG_ENG=0, + EO_BTN_LANG_ENG = 0, EO_BTN_LANG_KOR, + EO_BTN_SLEEP_OFF, + EO_BTN_SLEEP_30, + EO_BTN_SLEEP_60, + EO_BTN_SLEEP_90, + EO_BTN_SLEEP_120, + EO_BTN_SLEEP_180 }; static char *_get_status(void *data, int id); @@ -74,14 +79,17 @@ static char *_get_language(void *data, int id); static char *_get_location(void *data, int id); static void _selected(void *data, int id); +static void _sleep_timer_selected(void *data, int id); static void _language_selected(void *data, int id); static void _location_selected(void *data, int id); // popup handler -static void _remove_language_popup(struct _priv *priv); +static void _remove_popup(struct _priv *priv); static void _popup_clicked_cb(int id, void *data, Evas_Object *obj); static void _popup_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev); +static char *sleep_timer_option[POPUP_SLEEP_TIMER_BTN_COUNT] = { "OFF", "30 mins", "60 mins", "90 mins", "120 mins", "180 mins" }; +static char *language_option[POPUP_LANGUAGE_BTN_COUNT] = { "English", "Korean"}; static struct menumgr_info menu_info[] = { { @@ -98,7 +106,7 @@ static struct menumgr_info menu_info[] = { .style = STYLE_STATUS_BTN, .disabled = EINA_FALSE, .status = _get_sleep_timer, - .selected = _selected, + .selected = _sleep_timer_selected, }, { .id = MENU_WAKEUP_TIMER, @@ -152,6 +160,7 @@ static char *_get_status(void *data, int id) { return NULL; } + static char *_get_clock_mode(void *data, int id) { int status; @@ -165,6 +174,7 @@ static char *_get_clock_mode(void *data, int id) static char *_get_sleep_timer(void *data, int id) { + //@TODO: get sleep timer value return strdup(TIMER_OFF); } @@ -256,27 +266,26 @@ static input_handler _popup_input_handler = { }; -static void _remove_language_popup(struct _priv *priv) +static void _remove_popup(struct _priv *priv) { + int i; + if (!priv) { _ERR("Invalid popup data !"); return; } - if (priv->popup_btn1) { - inputmgr_remove_callback(priv->popup_btn1, &_popup_input_handler); - evas_object_del(priv->popup_btn1); - priv->popup_btn1 = NULL; - } - if (priv->popup_btn2) { - inputmgr_remove_callback(priv->popup_btn2, &_popup_input_handler); - evas_object_del(priv->popup_btn2); - priv->popup_btn2 = NULL; + for(i = 0; i < POPUP_SLEEP_TIMER_BTN_COUNT; i++) { + if (priv->popup_btn[i]) { + inputmgr_remove_callback(priv->popup_btn[i], &_popup_input_handler); + evas_object_del(priv->popup_btn[i]); + priv->popup_btn[i] = NULL; + } } - evas_object_hide(priv->lang_popup); - evas_object_del(priv->lang_popup); - priv->lang_popup = NULL; + evas_object_hide(priv->popup); + evas_object_del(priv->popup); + priv->popup = NULL; } @@ -297,23 +306,33 @@ static void _popup_clicked_cb(int id, void *data, Evas_Object *obj) system_settings_set_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, "en_US"); menumgr_update(priv->menu); - _remove_language_popup(priv); + _remove_popup(priv); break; case EO_BTN_LANG_KOR: system_settings_set_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, "ko_KR"); menumgr_update(priv->menu); - _remove_language_popup(priv); + _remove_popup(priv); break; + case EO_BTN_SLEEP_OFF: + case EO_BTN_SLEEP_30: + case EO_BTN_SLEEP_60: + case EO_BTN_SLEEP_90: + case EO_BTN_SLEEP_120: + case EO_BTN_SLEEP_180: + //@TODO: set sleep timer + menumgr_update(priv->menu); + + _remove_popup(priv); + break; default: _ERR("Unhandled object type."); return; } } - static void _popup_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { @@ -327,66 +346,114 @@ static void _popup_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, priv = data; if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC)) { - _remove_language_popup(priv); + _remove_popup(priv); } } +static bool _fill_popup_btns(struct _priv *priv, Evas_Object *layout, int btn_count, char *btn_part_x, char **btn_text, int first_btn_eo) +{ + Evas_Object *btn; + int i; + + for(i = 0; i < btn_count; i++) { + char part_name[24] = {0, }; + snprintf(part_name, sizeof(part_name), btn_part_x, i+1); + btn = utils_add_button(layout, part_name, NULL, btn_text[i]); + if (!btn) { + _ERR("Add button failed."); + return false; + } + priv->popup_btn[i] = btn; + inputmgr_add_callback(btn, first_btn_eo+i, &_popup_input_handler, priv); + } + return true; +} -#define STR_LANGUAGE "Language" - -static bool _draw_language_select_popup(struct _priv *priv) +static bool _draw_sleep_timer_select_popup(struct _priv *priv) { - Evas_Object *popup, *ly, *btn1, *btn2; + Evas_Object *popup, *ly; - popup = utils_add_popup(priv->base, NULL, STR_LANGUAGE, NULL); + popup = utils_add_popup(priv->base, NULL, STR_SLEEP_TIMER, NULL); if (!popup) { _ERR("Add popup failed"); return false; } - ly = utils_add_layout(popup, GRP_POPUP_LANGUAGE, EINA_FALSE); + ly = utils_add_layout(popup, GRP_POPUP_SLEEP_TIMER, EINA_FALSE); if (!ly) { _ERR("Add layout failed."); evas_object_del(popup); return false; } - elm_object_part_text_set(ly, PART_LANG_NAME, "Select language."); + elm_object_part_text_set(ly, PART_POPUP_NAME, "Select Sleep timer's time."); evas_object_show(ly); - - btn1 = utils_add_button(ly, PART_LANG_BUTTON1, NULL, "English"); - if (!btn1) { - _ERR("Add button failed."); + if (!_fill_popup_btns(priv, ly, POPUP_SLEEP_TIMER_BTN_COUNT, PART_POPUP_BUTTON_X, sleep_timer_option, EO_BTN_SLEEP_OFF)) { evas_object_del(popup); return false; } - btn2 = utils_add_button(ly, PART_LANG_BUTTON2, NULL, "Korean"); - if (!btn2) { - _ERR("Add button failed."); - evas_object_del(popup); + if (priv->popup) + evas_object_del(priv->popup); + + priv->popup = popup; + + elm_object_content_set(popup, ly); + + //@TODO: set proper focus + elm_object_focus_set(priv->popup_btn[0], EINA_TRUE); + + return true; +} + +static void _sleep_timer_selected(void *data, int id) +{ + SETTING_TRACE_BEGIN; + struct _priv *priv = (struct _priv *)data; + + + if (!_draw_sleep_timer_select_popup(priv)) { + _ERR("Draw language select popup failed."); + return; + } + +} + +static bool _draw_language_select_popup(struct _priv *priv) +{ + Evas_Object *popup, *ly; + + popup = utils_add_popup(priv->base, NULL, STR_LANGUAGE, NULL); + if (!popup) { + _ERR("Add popup failed"); return false; } - if (priv->lang_popup) - { - evas_object_del(priv->lang_popup); - priv->lang_popup = NULL; + ly = utils_add_layout(popup, GRP_POPUP_LANGUAGE, EINA_FALSE); + if (!ly) { + _ERR("Add layout failed."); + evas_object_del(popup); + return false; } - elm_object_content_set(popup, ly); + elm_object_part_text_set(ly, PART_POPUP_NAME, "Select language."); + evas_object_show(ly); - priv->lang_popup = popup; - priv->popup_btn1 = btn1; - priv->popup_btn2 = btn2; + if (!_fill_popup_btns(priv, ly, POPUP_LANGUAGE_BTN_COUNT, PART_POPUP_BUTTON_X, language_option, EO_BTN_LANG_ENG)) { + evas_object_del(popup); + return false; + } - inputmgr_add_callback(btn1, EO_BTN_LANG_ENG, &_popup_input_handler, priv); - inputmgr_add_callback(btn2, EO_BTN_LANG_KOR, &_popup_input_handler, priv); + if (priv->popup) + evas_object_del(priv->popup); + priv->popup = popup; + + elm_object_content_set(popup, ly); // Set Focus @@ -400,10 +467,10 @@ static bool _draw_language_select_popup(struct _priv *priv) } if (!strncmp(lang, "en_US",4)) { - elm_object_focus_set(btn1, EINA_TRUE); + elm_object_focus_set(priv->popup_btn[0], EINA_TRUE); } else { - elm_object_focus_set(btn2, EINA_TRUE); + elm_object_focus_set(priv->popup_btn[1], EINA_TRUE); } free(lang); @@ -411,7 +478,6 @@ static bool _draw_language_select_popup(struct _priv *priv) return true; } - static void _language_selected(void *data, int id) { SETTING_TRACE_BEGIN; @@ -435,9 +501,9 @@ static void _location_selected(void *data, int id) SETTING_TRACE("1 - location"); - if (!viewmgr_add_view(view_location_get_vclass(), NULL)) { + if (!viewmgr_add_view(view_location_get_vclass(), NULL)) _ERR("Add view failed."); - } + if (!viewmgr_push_view(VIEW_LOCATION)) _ERR("Push view failed."); @@ -503,12 +569,11 @@ static bool _create(layoutmgr *lmgr, void *data) return false; } - priv->table=NULL; - priv->menu=NULL; - priv->lang_popup=NULL; - priv->popup_btn1=NULL; - priv->popup_btn2=NULL; + priv->table = NULL; + priv->menu = NULL; + priv->popup = NULL; + memset(priv->popup_btn, 0, POPUP_SLEEP_TIMER_BTN_COUNT * sizeof(Evas_Object *)); priv->lmgr = lmgr; priv->base = base; diff --git a/src/view/view_location.c b/src/view/view_location.c index 31d4832..8984955 100644 --- a/src/view/view_location.c +++ b/src/view/view_location.c @@ -116,7 +116,7 @@ static void _popup_clicked_cb(int id, void *data, Evas_Object *obj) case EO_BTN_LOCATION_KR: system_settings_set_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, "ko_KR"); - + default: _ERR("Unhandled object type."); return; @@ -138,13 +138,9 @@ static void _popup_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC)) { _close_location_view(priv); - } + } } - - -#define STR_LANGUAGE "Location" - static bool _draw_menu_area(struct _priv *priv) { SETTING_TRACE_BEGIN; @@ -152,13 +148,13 @@ static bool _draw_menu_area(struct _priv *priv) Evas_Object *btn1, *btn2; Evas_Object *menu1, *menu2; - + if (!priv || !priv->base) { _ERR("Invalid argument."); return false; } - elm_object_part_text_set(priv->base, PART_TOP_TITLE, _(STR_LANGUAGE)); + elm_object_part_text_set(priv->base, PART_TOP_TITLE, _(STR_LOCATION)); elm_object_part_text_set(priv->base, PART_LOCATION_TEXT, _("Select your Contry.")); -- 2.7.4