diff options
Diffstat (limited to 'src/ui.c')
-rwxr-xr-x | src/ui.c | 1826 |
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); +} |