From: Soohye Shin Date: Fri, 21 Aug 2015 04:46:37 +0000 (+0900) Subject: add focus and key handling in pin view X-Git-Tag: accepted/tizen/tv/20150821.130446~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a55fa7f68108b9e46e39c807a5722570f9f846c8;p=profile%2Ftv%2Fapps%2Fnative%2Fair_home.git add focus and key handling in pin view Change-Id: Ic0fbd63c50b781a8257c7012158c9a7d23225da1 Signed-off-by: Soohye Shin --- diff --git a/edje/view/pin.edc b/edje/view/pin.edc index 478266c..e87109b 100644 --- a/edje/view/pin.edc +++ b/edje/view/pin.edc @@ -77,7 +77,7 @@ group { } fixed, 1 1; align, 0.5 0.0; - min, 0 300; + min, 0 280; visible, 0; } } @@ -145,5 +145,74 @@ group { align, 0.5 0.0; } } + part { + name, "pad.wrong"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_PIN; + relative, 0.5 1.0; + } + rel2 { + to, PART_PIN; + relative, 0.5 1.0; + } + min, 0 30; + align, 0.5 0.0; + fixed, 1 1; + visible, 0; + } + } + part { + name, "wrong"; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.wrong"; + relative, 0.5 1.0; + } + rel2 { + to, "pad.wrong"; + relative, 0.5 1.0; + } + align, 0.5 0.0; + fixed, 1 1; + min, 400 28; + color, 254 78 78 255; + text { + text, "Wrong code. Plese try again"; + font, "TizenSans"; + size, 28; + align, 0.5 0.0; + } + visible, 0; + } + description { + state, "show" 0.0; + inherit, "default" 0.0; + visible, 1; + } + } + } + programs { + program { + name, "sig,show"; + signal, SIG_SHOW; + source, SRC_PROG; + action, STATE_SET "show" 0.0; + target, "wrong"; + transition, LINEAR 1.0; + after, "sig,hide"; + } + program { + name, "sig,hide"; + action, STATE_SET "default" 0.0; + target, "wrong"; + transition, LINEAR 0.5; + } } } diff --git a/src/view/view_pin.c b/src/view/view_pin.c index 3e4b627..16fa465 100644 --- a/src/view/view_pin.c +++ b/src/view/view_pin.c @@ -26,6 +26,7 @@ #define COUNT_PIN 4 #define PADDING_PIN 14 #define WIDTH_PIN 64 +#define KEY_PIN "pin" enum input_handler_type { INPUT_HANDLER_TYPE_PIN @@ -50,40 +51,38 @@ static void _focused(int id, void *data, Evas_Object *obj, } } -static void _unfocused(int id, void *data, Evas_Object *obj, - Elm_Object_Item *item) -{ - switch (id) { - case INPUT_HANDLER_TYPE_PIN: - elm_object_signal_emit(obj, SIG_UNSELECT, SRC_ELM); - break; - default: - return; - } -} - static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, - Evas_Event_Key_Down *ev) -{ - switch (id) { - case INPUT_HANDLER_TYPE_PIN: - if (!strcmp(ev->keyname, KEY_BACK) || - !strcmp(ev->keyname, KEY_BACK_REMOTE)) { - viewmgr_hide_view(VIEW_PIN); - } - break; - default: - return; - } -} + Evas_Event_Key_Down *ev); static input_handler handler = { .focused = _focused, - .unfocused = _unfocused, .key_down = _key_down }; -static bool _add_pins(Evas_Object *base, struct _priv *priv) +static bool _check_valid_pin(struct _priv *priv) +{ + /* It should be implemented later */ + + return false; +} + +static void _unload_pins(struct _priv *priv) +{ + int i; + + elm_box_clear(priv->box); + evas_object_del(priv->box); + priv->box = NULL; + + for (i = 0 ; i < COUNT_PIN; i++) { + inputmgr_remove_callback(priv->pin[i], &handler); + evas_object_del(priv->pin[i]); + } + + memset(priv->pin, 0x00, sizeof(priv->pin)); +} + +static bool _load_pins(struct _priv *priv) { Evas_Object *box, *pin; Elm_Entry_Filter_Limit_Size pin_size = { @@ -94,13 +93,13 @@ static bool _add_pins(Evas_Object *base, struct _priv *priv) }; int i; - box = utils_add_box(base, true); + box = utils_add_box(priv->base, true); if (!box) { _ERR("failed to add box"); return false; } elm_box_padding_set(box, PADDING_PIN, 0); - elm_object_part_content_set(base, PART_PIN, box); + elm_object_part_content_set(priv->base, PART_PIN, box); for (i = 0; i < COUNT_PIN; i++) { pin = utils_add_entry(box, true, false, NULL, STYLE_INPUT_PIN); @@ -117,9 +116,16 @@ static bool _add_pins(Evas_Object *base, struct _priv *priv) elm_box_pack_end(box, pin); elm_object_focus_next_object_set(pin, pin, ELM_FOCUS_DOWN); elm_object_focus_next_object_set(pin, pin, ELM_FOCUS_UP); + elm_object_focus_next_object_set(pin, pin, ELM_FOCUS_RIGHT); + elm_object_focus_next_object_set(pin, pin, ELM_FOCUS_LEFT); inputmgr_add_callback(pin, INPUT_HANDLER_TYPE_PIN, &handler, priv); priv->pin[i] = pin; + evas_object_data_set(pin, KEY_PIN, (void *)i); + if (i != 0) + elm_object_focus_allow_set(pin, EINA_FALSE); + else + elm_object_focus_set(pin, EINA_TRUE); } priv->box = box; @@ -127,6 +133,60 @@ static bool _add_pins(Evas_Object *base, struct _priv *priv) return true; } +static void _selected(void *data, Evas_Object *obj) +{ + struct _priv *priv; + int i; + + if (!data || !obj) { + _ERR("Invalid argument"); + return; + } + + priv = data; + i = (int)evas_object_data_get(obj, KEY_PIN); + + if (i < COUNT_PIN - 1) { + elm_object_focus_allow_set(obj, EINA_FALSE); + elm_object_signal_emit(obj, SIG_DISABLE, SRC_ELM); + elm_object_focus_allow_set(priv->pin[i + 1], EINA_TRUE); + elm_object_focus_set(priv->pin[i + 1], EINA_TRUE); + } else { + if (!_check_valid_pin(priv)) { + elm_object_signal_emit(priv->base, SIG_SHOW, SRC_PROG); + _unload_pins(priv); + _load_pins(priv); + } else + viewmgr_hide_view(VIEW_PIN); + } +} + +static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) +{ + switch (id) { + case INPUT_HANDLER_TYPE_PIN: + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) { + viewmgr_hide_view(VIEW_PIN); + } else if (!strcmp(ev->keyname, KEY_0) || + !strcmp(ev->keyname, KEY_1) || + !strcmp(ev->keyname, KEY_2) || + !strcmp(ev->keyname, KEY_3) || + !strcmp(ev->keyname, KEY_4) || + !strcmp(ev->keyname, KEY_5) || + !strcmp(ev->keyname, KEY_6) || + !strcmp(ev->keyname, KEY_7) || + !strcmp(ev->keyname, KEY_8) || + !strcmp(ev->keyname, KEY_9)) { + _selected(data, obj); + } + break; + default: + return; + } +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -174,19 +234,12 @@ static void _show(void *data) evas_object_show(priv->base); - if (!_add_pins(priv->base, priv)) { - _ERR("failed to add pins"); - return; - } - - if (priv->pin[0]) - elm_object_focus_set(priv->pin[0], EINA_TRUE); + _load_pins(priv); } static void _hide(void *data) { struct _priv *priv; - int i; if (!data) { _ERR("Invalid argument"); @@ -197,16 +250,7 @@ static void _hide(void *data) evas_object_hide(priv->base); - elm_box_clear(priv->box); - evas_object_del(priv->box); - priv->box = NULL; - - for (i = 0 ; i < COUNT_PIN; i++) { - inputmgr_remove_callback(priv->pin[i], &handler); - evas_object_del(priv->pin[i]); - } - - memset(priv->pin, 0x00, sizeof(priv->pin)); + _unload_pins(priv); } static void _destroy(void *data)