load pin ug when pressed done button in view of user edit 58/47258/2 accepted/tizen/tv/20150902.055619 submit/tizen/20150902.051532
authorSoohye Shin <soohye.shin@samsung.com>
Tue, 1 Sep 2015 12:10:45 +0000 (21:10 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Tue, 1 Sep 2015 12:19:30 +0000 (21:19 +0900)
Change-Id: Ia55829199f37e5f2732849309cce607ccbe6cbda
Signed-off-by: Soohye Shin <soohye.shin@samsung.com>
include/view.h
src/view/view_pin.c
src/view/view_user_edit.c

index d5e1a19..b4cdc10 100644 (file)
@@ -25,7 +25,9 @@ enum update_type {
        UPDATE_TYPE_NOTI,
        UPDATE_TYPE_USER,
        UPDATE_TYPE_RESET,
-       UPDATE_TYPE_MENU
+       UPDATE_TYPE_MENU,
+       UPDATE_TYPE_PIN_CODE,
+       UPDATE_TYPE_PIN_RESULT
 };
 
 enum menu_type {
index 2ebbe9b..5af4fc4 100644 (file)
 
 struct _priv {
        Evas_Object *win;
+
        ui_gadget_h ug;
+
+       char *pincode;
 };
 
 static void _send_message(struct _priv *priv, const char *result)
@@ -52,13 +55,12 @@ static void _send_message(struct _priv *priv, const char *result)
        service_destroy(service);
 }
 
-static void _check_pincode(struct _priv *priv, const char *pincode)
+static void _check_pincode(struct _priv *priv, char *pincode)
 {
-       /* FIXME: should check the pincode correctly */
-       if (!strcmp(pincode, "1111")) {
-               /* TODO: do something before hiding view */
-
+       if (!strcmp(pincode, priv->pincode)) {
                viewmgr_hide_view(VIEW_PIN);
+               viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_PIN_RESULT,
+                               pincode);
        } else {
                _send_message(priv, MESSAGE_FAIL);
        }
@@ -160,6 +162,9 @@ static void _hide(void *data)
 
        if (priv->ug)
                ug_destroy(priv->ug);
+
+       free(priv->pincode);
+       priv->pincode = NULL;
 }
 
 static void _destroy(void *data)
@@ -176,12 +181,37 @@ static void _destroy(void *data)
        free(priv);
 }
 
+static void _update(void *view_data, int update_type, void *data)
+{
+       struct _priv *priv;
+
+       if (!view_data) {
+               _ERR("Invalid argument");
+               return;
+       }
+
+       priv = view_data;
+
+       switch (update_type) {
+       case UPDATE_TYPE_PIN_CODE:
+               if (!data)
+                       return;
+
+               priv->pincode = strdup(data);
+               break;
+       default:
+               _ERR("Invalid type");
+               return;
+       }
+}
+
 static view_class vclass = {
        .view_id = VIEW_PIN,
        .create = _create,
        .show = _show,
        .hide = _hide,
-       .destroy = _destroy
+       .destroy = _destroy,
+       .update = _update
 };
 
 view_class *view_pin_get_vclass(void)
index f7dffa4..8e58ac6 100644 (file)
@@ -135,6 +135,9 @@ static void _unfocused(int id, void *data, Evas_Object *obj,
        }
 }
 
+static void _key_up(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Up *ev);
+
 static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev);
 
@@ -151,6 +154,7 @@ static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj,
 static input_handler handler = {
        .focused = _focused,
        .unfocused = _unfocused,
+       .key_up = _key_up,
        .key_down = _key_down,
        .mouse_up = _mouse_up,
        .mouse_move = _mouse_move
@@ -574,32 +578,36 @@ static void _select_eo(struct _priv *priv, Evas_Object *obj)
                _load_user_icon(priv, file, focus_file);
 }
 
-static void _select_btn_done(struct _priv *priv)
+static void _reset(struct _priv *priv);
+
+static void _update_user(struct _priv *priv, const char *pincode)
 {
        const char *name, *photo;
        char buf[MAX_BUF];
+       bool r;
 
        _get_profile(priv, &name, &photo);
+
        if (priv->di) {
                priv->di->action = ITEM_SELECT_ACTION_UPDATE;
                priv->di->title = strdup(name ? name : "");
                priv->di->icon = strdup(photo ? photo :
                                IMAGE_USER_DEFAULT);
-               if (datamgr_select_item(priv->dm, priv->di)) {
-                       snprintf(buf, sizeof(buf), "%s %s", name, MESSAGE_USER_UPDATE);
-                       utils_add_toast(priv->win, buf);
-               }
+               priv->di->parameter = strdup(pincode ? pincode : "");
+               snprintf(buf, sizeof(buf), "%s %s", name, MESSAGE_USER_UPDATE);
+               r = datamgr_select_item(priv->dm, priv->di);
        } else {
-               if (!name || !strcmp(name, "")) {
-                       elm_object_focus_set(priv->name, EINA_TRUE);
-                       return;
-               }
-               if (datamgr_add_item(priv->dm, name, photo, "")) {
-                       snprintf(buf, sizeof(buf), "%s %s", name, MESSAGE_USER_ADD);
-                       utils_add_toast(priv->win, buf);
-               }
+               snprintf(buf, sizeof(buf), "%s %s", name, MESSAGE_USER_ADD);
+               r = datamgr_add_item(priv->dm, name, photo,
+                               pincode ? pincode : "");
+       }
+
+       if (!r) {
+               _reset(priv);
+               return;
        }
 
+       utils_add_toast(priv->win, buf);
        priv->di = NULL;
        viewmgr_pop_view();
 }
@@ -639,9 +647,6 @@ static void _select(struct _priv *priv, int id, Evas_Object *obj)
        case INPUT_HANDLER_TYPE_ENTRY:
                elm_object_focus_set(priv->done, EINA_TRUE);
                break;
-       case INPUT_HANDLER_TYPE_BTN_DONE:
-               _select_btn_done(priv);
-               break;
        case INPUT_HANDLER_TYPE_BTN_CANCEL:
                if (_check_changed_input(priv)) {
                        _add_discard_popup(priv);
@@ -691,11 +696,94 @@ static void _select_pin(struct _priv *priv, Evas_Object *obj)
        elm_object_focus_allow_set(obj, EINA_FALSE);
 }
 
+static void _show_action_menu(struct _priv *priv)
+{
+       struct view_update_data vdata;
+
+       vdata.state = _check_changed_input(priv);
+       vdata.type = MENU_TYPE_ADD;
+
+       if (priv->di) {
+               if (priv->user_type == USER_ITEM_ADMIN &&
+                               priv->di->type != USER_ITEM_ADMIN) {
+                       vdata.type = MENU_TYPE_EDIT;
+                       vdata.di = priv->di;
+               }
+       }
+
+       viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_TYPE_MENU, &vdata);
+       viewmgr_show_view(VIEW_ACTION_MENU);
+}
+
+static bool _check_done(struct _priv *priv)
+{
+       int i;
+
+       if (!strcmp(elm_entry_entry_get(priv->name), "")) {
+               elm_object_focus_set(priv->name, EINA_TRUE);
+               return false;
+       }
+
+       if (!priv->locked) {
+               _update_user(priv, NULL);
+               return false;
+       }
+
+       for (i = 0; i < COUNT_PIN; i++) {
+               if (elm_entry_is_empty(priv->pin[i])) {
+                       elm_object_focus_set(priv->pin[i], EINA_TRUE);
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+static void _key_up(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Up *ev)
+{
+       struct _priv *priv;
+       char pincode[8];
+
+       if (!data) {
+               _ERR("Invalid argument");
+               return;
+       }
+
+       if (id != INPUT_HANDLER_TYPE_BTN_DONE)
+               return;
+
+       priv = data;
+
+       if (!strcmp(ev->keyname, KEY_BACK) ||
+                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
+               if (_check_changed_input(priv)) {
+                       _add_discard_popup(priv);
+                       return;
+               }
+               viewmgr_pop_view();
+       } else if (!strcmp(ev->keyname, KEY_ENTER) ||
+                       !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
+               if (!_check_done(priv))
+                       return;
+
+               snprintf(pincode, sizeof(pincode), "%s%s%s%s",
+                               elm_entry_entry_get(priv->pin[0]),
+                               elm_entry_entry_get(priv->pin[1]),
+                               elm_entry_entry_get(priv->pin[2]),
+                               elm_entry_entry_get(priv->pin[3]));
+               viewmgr_update_view(VIEW_PIN, UPDATE_TYPE_PIN_CODE, pincode);
+               viewmgr_show_view(VIEW_PIN);
+       } else if (!strcmp(ev->keyname, KEY_MENU) ||
+                       !strcmp(ev->keyname, KEY_MENU_REMOTE)) {
+               _show_action_menu(priv);
+       }
+}
+
 static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev)
 {
        struct _priv *priv;
-       struct view_update_data vdata;
 
        if (!data) {
                _ERR("Invalid argument");
@@ -707,7 +795,6 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                        !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
                switch (id) {
                case INPUT_HANDLER_TYPE_PHOTO:
-               case INPUT_HANDLER_TYPE_BTN_DONE:
                case INPUT_HANDLER_TYPE_BTN_CANCEL:
                case INPUT_HANDLER_TYPE_ENTRY:
                case INPUT_HANDLER_TYPE_PIN:
@@ -739,38 +826,25 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                        !strcmp(ev->keyname, KEY_MENU_REMOTE)) {
                switch (id) {
                case INPUT_HANDLER_TYPE_PHOTO:
-               case INPUT_HANDLER_TYPE_BTN_DONE:
                case INPUT_HANDLER_TYPE_BTN_CANCEL:
                case INPUT_HANDLER_TYPE_ENTRY:
                case INPUT_HANDLER_TYPE_PIN:
                case INPUT_HANDLER_TYPE_LOCK:
-                       vdata.state = _check_changed_input(priv);
-                       vdata.type = MENU_TYPE_ADD;
-                       if (priv->di) {
-                               if (priv->user_type == USER_ITEM_ADMIN &&
-                                               priv->di->type !=
-                                               USER_ITEM_ADMIN) {
-                                       vdata.type = MENU_TYPE_EDIT;
-                                       vdata.di = priv->di;
-                               }
-                       }
-                       viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_TYPE_MENU,
-                                       &vdata);
-                       viewmgr_show_view(VIEW_ACTION_MENU);
+                       _show_action_menu(priv);
                        break;
                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)) {
+                       !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);
        }
@@ -910,6 +984,12 @@ static void _update(void *view_data, int update_type, void *data)
        case UPDATE_TYPE_RESET:
                _reset(priv);
                break;
+       case UPDATE_TYPE_PIN_RESULT:
+               if (!data)
+                       return;
+
+               _update_user(priv, data);
+               break;
        default:
                _ERR("Invalid type");
                return;