add focus and key handling in pin view 86/46486/1
authorSoohye Shin <soohye.shin@samsung.com>
Fri, 21 Aug 2015 04:46:37 +0000 (13:46 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Fri, 21 Aug 2015 04:46:37 +0000 (13:46 +0900)
Change-Id: Ic0fbd63c50b781a8257c7012158c9a7d23225da1
Signed-off-by: Soohye Shin <soohye.shin@samsung.com>
edje/view/pin.edc
src/view/view_pin.c

index 478266c..e87109b 100644 (file)
@@ -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;
+               }
        }
 }
index 3e4b627..16fa465 100644 (file)
@@ -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)