summaryrefslogtreecommitdiff
path: root/src/ui.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui.c')
-rwxr-xr-xsrc/ui.c1826
1 files changed, 1826 insertions, 0 deletions
diff --git a/src/ui.c b/src/ui.c
new file mode 100755
index 0000000..7913ae3
--- /dev/null
+++ b/src/ui.c
@@ -0,0 +1,1826 @@
+/*
+ * pwlock
+ *
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <appcore-efl.h>
+#include <Ecore_X.h>
+#include <ui-gadget.h>
+#include <vconf.h>
+#include <ail.h>
+#include <appsvc.h>
+#include <system_info.h>
+
+#include "pwlock.h"
+#include "util.h"
+#include "tapi.h"
+#include "ui.h"
+#include "langs.h"
+#include "ui-callback.h"
+
+static Elm_Gen_Item_Class itc_label1, itc_entry1, itc_label2, itc_entry2;
+static void _ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv);
+static void _ug_destroy_cb(ui_gadget_h ug, void *priv);
+static Evas_Object *_create_bg(Evas_Object * win);
+static void _destroy_previous_ugs(void *data);
+static void _focused_cb(void *data, Evas_Object * obj, void *event_info);
+static void _unfocused_cb(void *data, Evas_Object * obj, void *event_info);
+static void _eraser_clicked_cb(void *data, Evas_Object * obj,
+ const char *emission, const char *source);
+static Evas_Object *_create_editfield(Evas_Object * parent, Eina_Bool focus);
+static Evas_Object *_editfield_entry_get(Evas_Object * parent);
+static Evas_Object *_create_toolbar_btn(Evas_Object *parent);
+
+static int _ug_destroy = 0;
+
+static int _header_idx[] = {
+ _UI_PIN, IDS_IDLE_HEADER_PIN_LOCK,
+ _UI_PUK, IDS_IDLE_HEADER_PUK_LOCK,
+ _UI_PUK_PIN, IDS_IDLE_HEADER_PUK_LOCK,
+ _UI_PUK_CNF, IDS_IDLE_HEADER_PUK_LOCK,
+ _UI_BLOCK, IDS_IDLE_HEADER_SIM_BLOCKED,
+ _UI_SIM_LOCK, IDS_IDLE_HEADER_SIM_LOCK,
+ _UI_NETWORK_LOCK_NCK, IDS_IDLE_HEADER_NETWORK_LOCK,
+ _UI_NETWORK_LOCK_NSCK, IDS_IDLE_HEADER_NETWORK_LOCK,
+ _UI_NETWORK_LOCK_SPCK, IDS_IDLE_HEADER_NETWORK_LOCK,
+ _UI_NETWORK_LOCK_CCK, IDS_IDLE_HEADER_NETWORK_LOCK,
+ _UI_FINISH, IDS_STU_POP_SETUP_COMPLETE,
+};
+
+static int _tit_idx[] = {
+ _UI_PIN, STR_E_PIN, IDS_IDLE_BODY_ENTER_PIN,
+ _UI_PUK, STR_E_PUK, IDS_IDLE_BODY_ENTER_PUK,
+ _UI_PUK_PIN, STR_E_NEW, IDS_IDLE_BODY_ENTER_NEW_PIN,
+ _UI_PUK_CNF, STR_R_PIN, IDS_IDLE_BODY_ENTER_PIN,
+ _UI_BLOCK, STR_BLOCK,
+ IDS_IDLE_BODY_SIM_CARD_NOT_AVAILABLE_CONTACT_YOUR_SERVICE_PROVIDER,
+ _UI_SIM_LOCK, STR_SIM_LOCK, IDS_COM_BODY_ENTER_PASSWORD,
+ _UI_NETWORK_LOCK_NCK, STR_NETWORK_LOCK_NCK,
+ IDS_IDLE_BODY_NETWORK_PERSONALISATION_ON_ENTER_CONTROL_KEY,
+ _UI_NETWORK_LOCK_NSCK, STR_NETWORK_LOCK_NSCK,
+ IDS_IDLE_BODY_NETWORK_SUBSET_PERSONALISATION_ON_ENTER_CONTROL_KEY,
+ _UI_NETWORK_LOCK_SPCK, STR_NETWORK_LOCK_SPCK,
+ IDS_IDLE_BODY_SERVICE_PROVIDER_PERSONALISATION_ON_ENTER_CONTROL_KEY,
+ _UI_NETWORK_LOCK_CCK, STR_NETWORK_LOCK_CCK,
+ IDS_IDLE_BODY_CORPORATE_PERSONALISATION_ON_ENTER_CONTROL_KEY,
+ _UI_LANG, STR_LANG, IDS_IDLE_HEADER_DISPLAY_LANGUAGE,
+};
+
+static char *_get_header(int ui_type)
+{
+ int i;
+ char *r = "";
+
+ for (i = 0; i < sizeof(_header_idx) / sizeof(_header_idx[0]); i = i + 2) {
+ if (ui_type == _header_idx[i]) {
+ r = pwlock_get_string(_header_idx[i + 1]);
+ break;
+ }
+ }
+
+ return r;
+}
+
+static char *_get_tip(int ui_type)
+{
+ int i;
+ char *r = "";
+ if (sizeof(_tit_idx[0]) != 0) {
+ for (i = 0; i < sizeof(_tit_idx) / sizeof(_tit_idx[0]);
+ i = i + 3) {
+ if (ui_type == _tit_idx[i]) {
+ r = pwlock_get_string(_tit_idx[i + 2]);
+ break;
+ }
+ }
+ }
+
+ return r;
+}
+
+static Eina_Bool pwlock_back_cb(void *data, Elm_Object_Item *it)
+{
+ _DBG("back key is touched");
+
+ elm_object_item_del(it);
+
+ return EINA_FALSE;
+}
+
+static Evas_Object *_create_bg(Evas_Object * win)
+{ /* nbeat */
+ Evas_Object *bg = elm_bg_add(win);
+ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_color_set(bg, 0, 0, 0, 255);
+ elm_win_resize_object_add(win, bg);
+ evas_object_show(bg);
+ return bg;
+}
+
+static Evas_Object *_create_conformant(Evas_Object * parent)
+{
+ Evas_Object *conform;
+ conform = elm_conformant_add(parent);
+ evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(parent, conform);
+ elm_win_indicator_mode_set(parent, ELM_WIN_INDICATOR_SHOW);
+ evas_object_show(conform);
+
+ return conform;
+}
+
+static Evas_Object *_create_layout(struct appdata *ad)
+{
+ Evas_Object *ly;
+
+ ly = elm_layout_add(ad->elm_conform);
+ if (!ly) {
+ _ERR("UI layout add error");
+ return NULL;
+ }
+
+ /* Apply the nbeat layout style */
+ elm_layout_theme_set(ly, "layout", "application", "default");
+
+ evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_show(ly);
+
+ return ly;
+}
+
+static Evas_Object *_create_toolbar_btn(Evas_Object *parent)
+{
+ Evas_Object *toolbar = elm_toolbar_add(parent);
+
+ if (!toolbar)
+ return NULL;
+
+ elm_object_style_set(toolbar, "default");
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+ elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+
+ return toolbar;
+}
+
+Evas_Object *pwlock_add_layout_from_edj(Evas_Object *parent, const char *file,
+ const char *group) {
+ Evas_Object *layout = NULL;
+ Eina_Bool ret = EINA_FALSE;
+
+ if (parent == NULL) {
+ _ERR("parent is NULL");
+ return NULL;
+ }
+
+ layout = elm_layout_add(parent);
+ if (layout == NULL) {
+ _ERR("layout is NULL");
+ return NULL;
+ }
+
+ ret = elm_layout_file_set(layout, file, group);
+ _DBG("File:%s, Group:%s", file, group);
+ if (ret != EINA_TRUE) {
+ _DBG("Error loading File:%s, Group:%s", file, group);
+ evas_object_del(layout);
+ return NULL;
+ }
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_show(layout);
+
+ return layout;
+}
+
+static void init_ui(struct appdata *ad)
+{
+ if (!ad->elm_bg)
+ ad->elm_bg = _create_bg(ad->win);
+
+ if (!ad->elm_conform)
+ ad->elm_conform = _create_conformant(ad->win);
+
+ if (!ad->layout_main) {
+ ad->layout_main = _create_layout(ad);
+ if (!ad->layout_main)
+ return;
+ elm_object_content_set(ad->elm_conform, ad->layout_main);
+ }
+
+ if (!ad->elm_navigation_frame) {
+ ad->elm_navigation_frame = elm_naviframe_add(ad->layout_main);
+ if (!ad->elm_navigation_frame) {
+ _ERR("UI navi add error");
+ return;
+ }
+
+ elm_object_part_content_set(ad->layout_main, "elm.swallow.content", ad->elm_navigation_frame);
+ evas_object_show(ad->elm_navigation_frame);
+ }
+}
+
+void show_msg(struct appdata *ad, int strid)
+{
+ int max = 0;
+ char *msg = NULL;
+ char *str = NULL;
+
+ if (ad->msg) {
+ free(ad->msg);
+ ad->msg = NULL;
+ }
+ if (strid == IDS_IDLE_BODY_PD_TO_PD_DIGITS_REQUIRED) {
+
+ max = PWLOCK_PIN_PASSWORD_MAX_LENGTH;
+ str = pwlock_get_string(IDS_IDLE_BODY_PD_TO_PD_DIGITS_REQUIRED);
+ Eina_Strbuf *temp_str_buf = eina_strbuf_new();
+ eina_strbuf_append_printf(temp_str_buf,
+ str, PWLOCK_PASSWORD_MIN_LENGTH, max);
+ msg = eina_strbuf_string_steal(temp_str_buf);
+ eina_strbuf_free(temp_str_buf);
+ } else {
+ msg = pwlock_get_string(strid);
+ }
+ if (msg == NULL || msg[0] == '\0')
+ return;
+
+ ad->msg = strdup(msg);
+
+ if (!ad->layout_contents)
+ return;
+ remove_waiting_popup(ad);
+ show_popup(ad, msg, EINA_TRUE);
+}
+
+static inline const char *_entry_get(Evas_Object * e)
+{
+ const char *s = NULL;
+
+ if (e)
+ s = elm_entry_entry_get(_editfield_entry_get(e));
+
+ return s;
+}
+
+static void _set_str(char **s, const char *str)
+{
+ if (s == NULL)
+ return;
+
+ if (*s)
+ free(*s);
+
+ if (str && str[0] != '\0')
+ *s = strdup(str);
+ else
+ *s = NULL;
+}
+
+static void do_UI_PUK_CNF(struct appdata *ad)
+{
+ const char *s = NULL;
+
+ _DBG("%s", __func__);
+ s = _entry_get(ad->layout_entry);
+
+ if (s && ad->pin_str && !strcmp(ad->pin_str, s)) {
+ do_state(ad);
+ return;
+ }
+
+ _set_str(&ad->pin_str, NULL);
+ show_msg(ad, IDS_IDLE_BODY_INCORRECT_PIN_TRY_AGAIN);
+
+ /* FIXME popup should be top display, so load main should be called after show msg.. */
+ load_main(ad, _UI_PUK_PIN);
+}
+
+static int _check_input_string(int view_type, const char *entry_str)
+{
+
+ int lenstr = 0;
+ _DBG("_check_input_string: %s", entry_str);
+
+ if (entry_str == NULL)
+ return IDS_IDLE_BODY_PASSWORD_EMPTY;
+
+ lenstr = strlen(entry_str);
+ int max_len = 0;
+ max_len = PWLOCK_PIN_PASSWORD_MAX_LENGTH;
+ _DBG("_check_input_string length: %d,max_len=%d,PWLOCK_PASSWORD_MIN_LENGTH=%d", lenstr, max_len, PWLOCK_PASSWORD_MIN_LENGTH);
+
+ if (lenstr < PWLOCK_PASSWORD_MIN_LENGTH || lenstr > max_len) {
+ return IDS_IDLE_BODY_PD_TO_PD_DIGITS_REQUIRED;
+ }
+ return 0; /* means fit for the rule */
+}
+
+static void response_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad;
+ ad = (struct appdata *)data;
+
+ _DBG("response callback=%d\n", (int)event_info);
+
+ if (((int)event_info != 5) && (obj != NULL)) {
+ evas_object_del(obj);
+ }
+ /* clear_entry(ad); */
+}
+
+static void _block_clicked_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ if (obj) {
+ evas_object_del(obj);
+ obj = NULL;
+ }
+}
+
+void _show_popup(void *data, char *msg_str)
+{
+ Evas_Object *popup;
+ Evas_Object *button;
+ struct appdata *ad;
+ ad = (struct appdata *)data;
+ Ecore_X_Window x_win;
+
+ ecore_imf_context_input_panel_hide(elm_entry_imf_context_get
+ (_editfield_entry_get
+ (ad->layout_entry)));
+ popup = elm_popup_add(ad->win);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+
+ /* FIXME */
+ x_win = elm_win_xwindow_get(ad->win);
+ ecore_x_netwm_window_type_set(x_win, ECORE_X_WINDOW_TYPE_DIALOG);
+
+ evas_object_smart_callback_add(popup, "block,clicked",
+ _block_clicked_cb, NULL);
+
+ elm_popup_timeout_set(popup, 3);
+ elm_object_text_set(popup, msg_str);
+ elm_object_part_text_set(popup, "title", "Information");
+
+ button = elm_button_add(popup);
+ elm_object_text_set(button, pwlock_get_string(IDS_COM_SK_OK));
+ elm_object_part_content_set(popup, "button1", button);
+ evas_object_smart_callback_add(button, "clicked", response_cb, popup);
+
+ evas_object_show(popup);
+}
+
+static void _imf_context_input_panel_hide(void *data)
+{
+ struct appdata *ad = data;
+ Ecore_IMF_Context *imf_context = NULL;
+ Ecore_IMF_Context *imf_context_second = NULL;
+ imf_context =
+ elm_entry_imf_context_get(_editfield_entry_get(ad->layout_entry));
+ if (imf_context)
+ ecore_imf_context_input_panel_hide(imf_context);
+
+ imf_context_second =
+ elm_entry_imf_context_get(_editfield_entry_get
+ (ad->layout_second_entry));
+ if (imf_context_second)
+ ecore_imf_context_input_panel_hide(imf_context_second);
+}
+
+static void _done_button_changed(void *data, Evas_Object * obj, void *e)
+{
+ struct appdata *ad = data;
+ const char* entry_str = NULL;
+ int length = 0;
+
+ entry_str =elm_entry_entry_get(_editfield_entry_get(ad->layout_entry));
+
+ if (entry_str) {
+ length = strlen(entry_str);
+ }
+
+ if (length == 0) {
+ elm_object_disabled_set(ad->elm_button_done, EINA_TRUE);
+ } else {
+ elm_object_disabled_set(ad->elm_button_done, EINA_FALSE);
+ }
+ if (elm_object_focus_get(ad->layout_entry)) {
+ if (elm_entry_is_empty(_editfield_entry_get(ad->layout_entry))) {
+ elm_object_signal_emit(ad->layout_entry,
+ "elm,state,eraser,hide", "elm");
+ } else {
+ elm_object_signal_emit(ad->layout_entry,
+ "elm,state,eraser,show", "elm");
+ }
+ }
+}
+
+static void _done_cb(void *data, Evas_Object * obj, void *e)
+{
+ struct appdata *ad = data;
+ int ret = -1;
+ ad->lock_view_loaded = 1;
+ _DBG("Done clicked ui_type: %d", ad->ui_type);
+ _imf_context_input_panel_hide(ad);
+
+ switch (ad->ui_type) {
+ case _UI_PIN:
+ case _UI_SIM_LOCK:
+ show_waiting_popup(ad,
+ pwlock_get_string
+ (IDS_IDLE_POP_CHECKING_SIM_CARD_ING));
+ _set_str(&ad->entry_str, _entry_get(ad->layout_entry));
+ _DBG("entry string: [%s]", ad->entry_str);
+ ret = _check_input_string(ad->ui_type, ad->entry_str);
+ if (ret == 0) {
+ do_state(ad);
+ } else {
+ remove_waiting_popup(ad);
+ show_msg(ad, ret);
+ clear_entry(ad);
+ }
+ break;
+ case _UI_PUK:
+ _set_str(&ad->entry_str, _entry_get(ad->layout_entry));
+ _DBG("entry string: [%s]", ad->entry_str);
+ ret = _check_input_string(ad->ui_type, ad->entry_str);
+ if (ret == 0) {
+ /* load_main(ad, _UI_PUK_PIN); */
+ pwlock_destroy(ad);
+ show_puk_pin(ad);
+ } else {
+ remove_waiting_popup(ad);
+ show_msg(ad, ret);
+ clear_entry(ad);
+ }
+ break;
+ case _UI_PUK_PIN:
+ show_waiting_popup(ad,
+ pwlock_get_string
+ (IDS_IDLE_POP_CHECKING_SIM_CARD_ING));
+ _set_str(&ad->pin_str, _entry_get(ad->layout_entry));
+ _DBG("entry string: [%s]", ad->pin_str);
+ ret = _check_input_string(ad->ui_type, ad->pin_str);
+ if (ret == 0) {
+ const char *layout_entry = _entry_get(ad->layout_entry);
+ const char *layout_second_entry = _entry_get(ad->layout_second_entry);
+ if (layout_entry && layout_second_entry &&
+ 0 == strcmp(layout_entry, layout_second_entry)) {
+ do_UI_PUK_CNF(ad);
+ } else {
+ remove_waiting_popup(ad);
+ show_msg(ad, IDS_IDLE_POP_PASSWORDS_NOT_MATCH);
+ clear_entry(ad);
+ }
+ } else {
+ remove_waiting_popup(ad);
+ show_msg(ad, ret);
+ clear_entry(ad);
+ }
+ break;
+ case _UI_PUK_CNF:
+ show_waiting_popup(ad,
+ pwlock_get_string
+ (IDS_IDLE_POP_CHECKING_SIM_CARD_ING));
+ ret =
+ _check_input_string(ad->ui_type,
+ _entry_get(ad->layout_entry));
+ if (ret == 0) {
+ do_UI_PUK_CNF(ad);
+ } else {
+ remove_waiting_popup(ad);
+ show_msg(ad, ret);
+ clear_entry(ad);
+ }
+ break;
+ case _UI_NETWORK_LOCK_NCK:
+ case _UI_NETWORK_LOCK_NSCK:
+ case _UI_NETWORK_LOCK_SPCK:
+ case _UI_NETWORK_LOCK_CCK:
+ _set_str(&ad->entry_str, _entry_get(ad->layout_entry));
+ _DBG("entry string: [%s]", ad->entry_str);
+ ret = _check_input_string(ad->ui_type, ad->entry_str);
+ if (ret == 0) {
+ do_state(ad);
+ } else {
+ remove_waiting_popup(ad);
+ clear_entry(ad);
+ show_msg(ad, ret);
+ }
+ break;
+ }
+ _DBG("Exit _done_cb");
+}
+
+static void _dial_cb(void *data, Evas_Object * obj, void *e)
+{
+ _DBG("%s,%d", __func__, __LINE__);
+ struct appdata *ad = data;
+
+ if (!ad) {
+ return;
+ }
+
+ service_h service;
+ service_create(&service);
+
+ if (!service) {
+ return;
+ }
+
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NORMAL);
+
+// To-Do : In here, we have to set an appropriate parameter for emergency call mode.
+// However, current ref. dialer app control does not support emergency mode,
+// so, we have to wait till dialer app control support emergency call mode.
+
+ service_set_operation(service,SERVICE_OPERATION_DIAL);
+ service_send_launch_request(service, NULL, NULL);
+
+ service_destroy(service);
+}
+
+static void _pp_rsp_ok_cb(void *data, Evas_Object * e, void *ei)
+{
+ int i = (int)ei;
+ struct appdata *ad = (struct appdata *)data;
+
+ _DBG("popup rsp: %d\n", i);
+
+ if (NULL == ad) {
+ return;
+ }
+
+ if (ad->popup) {
+ evas_object_del(ad->popup);
+ ad->popup = NULL;
+ }
+
+ ad->cancel_setup = 1;
+ if (ad->current_ug) {
+ ug_destroy(ad->current_ug);
+ ad->state = _ST_EXIT;
+ do_state(ad);
+ }
+
+ if (ad->sim_status == SIM_REQ_LOCK || ad->sim_status == SIM_REQ_NCK
+ || ad->sim_status == SIM_REQ_NSCK || ad->sim_status == SIM_REQ_SPCK
+ || ad->sim_status == SIM_REQ_CCK) {
+ if (ad->pin_changed == 1) {
+ show_sim_lock(ad);
+ ad->pin_changed = 0;
+ }
+ }
+ if (ad->ui_type == _UI_LANG || ad->ui_type == _UI_TIME) { /* for IMF show problems */
+ return;
+ }
+ if (ad->layout_entry) {
+ evas_object_show(_editfield_entry_get(ad->layout_entry));
+ elm_object_focus_set(_editfield_entry_get(ad->layout_entry),
+ EINA_TRUE);
+ }
+ if (ad->msg) {
+ free(ad->msg);
+ ad->msg = NULL;
+ }
+}
+
+static void _pp_rsp_cancel_cb(void *data, Evas_Object * e, void *ei)
+{
+ int i = (int)ei;
+ struct appdata *ad = (struct appdata *)data;
+
+ _DBG("popup rsp: %d\n", i);
+
+ if (NULL == ad) {
+ return;
+ }
+
+ if (ad->popup) {
+ evas_object_del(ad->popup);
+ ad->popup = NULL;
+ }
+
+ ad->cancel_setup = 0;
+ if (ad->sim_status == SIM_REQ_LOCK || ad->sim_status == SIM_REQ_NCK
+ || ad->sim_status == SIM_REQ_NSCK || ad->sim_status == SIM_REQ_SPCK
+ || ad->sim_status == SIM_REQ_CCK) {
+ if (ad->pin_changed == 1) {
+ show_sim_lock(ad);
+ ad->pin_changed = 0;
+ }
+ }
+ if (ad->ui_type == _UI_LANG || ad->ui_type == _UI_TIME) { /* for IMF show problems */
+ return;
+ }
+ if (ad->layout_entry) {
+ evas_object_show(_editfield_entry_get(ad->layout_entry));
+ elm_object_focus_set(_editfield_entry_get(ad->layout_entry),
+ EINA_TRUE);
+ }
+ if (ad->msg) {
+ free(ad->msg);
+ ad->msg = NULL;
+ }
+}
+
+static void _destroy_previous_ugs(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ if (!ad) {
+ return;
+ }
+
+ _DBG("%s,%d", __func__, __LINE__);
+
+ switch (ad->ui_type) {
+ case _UI_LANG:
+ break;
+ default:
+ if (ad->language_ug) {
+ ug_destroy(ad->language_ug);
+ ad->language_ug = NULL;
+ }
+ break;
+ }
+
+ _DBG("%s,%d", __func__, __LINE__);
+
+ /* when last UG or SIM changed with fisrt UG, destroy the view
+ if (((ad->sim_changed == 1) && (ad->ui_type == _UI_LANG))
+ || (ad->ui_type == _UI_TIME)) {
+ _DBG("%s,%d", __func__, __LINE__);
+ pwlock_destroy(ad);
+ }
+ */
+}
+
+static void _focused_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ if (!elm_entry_is_empty(obj)) {
+ elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
+ }
+ elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
+}
+
+static void _unfocused_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ if (elm_entry_is_empty(obj)) {
+ elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
+ }
+ elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
+}
+
+static void _eraser_clicked_cb(void *data, Evas_Object * obj,
+ const char *emission, const char *source)
+{
+ elm_entry_entry_set(data, "");
+}
+
+static Evas_Object *_create_editfield(Evas_Object * parent, Eina_Bool focus)
+{
+ Evas_Object *layout = NULL;
+ Evas_Object *entry = NULL;
+ static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+ limit_filter_data.max_char_count = PWLOCK_PIN_PASSWORD_MAX_LENGTH;
+ limit_filter_data.max_byte_count = 0;
+
+ layout = elm_layout_add(parent);
+ elm_layout_theme_set(layout, "layout", "editfield", "default");
+
+ entry = elm_entry_add(parent);
+ elm_entry_scrollable_set(entry, EINA_TRUE);
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ elm_entry_password_set(entry, EINA_TRUE);
+ elm_entry_input_panel_layout_set(entry,
+ ELM_INPUT_PANEL_LAYOUT_NUMBERONLY);
+ elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size,
+ &limit_filter_data);
+ evas_object_show(entry);
+ evas_object_smart_callback_add(entry, "focused", _focused_cb, layout);
+ evas_object_smart_callback_add(entry, "unfocused", _unfocused_cb,
+ layout);
+
+ elm_object_part_content_set(layout, "elm.swallow.content", entry);
+ elm_object_part_text_set(layout, "elm.guidetext", "");
+ elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm",
+ _eraser_clicked_cb, entry);
+ elm_object_focus_set(entry, focus);
+
+ return layout;
+}
+
+static Evas_Object *_editfield_entry_get(Evas_Object * parent)
+{
+ Evas_Object *entry = NULL;
+
+ entry = elm_object_part_content_get(parent, "elm.swallow.content");
+
+ return entry;
+}
+
+static void _entry_changed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ if (elm_object_focus_get(data)) {
+ if (elm_entry_is_empty(obj)) {
+ elm_object_signal_emit(data, "elm,state,eraser,hide",
+ "elm");
+ } else {
+ elm_object_signal_emit(data, "elm,state,eraser,show",
+ "elm");
+ }
+ }
+}
+
+static char *_gl_label_get_title1(void *data, Evas_Object * obj,
+ const char *part)
+{
+ struct appdata *ad = (struct appdata *)data;
+ char buf[512] = {0, };
+ char buf2[256] = {0, };
+
+ if (!ad || !part) {
+ return NULL;
+ }
+ if (!strcmp(part, "elm.text")) {
+ _DBG("retry_cnt = %d", ad->retry_cnt);
+ if (ad->retry_cnt == 1) {
+ snprintf(buf, sizeof(buf), "%s (%s)", _get_tip(ad->ui_type),
+ pwlock_get_string(IDS_IDLE_BODY_1_ATTEMPT_LEFT));
+ } else if (ad->retry_cnt > 1) {
+ snprintf(buf2, sizeof(buf2), pwlock_get_string(IDS_IDLE_BODY_PD_ATTEMPTS_LEFT), ad->retry_cnt);
+ snprintf(buf, sizeof(buf), "%s (%s)", _get_tip(ad->ui_type), buf2);
+
+ } else {
+ snprintf(buf, sizeof(buf), "%s", _get_tip(ad->ui_type));
+ }
+
+ return strdup(buf);
+ }
+ return NULL;
+}
+
+static Evas_Object *_gl_icon_get1(void *data, Evas_Object * obj,
+ const char *part)
+{
+ Evas_Object *layout = NULL;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ if (!ad || !part) {
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.icon")) {
+ layout = _create_editfield(obj, EINA_TRUE);
+ evas_object_smart_callback_add(_editfield_entry_get(layout),
+ "changed", _done_button_changed,
+ ad);
+
+ ad->layout_entry = layout;
+
+ return layout;
+
+ }
+ return NULL;
+}
+
+static char *_gl_label_get_title2(void *data, Evas_Object * obj,
+ const char *part)
+{
+ struct appdata *ad = (struct appdata *)data;
+ char buf[50] = { 0, };
+
+ if (!ad || !part) {
+ return NULL;
+ }
+ if (!strcmp(part, "elm.text")) {
+ snprintf(buf, sizeof(buf), "%s", _get_tip(ad->ui_type + 1));
+ return strdup(buf);
+ }
+ return NULL;
+}
+
+static Evas_Object *_gl_icon_get2(void *data, Evas_Object * obj,
+ const char *part)
+{
+ Evas_Object *layout = NULL;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ if (!ad || !part) {
+ return NULL;
+ }
+ if (!strcmp(part, "elm.icon")) {
+ layout = _create_editfield(obj, EINA_FALSE);
+ evas_object_smart_callback_add(_editfield_entry_get(layout),
+ "changed", _entry_changed_cb,
+ layout);
+
+ ad->layout_second_entry = layout;
+
+ return layout;
+
+ }
+ return NULL;
+}
+
+static void _list_set_styles()
+{
+ itc_label1.item_style = "dialogue/title";
+ itc_label1.func.text_get = _gl_label_get_title1;
+ itc_label1.func.content_get = NULL;
+ itc_label1.func.state_get = NULL;
+ itc_label1.func.del = NULL;
+
+ itc_entry1.item_style = "dialogue/1icon";
+ itc_entry1.func.text_get = NULL;
+ itc_entry1.func.content_get = _gl_icon_get1;
+ itc_entry1.func.state_get = NULL;
+ itc_entry1.func.del = NULL;
+
+ itc_label2.item_style = "dialogue/title";
+ itc_label2.func.text_get = _gl_label_get_title2;
+ itc_label2.func.content_get = NULL;
+ itc_label2.func.state_get = NULL;
+ itc_label2.func.del = NULL;
+
+ itc_entry2.item_style = "dialogue/1icon";
+ itc_entry2.func.text_get = NULL;
+ itc_entry2.func.content_get = _gl_icon_get2;
+ itc_entry2.func.state_get = NULL;
+ itc_entry2.func.del = NULL;
+}
+
+void load_main(struct appdata *ad, int ui_type)
+{
+ Evas_Object *bt_done = NULL;
+ Evas_Object *bt_dial = NULL;
+ Evas_Object *genlist = NULL;
+ Elm_Object_Item *genlist_item = NULL;
+
+ _DBG("%s", __func__);
+
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+
+ ad->ui_type = ui_type;
+
+ ad->layout_contents = pwlock_add_layout_from_edj(ad->elm_navigation_frame, EDJFILE, "pwlock-lock-ui");
+
+ genlist = elm_genlist_add(ad->layout_contents);
+ elm_object_part_content_set(ad->layout_contents, "swl/genlist", genlist);
+ _list_set_styles();
+
+
+ if (_UI_PUK_PIN == ui_type) {
+ ad->retry_cnt = 0;
+ }
+
+ genlist_item =
+ elm_genlist_item_append(genlist, &itc_label1, (void *)ad, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(genlist_item, ELM_OBJECT_SELECT_MODE_NONE);
+
+ genlist_item =
+ elm_genlist_item_append(genlist, &itc_entry1, (void *)ad, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(genlist_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ if (_UI_PUK_PIN == ui_type) {
+ genlist_item =
+ elm_genlist_item_append(genlist, &itc_label2, (void *)ad,
+ NULL, ELM_GENLIST_ITEM_NONE, NULL,
+ NULL);
+ elm_genlist_item_select_mode_set(genlist_item, ELM_OBJECT_SELECT_MODE_NONE);
+
+ genlist_item =
+ elm_genlist_item_append(genlist, &itc_entry2, (void *)ad,
+ NULL, ELM_GENLIST_ITEM_NONE, NULL,
+ NULL);
+ elm_genlist_item_select_mode_set(genlist_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ }
+
+ _DBG("load_main ad->ui_type = %d", ad->ui_type);
+
+#if 0 // This code is temporarily disabled since dialer app control does not provide emergency call mode
+ bt_dial = elm_button_add(ad->elm_navigation_frame);
+ //elm_object_style_set(bt_dial, "naviframe/title/default");
+ evas_object_size_hint_weight_set(bt_dial, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(bt_dial, EVAS_HINT_FILL, 0.5);
+
+ elm_object_text_set(bt_dial, pwlock_get_string(IDS_IDLE_BUTTON_DIALER));
+ evas_object_smart_callback_add(bt_dial, "clicked", _dial_cb, ad);
+ ad->elm_button_dial = bt_dial;
+ evas_object_show(bt_dial);
+#endif
+
+ bt_done = elm_button_add(ad->elm_navigation_frame);
+ //elm_object_style_set(bt_done, "naviframe/title/default");
+ evas_object_size_hint_weight_set(bt_done, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(bt_done, EVAS_HINT_FILL, 0.5);
+
+ elm_object_text_set(bt_done, pwlock_get_string(IDS_COM_SK_DONE));
+ evas_object_smart_callback_add(bt_done, "clicked", _done_cb, ad);
+ ad->elm_button_done = bt_done;
+ evas_object_show(bt_done);
+
+ elm_object_disabled_set(bt_done, EINA_TRUE);
+
+ elm_naviframe_item_pop(ad->elm_navigation_frame);
+ elm_naviframe_item_push(ad->elm_navigation_frame, _get_header(ui_type), NULL,
+ NULL, ad->layout_contents, NULL);
+
+#if 0 // This code is temporarily disabled since dialer app control does not provide emergency call mode
+ elm_object_part_content_set(ad->layout_contents, "button.select.emergency", bt_dial);
+#endif
+ elm_object_part_content_set(ad->layout_contents, "button.select.done", bt_done);
+
+ ad->ui_type = ui_type;
+ remove_waiting_popup(ad);
+}
+
+void show_pin(struct appdata *ad)
+{
+ _DBG("%s", __func__);
+
+ if (!ad->elm_navigation_frame)
+ init_ui(ad);
+
+ load_main(ad, _UI_PIN);
+
+ evas_object_show(ad->win);
+}
+
+void show_puk(struct appdata *ad)
+{
+ _DBG("%s", __func__);
+
+ if (!ad->elm_navigation_frame)
+ init_ui(ad);
+
+ load_main(ad, _UI_PUK);
+
+ evas_object_show(ad->win);
+}
+
+void show_puk_pin(struct appdata *ad)
+{
+ _DBG("%s", __func__);
+
+ if (!ad->elm_navigation_frame)
+ init_ui(ad);
+
+ load_main(ad, _UI_PUK_PIN);
+
+ evas_object_show(ad->win);
+}
+
+void show_sim_lock(struct appdata *ad)
+{
+ _DBG("%s", __func__);
+
+ int st = ad->sim_status;
+ if (!ad->elm_navigation_frame) {
+ init_ui(ad);
+ }
+ switch (st) {
+ case SIM_REQ_LOCK:
+ load_main(ad, _UI_SIM_LOCK);
+ break;
+ case SIM_REQ_NCK:
+ load_main(ad, _UI_NETWORK_LOCK_NCK);
+ break;
+ case SIM_REQ_NSCK:
+ load_main(ad, _UI_NETWORK_LOCK_NSCK);
+ break;
+ case SIM_REQ_SPCK:
+ load_main(ad, _UI_NETWORK_LOCK_SPCK);
+ break;
+ case SIM_REQ_CCK:
+ load_main(ad, _UI_NETWORK_LOCK_CCK);
+ break;
+ default:
+ load_main(ad, _UI_SIM_LOCK);
+ break;
+ }
+
+ evas_object_show(ad->win);
+}
+
+void show_block(struct appdata *ad)
+{
+ Evas_Object *ly = NULL;
+ Evas_Object *bt_dial = NULL;
+ Evas_Object *el = NULL;
+ Elm_Object_Item *navi_it = NULL;
+ char buf[1024] = { 0, };
+
+ _DBG("%s", __func__);
+
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+
+ if (!ad->elm_navigation_frame)
+ init_ui(ad);
+
+ ly = elm_layout_add(ad->elm_navigation_frame);
+ elm_layout_theme_set(ly, "layout", "application", "noindicator");
+ /*Create content field */
+ el = elm_label_add(ad->elm_navigation_frame);
+ elm_label_line_wrap_set(el, ELM_WRAP_WORD);
+
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<br><font_size=32 font=SLP:style=Regular color=#7c7c7c align=center>",
+ pwlock_get_string
+ (IDS_IDLE_BODY_SIM_CARD_NOT_AVAILABLE_CONTACT_YOUR_SERVICE_PROVIDER),
+ "</>");
+ elm_object_text_set(el, buf);
+
+ elm_object_part_content_set(ly, "elm.swallow.content", el);
+ evas_object_show(el);
+
+ bt_dial = elm_button_add(ad->elm_navigation_frame);
+ elm_object_text_set(bt_dial, pwlock_get_string(IDS_IDLE_BUTTON_DIALER));
+ evas_object_smart_callback_add(bt_dial, "clicked", _dial_cb, ad);
+ evas_object_show(bt_dial);
+
+ ad->layout_contents = ly;
+ navi_it = elm_naviframe_item_push(ad->elm_navigation_frame, _get_header(_UI_BLOCK),
+ NULL, NULL, ad->layout_contents, NULL);
+
+ elm_object_item_part_content_set(navi_it, "title_right_btn", bt_dial);
+ ad->ui_type = _UI_BLOCK;
+ evas_object_show(ad->win);
+ remove_waiting_popup(ad);
+}
+
+void pwlock_destroy(struct appdata *ad)
+{
+ _DBG("%s", __func__);
+
+ remove_waiting_popup(ad);
+ if (!ad->elm_navigation_frame)
+ return;
+ _DBG("%s %d", __func__, __LINE__);
+
+ elm_naviframe_item_pop(ad->elm_navigation_frame);
+
+ if (ad->layout_contents) {
+ evas_object_del(ad->layout_contents);
+ ad->layout_contents = NULL;
+ }
+ if (ad->layout_entry) {
+ evas_object_del(ad->layout_entry);
+ ad->layout_entry = NULL;
+ }
+ if (ad->layout_second_entry) {
+ evas_object_del(ad->layout_second_entry);
+ ad->layout_second_entry = NULL;
+ }
+
+ /* FIXME we should check window hide for fast boot */
+ /* evas_object_hide(ad->win); */
+ _DBG("%s %d %p", __func__, __LINE__, ad->elm_navigation_frame);
+}
+
+void clear_entry(struct appdata *ad)
+{
+ if (ad->layout_entry) {
+ elm_object_part_text_set(ad->layout_entry, "elm.guidetext", "");
+ elm_entry_entry_set(_editfield_entry_get(ad->layout_entry), "");
+ }
+ if (ad->layout_second_entry) {
+ elm_object_part_text_set(ad->layout_second_entry,
+ "elm.guidetext", "");
+ elm_entry_entry_set(_editfield_entry_get
+ (ad->layout_second_entry), "");
+ }
+}
+
+static void _ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+ struct appdata *ad = (struct appdata *)priv;
+ Evas_Object *base;
+ _DBG("%s begin", __func__);
+ if (!ug || !priv)
+ return;
+
+ base = (Evas_Object *) ug_get_layout(ug);
+ if (!base) {
+ _DBG("base layout null!\n");
+ return;
+ }
+
+ _DBG("%s,%d", __func__, __LINE__);
+ switch (mode) {
+ case UG_MODE_FULLVIEW:
+ evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ //elm_win_resize_object_add(ug_get_window(), base);
+ //ug_disable_effect(ug);
+
+ evas_object_show(base);
+ break;
+ default:
+ break;
+ }
+ if (_UI_LANG == ad->ui_type) {
+ ad->language_settings_loaded = 1;
+ }
+ //_destroy_previous_ugs(ad);
+ _DBG("%s end", __func__);
+
+}
+
+static void _ug_result_cb(ui_gadget_h ug, service_h service, void *priv)
+{
+ _DBG("function=%s", __func__);
+ struct appdata *ad = NULL;
+
+ if (!ug || !priv || !service) {
+ return;
+ }
+ char *retv = NULL;
+ ad = (struct appdata *)priv;
+ _DBG("ad->state=%d", ad->state);
+
+ switch (ad->state) {
+ case _ST_LANG:
+ {
+ service_get_extra_data(service, "updateType", &retv);
+ if (retv)
+ _DBG("_ST_LANG updateType = %s", retv);
+ service_get_extra_data(service, "ON_OFF_TEXT", &retv);
+ if (retv)
+ _DBG("_ST_LANG ON_OFF_TEXT = %s", retv);
+ service_get_extra_data(service, "result", &retv);
+ if (retv)
+ _DBG("_ST_LANG language result = %s", retv);
+ char *path = (char *)vconf_get_str(VCONFKEY_LANGSET);
+ if (path) {
+ int r;
+ _DBG("VCONFKEY_LANGSET value = %s", path);
+ setenv("LANG", path, 1);
+ setenv("LC_MESSAGES", path, 1);
+ r = setlocale(LC_ALL, "");
+ if (r == NULL) {
+ r = setlocale(LC_ALL, path);
+ }
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+ free(path);
+ path = NULL;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (!retv) { /* avoid to click ug quickly */
+ _DBG("retv = %s", retv);
+ _ug_destroy = 1;
+ }
+}
+
+static void _ug_destroy_cb(ui_gadget_h ug, void *priv)
+{
+ _DBG("%s, %d begin", __func__, __LINE__);
+ struct appdata *ad = NULL;
+ if (1 == _ug_destroy) {
+ _ug_destroy = 0;
+ return;
+ }
+ if (priv) {
+ ad = (struct appdata *)priv;
+ }
+ if (ad == NULL)
+ return;
+
+ if (ug) {
+ ug_destroy(ug);
+ ug = NULL;
+ }
+
+ _DBG("%s, %d ad->state: %d", __func__, __LINE__, ad->state);
+ switch (ad->state) {
+ case _ST_LANG:
+ case _ST_TIME:
+ {
+ ad->state = _ST_GREETING;
+ //show_waiting_popup(ad, NULL);
+ do_state(ad);
+ }
+ break;
+ default:
+ {
+ if (ad->win)
+ evas_object_show(ad->win);
+ }
+ break;
+ }
+}
+
+static void _menu_greeting_button_lang_cb(void *data, Evas_Object * obj, void *e) {
+ _DBG("%s,%d", __func__, __LINE__);
+ struct appdata *ad = data;
+
+ if (!ad)
+ return;
+
+ ad->state = _ST_LANG;
+ show_lang(ad);
+ /* TODO: */
+}
+
+static void _menu_greeting_button_dt_cb(void *data, Evas_Object * obj, void *e) {
+ _DBG("%s,%d", __func__, __LINE__);
+ struct appdata *ad = data;
+
+ if (!ad)
+ return;
+
+ ad->state = _ST_TIME;
+ show_time(ad);
+ /* TODO: */
+}
+
+static void _nosim_retry_cb(void *data, Evas_Object * obj, void *event_info) {
+ _DBG("%s,%d", __func__, __LINE__);
+ struct appdata *ad = data;
+
+ if (!ad)
+ return;
+
+ do_state_directly(_ST_SIM, ad);
+}
+
+int show_greeting(struct appdata *ad) {
+ _DBG("%s,%d", __func__, __LINE__);
+
+ char *model_name = NULL;
+
+ Evas_Object *navi = NULL;
+ Elm_Object_Item *navi_it = NULL;
+ Evas_Object *contents = NULL;
+ Evas_Object *button = NULL;
+ Evas_Object *dt_btn = NULL;
+ Evas_Object *toolbar = NULL;
+
+ int ret_val;
+
+ if (!ad)
+ return 0;
+
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+
+ ad->ui_type = _UI_GREETING;
+
+ pwlock_destroy(ad);
+
+ init_ui(ad);
+ navi = ad->elm_navigation_frame;
+
+ contents = pwlock_add_layout_from_edj(navi, EDJFILE, "pwlock-menu-lang");
+
+ elm_theme_extension_add(NULL, EDJFILE);
+
+ ret_val = system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &model_name);
+ if (ret_val != SYSTEM_INFO_ERROR_NONE) {
+ _ERR("system_info_get_value_string return error : %d", ret_val);
+ } else {
+ _DBG("SYSTEM_INFO_KEY_PLATFORM_NAME = %s\n", model_name);
+ }
+
+ elm_object_part_text_set(contents, "text.greeting.1", pwlock_get_string(IDS_SCM_BODY_WELCOME_E));
+ if (model_name != NULL) {
+ _DBG("Device Name = %s\n", model_name);
+ //elm_object_part_text_set(contents, "text.greeting.1", pwlock_get_string(IDS_IDLE_BODY_GREETING_WELCOME));
+ elm_object_part_text_set(contents, "text.greeting.2", model_name);
+ }
+
+ PWLOCK_MEMFREE(model_name);
+
+ elm_object_part_text_set(contents, "text.help",
+ pwlock_get_string(IDS_STU_BODY_SELECT_LANGUAGE));
+
+ button = elm_button_add(navi);
+ //elm_object_style_set(button, "pwlock/lang_btn");
+ elm_object_part_content_set(contents, "button.select.lang", button);
+
+ elm_object_text_set(button, pwlock_get_lang_title());
+ evas_object_smart_callback_add(button, "clicked", _menu_greeting_button_lang_cb, ad);
+
+ elm_object_part_text_set(contents, "text.dt", pwlock_get_string(IDS_ST_BODY_SET_DATE_AND_TIME));
+
+ dt_btn = elm_button_add(navi);
+ //elm_object_style_set(dt_btn, "pwlock/lang_btn");
+ elm_object_part_content_set(contents, "button.select.dt", dt_btn);
+
+ elm_object_text_set(dt_btn, pwlock_get_string(IDS_ST_BODY_DATE_AND_TIME));
+ evas_object_smart_callback_add(dt_btn, "clicked", _menu_greeting_button_dt_cb, ad);
+
+ toolbar = _create_toolbar_btn(navi);
+ elm_toolbar_item_append(toolbar, NULL, pwlock_get_string(IDS_ST_SK_EMERGENCY_CALL), _dial_cb, ad);
+ elm_toolbar_item_append(toolbar, NULL, pwlock_get_string(IDS_COM_SK_START), pwlock_greeting_next_cb, ad);
+
+ navi_it = elm_naviframe_item_push(navi, NULL, NULL, NULL, contents, NULL);
+
+ elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+
+ elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
+ elm_naviframe_item_pop_cb_set(navi_it, pwlock_back_cb, ad);
+
+ evas_object_show(ad->win);
+ _destroy_previous_ugs(ad);
+
+ return 1;
+}
+
+int show_connection(struct appdata *ad) {
+ _DBG("%s", __func__);
+ ad->ui_type = _UI_CONNECTION;
+ ui_gadget_h ug;
+ service_h service;
+
+ //if (ad->connection_ug) {
+ // evas_object_show(ad->wifi_ug_layout);
+ // return 1;
+ //}
+
+ if (ad->wifi_ug_loaded) {
+ return 1;
+ } else {
+ ad->wifi_ug_loaded = 1;
+ }
+
+ UG_INIT_EFL(ad->win, UG_OPT_INDICATOR_ENABLE);
+ struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
+
+ service_create(&service);
+
+ if (cbs == NULL) {
+ service_destroy(service); /* prevent */
+ return 0;
+ }
+ cbs->layout_cb = pwlock_ug_connection_layout_cb;
+ cbs->result_cb = pwlock_ug_connection_result_cb;
+ cbs->destroy_cb = pwlock_ug_connection_destroy_cb;
+ cbs->priv = (void *)ad;
+ if (!service) {
+ service_destroy(service);
+ free(cbs); /* memory leak */
+ return 0;
+ }
+ service_add_extra_data(service, "caller", "pwlock");
+ service_add_extra_data(service, "lbutton", pwlock_get_string(IDS_COM_BODY_PREVIOUS));
+ service_add_extra_data(service, "rbutton_next", pwlock_get_string(IDS_COM_SK_NEXT));
+ service_add_extra_data(service, "rbutton_skip", pwlock_get_string(IDS_COM_SK_SKIP));
+
+ ug = ug_create(NULL, "wifi-efl-UG", UG_MODE_FULLVIEW, service, cbs);
+ service_destroy(service);
+ free(cbs);
+ if (!ug) {
+ _DBG("Get connection ug failed.");
+ ad->wifi_ug_loaded = 0;
+ if (ad->btn_evt_state == BUTTON_STATE_PREV_CLICKED)
+ ad->state = _ST_GREETING;
+ else
+ ad->state = _ST_FINISH;
+ do_state(ad);
+ return 0;
+ }
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+ ad->current_ug = ad->connection_ug = ug;
+ evas_object_show(ad->win);
+ _destroy_previous_ugs(ad);
+ return 1;
+}
+
+int show_tutorial(struct appdata *ad) {
+ _DBG("%s,%d", __func__, __LINE__);
+ Evas_Object *navi = NULL;
+ Evas_Object *prev_btn = NULL;
+ Evas_Object *next_btn = NULL;
+ Elm_Object_Item *navi_it = NULL;
+
+ if (!ad)
+ return 0;
+
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+
+ ad->ui_type = _UI_TUTORIAL;
+
+ pwlock_destroy(ad);
+
+ init_ui(ad);
+ navi = ad->elm_navigation_frame;
+
+ prev_btn = _create_toolbar_btn(navi);
+ next_btn = _create_toolbar_btn(navi);
+
+ navi_it =
+ elm_naviframe_item_push(navi, (const char *)_("TUTORIAL"),
+ NULL, NULL, NULL, NULL);
+
+ elm_object_item_part_content_set(navi_it, "toolbar_button1", prev_btn);
+ elm_object_item_part_content_set(navi_it, "toolbar_button2", next_btn);
+
+ evas_object_show(ad->win);
+ _destroy_previous_ugs(ad);
+
+ return 1;
+}
+
+int show_lang(struct appdata *ad)
+{
+ _DBG("%s", __func__);
+ ad->ui_type = _UI_LANG;
+ ui_gadget_h ug;
+ service_h service;
+
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+
+ UG_INIT_EFL(ad->win, UG_OPT_INDICATOR_ENABLE);
+ struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
+
+ service_create(&service);
+
+ if (cbs == NULL) {
+ service_destroy(service); /* prevent */
+ return 0;
+ }
+ cbs->layout_cb = _ug_layout_cb;
+ cbs->result_cb = _ug_result_cb;
+ cbs->destroy_cb = _ug_destroy_cb;
+ cbs->priv = (void *)ad;
+ if (!service) {
+ service_destroy(service);
+ free(cbs); /* memory leak */
+ return 0;
+ }
+ service_add_extra_data(service, "caller", "pwlock");
+ service_add_extra_data(service, "viewtype", "language");
+
+ ug = ug_create(NULL, "setting-phone-efl", UG_MODE_FULLVIEW, service, cbs);
+ service_destroy(service);
+ free(cbs);
+ if (!ug) {
+ _DBG("Get phone ug failed.");
+ ad->state = _ST_GREETING;
+ do_state(ad);
+ return 0;
+ }
+ ad->current_ug = ad->language_ug = ug;
+ evas_object_show(ad->win);
+ return 1;
+}
+
+int show_nosim(struct appdata *ad)
+{
+ _DBG("%s,%d", __func__, __LINE__);
+ Evas_Object *layout = NULL;
+ Evas_Object *navi = NULL;
+ Evas_Object *button = NULL;
+ Evas_Object *toolbar = NULL;
+ Elm_Object_Item *navi_it = NULL;
+
+ if (!ad)
+ return 0;
+
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+
+ ad->ui_type = _UI_NOSIM;
+
+ pwlock_destroy(ad);
+
+ init_ui(ad);
+ navi = ad->elm_navigation_frame;
+
+ layout = pwlock_add_layout_from_edj(navi, EDJFILE, "pwlock-nosim-ui");
+
+ elm_object_part_text_set(layout, "text.help", pwlock_get_string(IDS_STU_BODY_HOW_TO_INSERT_SIM_CARD_HELP_MSG));
+
+ button = elm_button_add(layout);
+ elm_object_text_set(button, pwlock_get_string(IDS_ST_BUTTON_TRY_AGAIN_ABB));
+ evas_object_smart_callback_add(button, "clicked", _nosim_retry_cb, ad);
+ elm_object_part_content_set(layout, "button.select.retry", button);
+
+ toolbar = _create_toolbar_btn(navi);
+ elm_toolbar_item_append(toolbar, NULL, pwlock_get_string(IDS_COM_BODY_PREVIOUS), pwlock_nosim_prev_cb, ad);
+ elm_toolbar_item_append(toolbar, NULL, pwlock_get_string(IDS_COM_SK_SKIP), pwlock_nosim_skip_cb, ad);
+
+ navi_it =
+ elm_naviframe_item_push(navi, (const char *)_(pwlock_get_string(IDS_COM_BODY_NO_SIM_CARD_IN_DEVICE)),
+ NULL, NULL, layout, NULL);
+
+ elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+
+ elm_naviframe_item_pop_cb_set(navi_it, pwlock_back_cb, ad);
+
+ evas_object_show(ad->win);
+ _destroy_previous_ugs(ad);
+
+ return 1;
+}
+
+int show_time(struct appdata *ad)
+{
+ _DBG("%s,%d", __func__, __LINE__);
+ if (!ad)
+ return 0;
+ ad->ui_type = _UI_TIME;
+ ui_gadget_h ug;
+
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+
+ ad->date_and_time_settings_loaded = 1;
+ service_h service;
+ UG_INIT_EFL(ad->win, UG_OPT_INDICATOR_ENABLE);
+ struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
+
+ service_create(&service);
+
+ if (cbs == NULL) {
+ service_destroy(service); /* prevent */
+ return 0;
+ }
+ cbs->layout_cb = _ug_layout_cb;
+ cbs->result_cb = _ug_result_cb;
+ cbs->destroy_cb = _ug_destroy_cb;
+ cbs->priv = (void *)ad;
+ if (!service) {
+ service_destroy(service);
+ free(cbs); /* memory leak */
+ return 0;
+ }
+ service_add_extra_data(service, "caller", "pwlock");
+ //service_add_extra_data(service, "lbutton", pwlock_get_string(IDS_COM_BODY_PREVIOUS));
+ //service_add_extra_data(service, "rbutton", pwlock_get_string(IDS_COM_SK_NEXT));
+
+ ug = ug_create(NULL, "setting-time-efl", UG_MODE_FULLVIEW, service, cbs);
+ service_destroy(service);
+ free(cbs);
+ if (!ug) {
+ _DBG("?????Get time ug failed.");
+ ad->state = _ST_GREETING;
+ do_state(ad);
+ return 0;
+ }
+ ad->current_ug = ad->date_ug = ug;
+ evas_object_show(ad->win);
+ _destroy_previous_ugs(ad);
+ return 1;
+}
+
+int show_finish(struct appdata *ad) {
+ _DBG("%s,%d", __func__, __LINE__);
+
+ Evas_Object *navi = NULL;
+ Evas_Object *toolbar = NULL;
+ Elm_Object_Item *navi_it = NULL;
+ Evas_Object *contents = NULL;
+ Evas_Object *label = NULL;
+ Eina_Strbuf *finish_text;
+
+ if (!ad)
+ return 0;
+
+ set_win_prop(ad, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+
+ ad->ui_type = _UI_FINISH;
+
+ pwlock_destroy(ad);
+
+ init_ui(ad);
+ navi = ad->elm_navigation_frame;
+
+ contents = pwlock_add_layout_from_edj(navi, EDJFILE, "pwlock-finish");
+
+ finish_text = eina_strbuf_new();
+
+ label = elm_label_add(contents);
+ elm_label_line_wrap_set(label, ELM_WRAP_WORD);
+ evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ if (finish_text != NULL && eina_strbuf_append_printf(finish_text,
+ "<font size=32 color=#d7d7d7 align=center><br> %s </font>",
+ pwlock_get_string(IDS_STU_BODY_DEVICE_IS_SET_UP_AND_READY_TO_USE)) == EINA_TRUE) {
+ elm_object_text_set(label, eina_strbuf_string_get(finish_text));
+ }
+
+ if (finish_text != NULL) {
+ eina_strbuf_free(finish_text);
+ }
+
+ elm_object_part_content_set(contents, "swl/label", label);
+
+ toolbar = _create_toolbar_btn(navi);
+ elm_toolbar_item_append(toolbar, NULL, pwlock_get_string(IDS_COM_BODY_PREVIOUS), pwlock_finish_prev_cb, ad);
+ elm_toolbar_item_append(toolbar, NULL, pwlock_get_string(IDS_ST_BODY_INSTALTAB_FINISH), pwlock_finish_cb, ad);
+
+ navi_it = elm_naviframe_item_push(navi, _get_header(ad->ui_type), NULL, NULL, contents, NULL);
+
+ elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+
+ elm_naviframe_item_pop_cb_set(navi_it, pwlock_back_cb, ad);
+
+ evas_object_show(ad->win);
+ _destroy_previous_ugs(ad);
+
+ return 1;
+}
+
+#if 0
+int show_dialer(struct appdata *ad)
+{
+ _DBG("%s,%d", __func__, __LINE__);
+ if (!ad)
+ return 0;
+ ad->ui_type = _UI_DIALER;
+
+ service_h service;
+ service_create(&service);
+ UG_INIT_EFL(ad->win, UG_OPT_INDICATOR_ENABLE);
+ struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
+ if (cbs == NULL) {
+ service_destroy(service); /* prevent */
+ return 0;
+ }
+ cbs->layout_cb = _ug_layout_cb;
+ cbs->result_cb = NULL;
+ cbs->destroy_cb = _ug_destroy_cb;
+ cbs->priv = (void *)ad;
+
+ if (!service) {
+ service_destroy(service);
+ free(cbs); /* memory leak */
+ return 0;
+ }
+
+ service_add_extra_data(service, "emergency_dialer", "emergency");
+ ad->dialer_ug = ug_create(NULL, "dialer-efl", UG_MODE_FULLVIEW, service, cbs);
+ service_destroy(service);
+ free(cbs);
+ if (!ad->dialer_ug) {
+ _DBG("dialer ug failed\n");
+ return 0;
+ }
+ ad->current_ug = ad->dialer_ug;
+ evas_object_show(ad->win);
+ return 1;
+}
+#endif
+
+void show_popup(struct appdata *ad, const char *mesg, Eina_Bool mode)
+{
+ if (!ad) {
+ return;
+ }
+ Evas_Object *pp;
+ Evas_Object *button1;
+ Evas_Object *button2;
+ ad->previous_ui_type = ad->ui_type;
+
+ if (ad->popup) {
+ evas_object_del(ad->popup);
+ ad->popup = NULL;
+ }
+ ecore_imf_context_input_panel_hide(elm_entry_imf_context_get
+ (_editfield_entry_get
+ (ad->layout_entry)));
+ pp = elm_popup_add(ad->win);
+ ad->popup = pp;
+ evas_object_size_hint_weight_set(pp, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ elm_object_text_set(pp, mesg);
+ if (EINA_TRUE == mode) {
+ elm_popup_timeout_set(pp, 3);
+ } else {
+ button1 = elm_button_add(pp);
+ elm_object_text_set(button1, pwlock_get_string(IDS_COM_SK_OK));
+ elm_object_part_content_set(pp, "button1", button1);
+ evas_object_smart_callback_add(button1, "clicked", _pp_rsp_ok_cb,
+ ad);
+
+ button2 = elm_button_add(pp);
+ elm_object_text_set(button2, pwlock_get_string(IDS_COM_SK_CANCEL));
+ elm_object_part_content_set(pp, "button2", button2);
+ evas_object_smart_callback_add(button2, "clicked", _pp_rsp_cancel_cb,
+ ad);
+ }
+ remove_waiting_popup(ad);
+ evas_object_show(pp);
+}
+
+void show_waiting_popup(struct appdata *ad, const char *msg_str)
+{
+ if (!ad) {
+ return;
+ }
+
+ _DBG("%s", __func__);
+
+ Evas_Object *popup = NULL;
+ Evas_Object *progressbar = NULL;
+ Evas_Object *box = NULL;
+ Evas_Object *label = NULL;
+
+ Eina_Strbuf *popup_str;
+
+ remove_waiting_popup(ad);
+
+ popup = elm_popup_add(ad->win);
+ ad->waiting_popup = popup;
+ box = elm_box_add(popup);
+ if (msg_str != NULL) {
+ popup_str = eina_strbuf_new();
+ label = elm_label_add(popup);
+ elm_label_line_wrap_set(label, EINA_TRUE);
+ if (popup_str != NULL && eina_strbuf_append_printf(popup_str,
+ "<font color=#ffffff>%s</font>", msg_str) == EINA_TRUE) {
+ elm_object_text_set(label, eina_strbuf_string_get(popup_str));
+ }
+ evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(label, EVAS_HINT_FILL,
+ EVAS_HINT_FILL);
+ evas_object_show(label);
+ elm_box_pack_end(box, label);
+
+ if (popup_str != NULL) {
+ eina_strbuf_free(popup_str);
+ }
+ }
+
+ progressbar = elm_progressbar_add(popup);
+ elm_object_style_set(progressbar, "pending_list");
+ elm_progressbar_pulse(progressbar, EINA_TRUE);
+ evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL,
+ EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ elm_progressbar_pulse(progressbar, EINA_TRUE);
+ evas_object_show(progressbar);
+ elm_box_pack_end(box, progressbar);
+ evas_object_show(box);
+ elm_object_content_set(popup, box);
+ evas_object_show(popup);
+
+ evas_object_show(ad->win);
+}
+
+void remove_waiting_popup(struct appdata *ad)
+{
+ _DBG("%s", __func__);
+ if (!ad) {
+ return;
+ }
+ if (ad->waiting_popup) {
+ _DBG("delete waiting popup");
+ evas_object_del(ad->waiting_popup);
+ ad->waiting_popup = NULL;
+ }
+}
+
+Eina_Bool show_puk_do(void *data)
+{
+ _DBG("%s, %d begin", __func__, __LINE__);
+ struct appdata *ad = (struct appdata *)data;
+
+ show_puk(ad);
+ ad->state = _ST_SIM_PUKCNF;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void update_pw_entry(struct appdata *ad, char *input_data)
+{
+ _DBG("%s", __func__);
+
+ if (input_data == NULL)
+ return;
+ elm_entry_entry_set(_editfield_entry_get(ad->layout_entry), input_data);
+ elm_entry_cursor_end_set(_editfield_entry_get(ad->layout_entry));
+ _done_cb(ad, NULL, NULL);
+}