add focus and key down handling of pin 88/46888/2
authorSoohye Shin <soohye.shin@samsung.com>
Thu, 27 Aug 2015 02:35:05 +0000 (11:35 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Fri, 28 Aug 2015 06:32:12 +0000 (15:32 +0900)
Change-Id: Ic1e269b682cdc7fbcadfa270fe11797bd57313c3
Signed-off-by: Soohye Shin <soohye.shin@samsung.com>
src/view/view_user_edit.c

index 6bec529..2995101 100644 (file)
@@ -87,6 +87,21 @@ struct _priv {
        enum user_item_type user_type;
 };
 
+static void _reset_pin(struct _priv *priv, bool focus)
+{
+       int i;
+
+       for (i = 0; i < COUNT_PIN; i++) {
+               elm_entry_entry_set(priv->pin[i], "");
+               elm_object_focus_allow_set(priv->pin[i], EINA_FALSE);
+               elm_object_signal_emit(priv->pin[i], SIG_ENABLE, SRC_ELM);
+       }
+
+       elm_object_focus_allow_set(priv->pin[0], EINA_TRUE);
+       if (focus)
+               elm_object_focus_set(priv->pin[0], EINA_TRUE);
+}
+
 static void _focused(int id, void *data, Evas_Object *obj,
                Elm_Object_Item *item)
 {
@@ -198,18 +213,24 @@ static void _add_discard_popup(struct _priv *priv)
 static bool _check_changed_input(struct _priv *priv)
 {
        const char *photo, *name;
+       int i;
+
+       for (i = 0; i < COUNT_PIN; i++) {
+               if (!elm_entry_is_empty(priv->pin[i]))
+                       return true;
+       }
 
        _get_profile(priv, &name, &photo);
 
        if (priv->di) {
-               if (!strcmp(photo, priv->di->icon))
-                       return false;
+               if (strcmp(photo, priv->di->icon))
+                       return true;
        } else {
-               if (!strcmp(name, "") && !strcmp(photo, IMAGE_USER_DEFAULT))
-                       return false;
+               if (strcmp(name, "") || strcmp(photo, IMAGE_USER_DEFAULT))
+                       return true;
        }
 
-       return true;
+       return false;
 }
 
 static bool _add_btns(struct _priv *priv)
@@ -386,9 +407,8 @@ static void _add_icon_list(struct _priv *priv)
 static bool _add_pin(Evas_Object *ly, struct _priv *priv)
 {
        Evas_Object *pin, *box;
-
        Elm_Entry_Filter_Limit_Size pin_size = {
-               .max_char_count = 1,
+               .max_char_count = 2,
        };
        Elm_Entry_Filter_Accept_Set pin_char = {
                .accepted = "0123456789",
@@ -422,6 +442,9 @@ static bool _add_pin(Evas_Object *ly, struct _priv *priv)
                inputmgr_add_callback(pin, INPUT_HANDLER_TYPE_PIN, &handler,
                                priv);
                priv->pin[i] = pin;
+               if (i != 0)
+                       elm_object_focus_allow_set(pin, EINA_FALSE);
+
        }
 
        return true;
@@ -669,6 +692,29 @@ static void _select(struct _priv *priv, int id, Evas_Object *obj)
        }
 }
 
+static void _select_pin(struct _priv *priv, Evas_Object *obj)
+{
+       int i;
+
+       for (i = 0; i < COUNT_PIN; i++) {
+               if (priv->pin[i] == obj)
+                       break;
+       }
+
+       if (i == COUNT_PIN) {
+               _ERR("failed to get entry");
+               return;
+       } else if (i == COUNT_PIN -1) {
+               if (elm_entry_cursor_pos_get(obj) != 1)
+                       _reset_pin(priv, true);
+       } else {
+               elm_object_focus_allow_set(priv->pin[i + 1], EINA_TRUE);
+               elm_object_focus_set(priv->pin[i + 1], EINA_TRUE);
+               elm_object_signal_emit(obj, SIG_DISABLE, SRC_ELM);
+               elm_object_focus_allow_set(obj, EINA_FALSE);
+       }
+}
+
 static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev)
 {
@@ -729,6 +775,8 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                case INPUT_HANDLER_TYPE_BTN_CANCEL:
                case INPUT_HANDLER_TYPE_DELETE:
                case INPUT_HANDLER_TYPE_ENTRY:
+               case INPUT_HANDLER_TYPE_PIN:
+               case INPUT_HANDLER_TYPE_LOCK:
                        edited = _check_changed_input(priv);
                        viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_TYPE_EDIT,
                                        &edited);
@@ -737,6 +785,18 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                default:
                        return;
                }
+       } 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)) {
+               if (id == INPUT_HANDLER_TYPE_PIN)
+                       _select_pin(priv, obj);
        }
 }
 
@@ -797,6 +857,8 @@ static void _reset(struct _priv *priv)
                _load_user_icon(priv, IMAGE_USER_CURRENT_DEFAULT,
                                        IMAGE_USER_CURRENT_DEFAULT_FOCUS);
        }
+
+       _reset_pin(priv, false);
 }
 
 static void _show(void *data)