*/
#include <Elementary.h>
+#include <ui-gadget.h>
#include <app_debug.h>
#include <viewmgr.h>
#include <inputmgr.h>
+#include <app_define.h>
#include "defs.h"
#include "view.h"
-#include "utils.h"
-
-#define COUNT_PIN 4
-#define PADDING_PIN 14
-#define WIDTH_PIN 64
-#define KEY_PIN "pin"
-
-enum input_handler_type {
- INPUT_HANDLER_TYPE_PIN
-};
struct _priv {
Evas_Object *win;
- Evas_Object *base;
- Evas_Object *pin[COUNT_PIN];
- Evas_Object *box;
+ ui_gadget_h ug;
};
-static void _focused(int id, void *data, Evas_Object *obj,
- Elm_Object_Item *item)
+static void _send_message(struct _priv *priv, const char *result)
{
- switch (id) {
- case INPUT_HANDLER_TYPE_PIN:
- elm_object_signal_emit(obj, SIG_SELECT, SRC_ELM);
- break;
- default:
+ service_h service;
+ int r;
+
+ r = service_create(&service);
+ if (r != SERVICE_ERROR_NONE) {
+ _ERR("failed to create service");
return;
}
-}
-static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
- Evas_Event_Key_Down *ev);
-
-static input_handler handler = {
- .focused = _focused,
- .key_down = _key_down
-};
+ r = service_add_extra_data(service, PARAM_PIN, result);
+ if (r != SERVICE_ERROR_NONE) {
+ _ERR("failed to add data");
+ service_destroy(service);
+ return;
+ }
-static bool _check_valid_pin(struct _priv *priv)
-{
- /* It should be implemented later */
+ ug_send_message(priv->ug, service);
- return false;
+ service_destroy(service);
}
-static void _unload_pins(struct _priv *priv)
+static void _check_pincode(struct _priv *priv, const char *pincode)
{
- int i;
+ /* FIXME: should check the pincode correctly */
+ if (!strcmp(pincode, "1111")) {
+ /* TODO: do something before hiding view */
- 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]);
+ viewmgr_hide_view(VIEW_PIN);
+ } else {
+ _send_message(priv, MESSAGE_FAIL);
}
-
- memset(priv->pin, 0x00, sizeof(priv->pin));
}
-static bool _load_pins(struct _priv *priv)
+static void _ug_result_cb(ui_gadget_h ug, service_h result, void *p)
{
- Evas_Object *box, *pin;
- Elm_Entry_Filter_Limit_Size pin_size = {
- .max_char_count = 1,
- };
- Elm_Entry_Filter_Accept_Set pin_char = {
- .accepted = "0123456789",
- };
- int i;
-
- box = utils_add_box(priv->base, true);
- if (!box) {
- _ERR("failed to add box");
- return false;
+ char *pincode;
+ int r;
+
+ if (!p) {
+ _ERR("Invalid argument");
+ return;
}
- elm_box_padding_set(box, PADDING_PIN, 0);
- 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);
- if (!pin) {
- _ERR("failed to add entry");
- memset(priv->pin, 0x00, sizeof(priv->pin));
- evas_object_del(box);
- return false;
- }
- elm_entry_markup_filter_append(pin, elm_entry_filter_limit_size,
- &pin_size);
- elm_entry_markup_filter_append(pin, elm_entry_filter_accept_set,
- &pin_char);
- 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);
+
+ r = service_get_extra_data(result, PARAM_PIN, &pincode);
+ if (r != SERVICE_ERROR_NONE || !pincode) {
+ _ERR("failed to get data");
+ return;
}
- priv->box = box;
+ _check_pincode(p, pincode);
- return true;
+ free(pincode);
}
-static void _selected(void *data, Evas_Object *obj)
+static void _ug_destroy_cb(ui_gadget_h ug, void *p)
{
- struct _priv *priv;
- int i;
+ viewmgr_hide_view(VIEW_PIN);
+}
- if (!data || !obj) {
- _ERR("Invalid argument");
- return;
- }
+static ui_gadget_h _load_ug(struct _priv *priv)
+{
+ ui_gadget_h ug;
+ struct ug_cbs cb = {0,};
- priv = data;
- i = (int)evas_object_data_get(obj, KEY_PIN);
+ cb.result_cb = _ug_result_cb;
+ cb.destroy_cb = _ug_destroy_cb;
+ cb.priv = priv;
- 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);
- }
-}
+ ug = ug_create(NULL, UG_ID_PIN, UG_MODE_FRAMEVIEW, NULL, &cb);
-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;
- }
+ return ug;
}
static Evas_Object *_create(Evas_Object *win, void *data)
{
struct _priv *priv;
- Evas_Object *base;
if (!win) {
_ERR("Invalid argument");
return NULL;
}
- base = utils_add_layout(win, GRP_PIN, false, NULL);
- if (!base) {
- _ERR("failed to create base");
- free(priv);
- return NULL;
- }
- evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
- elm_win_resize_object_add(win, base);
-
priv->win = win;
- priv->base = base;
viewmgr_set_view_data(VIEW_PIN, priv);
- return base;
+ return win;
}
static void _show(void *data)
{
struct _priv *priv;
+ ui_gadget_h ug;
if (!data) {
_ERR("Invalid argument");
priv = data;
- evas_object_show(priv->base);
+ ug = _load_ug(priv);
+ if (!ug) {
+ _ERR("failed to create ug");
+ return;
+ }
- _load_pins(priv);
+ priv->ug = ug;
}
static void _hide(void *data)
priv = data;
- evas_object_hide(priv->base);
-
- _unload_pins(priv);
+ if (priv->ug)
+ ug_destroy(priv->ug);
}
static void _destroy(void *data)
priv = data;
- evas_object_del(priv->base);
free(priv);
}