+/*
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * This file is part of <phone-lock>
+ * Written by <Seungtaek Chung> <seungtaek.chung@samsung.com>, <Mi-Ju Lee> <miju52.lee@samsung.com>, <Xi Zhichan> <zhichan.xi@samsung.com>
+ *
+ * PROPRIETARY/CONFIDENTIAL
+ *
+ * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information").
+ * You shall not disclose such Confidential Information and shall use it only in accordance
+ * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS.
+ * SAMSUNG make no representations or warranties about the suitability of the software,
+ * either express or implied, including but not limited to the implied warranties of merchantability,
+ * fitness for a particular purpose, or non-infringement.
+ * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using,
+ * modifying or distributing this software or its derivatives.
+ *
+ */
+
+#include <Ecore_X.h>
+#include <vconf.h>
+#include <appcore-common.h>
+#include <unicode/uloc.h>
+#include <unicode/udat.h>
+#include <unicode/udatpg.h>
+#include <unicode/ustring.h>
+#include <heynoti.h>
+
+#include "phone-lock-util.h"
+#include "phone-lock-view.h"
+#include "phone-lock-string.h"
+#include "phone-lock-verification.h"
+
+#ifndef EDJDIR
+#define EDJDIR "/opt/apps/org.tizen.phone-lock/res/edje"
+#endif
+
+#ifndef IMAGEDIR
+#define IMAGEDIR "/opt/apps/org.tizen.phone-lock/res/images"
+#endif
+
+#define EDJ_PHONE_LOCK_VIEW EDJDIR"/phone-lock-view.edj"
+#define EDJ_PHONE_LOCK_VIEW_ENTRY EDJDIR"/phone-lock-view-entry.edj"
+#define PHONE_LOCK_VIEW_DEFAULT_BG_PATH "/opt/share/settings/Wallpapers/Home_default.png"
+
+#define PHONE_LOCK_VIEW_ARROW_DEFAULT_IMG IMAGEDIR"/B07_event_action_emergency_arrow.png"
+#define PHONE_LOCK_VIEW_ARROW_PRESS_IMG IMAGEDIR"/B07_event_action_emergency_arrow_press.png"
+#define PHONE_LOCK_VIEW_EMERGENCY_CALL_IMG IMAGEDIR"/B07_event_action_emergency.png"
+
+#define VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT VCONFKEY_SETAPPL_PREFIX"/phone_lock_attempts_left"
+#define VCONFKEY_SETAPPL_PHONE_LOCK_TIMESTAMP_STR VCONFKEY_SETAPPL_PREFIX"/phone_lock_timestamp"
+
+#define PHONE_LOCK_VIEW_PHONE_LOCK_BLOCK_SECONDS 30
+#define PHONE_LOCK_VIEW_PHONE_LOCK_ATTEMPTS_MAX 5
+#define PHONE_LOCK_VIEW_PHONE_LOCK_TIMESTAMP_STR_LENGTH 200
+#define PHONE_LOCK_VIEW_MAIN_W 720
+#define PHONE_LOCK_VIEW_MAIN_H 1280
+
+#define _EDJ(o) elm_layout_edje_get(o)
+
+#define SYSTEM_RESUME "system_wakeup"
+
+struct _phone_lock_view_data {
+ Evas_Object *win_main;
+ Evas_Object *layout_main;
+ Evas_Object *input;
+ Evas_Object *input_label;
+ Evas_Object *title_label;
+ Evas_Object *input_entry;
+ Evas_Object *background;
+ Evas_Object *sp_label1;
+ Evas_Object *sp_label2;
+ Evas_Object *sp_label3;
+ Evas_Object *sp_label4;
+ Evas_Object *editfield_layout;
+ Evas_Object *event;
+ Evas_Object *ev;
+ Evas_Object *info;
+
+ int win_w;
+ int win_h;
+ int block_seconds;
+ int view_disabled;
+
+ double scale;
+
+ Eina_Bool is_customedentry_clicked;
+ Eina_Bool is_callug_launched;
+ Eina_Bool is_right_password;
+ Eina_Bool is_simple_pw_checking;
+
+ Evas_Coord drx;
+ Evas_Coord dry;
+ Evas_Coord drw;
+ Evas_Coord drh;
+
+ Ecore_Timer *phone_lock_timer;
+ Ecore_Timer *slide_timer;
+ Ecore_Timer *emgc_up_timer;
+ Ecore_Timer *info_timer;
+
+ int heynoti_fd;
+
+ Elm_Theme *theme;
+
+ phone_lock_view_password_type_t lock_type;
+ phone_lock_view_type_t view_type;
+ phone_lock_window_type_t window_type;
+ phone_lock_view_info_align_type_t align_type;
+
+ char *contents;
+ phone_lock_view_cbfunc func;
+ void *user_data;
+};
+
+#define PHONE_LOCK_VIEW_PHONE_LOCK_MAX_LENGTH 16
+#define PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK_MAX_LENGTH 4
+
+#define EMGC_EV_R 0.073
+#define EMGC_H 55
+#define WIN_H 800
+#define EMGC_DOWN_Y 717
+#define EMGC_UP_Y 357
+#define EMGC_REL_DOWN_Y(win_h) ((win_h * EMGC_DOWN_Y) / WIN_H)
+#define EMGC_REL_UP_Y(win_h) ((win_h * EMGC_UP_Y) / WIN_H)
+
+static Evas_Object *arrow_icon[6] = { 0 };
+
+static Evas_Coord start_pos = 0;
+
+static void _phone_lock_view_enable_phone_lock(void *data);
+static void _phone_lock_view_disable_phone_lock(void *data);
+static void _phone_lock_view_enable_simple_phone_lock(void *data);
+static void _phone_lock_view_disable_simple_phone_lock(void *data);
+static Eina_Bool _phone_lock_view_update_phone_lock_cb(void *data);
+static void _phone_lock_view_update_phone_lock(void *data);
+static void _phone_lock_view_check_vconf_value(void *data);
+static void _phone_lock_view_check_vconf_value_cb(keynode_t * key, void *data);
+static void _phone_lock_view_notify_pm_state_cb(keynode_t * key, void *data);
+static void _phone_lock_view_create_customed_entry(void *data);
+static void _phone_lock_view_destroy_customed_entry(void *data);
+static inline const char *_phone_lock_view_entry_get(Evas_Object * obj);
+static void _phone_lock_view_set_str(char **s, const char *str);
+static void _phone_lock_view_clear_entry_contents(void *data);
+static Evas_Object *_phone_lock_view_editfield_create(Evas_Object * parent,
+ void *data);
+static Evas_Object *_phone_lock_view_editfield_entry_get(Evas_Object * parent);
+
+static inline const char *_phone_lock_view_entry_get(Evas_Object * obj)
+{
+ const char *s = NULL;
+
+ if (obj)
+ s = elm_entry_entry_get(_phone_lock_view_editfield_entry_get
+ (obj));
+
+ return s;
+}
+
+static void _phone_lock_view_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 _phone_lock_view_popup_timeout_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ PHONE_LOCK_DBG("timeout cb : %d", (int)event_info);
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ _phone_lock_view_clear_entry_contents(data);
+ phone_lock_view_show_imf_context_input_panel(data);
+ if (((int) event_info != 5) && (obj != NULL)) {
+ evas_object_del(obj);
+ obj = NULL;
+ }
+}
+
+static void _phone_lock_view_block_clicked_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ PHONE_LOCK_DBG("block clicked cb : %d", (int)event_info);
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ _phone_lock_view_clear_entry_contents(data);
+ phone_lock_view_show_imf_context_input_panel(data);
+ if (obj) {
+ evas_object_del(obj);
+ obj = NULL;
+ }
+}
+
+static Evas_Object *_phone_lock_view_create_layout(Evas_Object * parent,
+ const char *file,
+ const char *group)
+{
+ Evas_Object *layout;
+ Eina_Bool ret = EINA_FALSE;
+
+ layout = elm_layout_add(parent);
+
+ if (file != NULL && group != NULL) {
+ ret = elm_layout_file_set(layout, file, group);
+ if (ret != EINA_TRUE) {
+ PHONE_LOCK_ERR("Fail elm_layout_file_set");
+ evas_object_del(layout);
+ return NULL;
+ }
+ } else {
+ elm_layout_theme_set(layout, "layout", "application",
+ "default");
+ elm_win_resize_object_add(parent, layout);
+ elm_win_indicator_mode_set(parent, ELM_WIN_INDICATOR_SHOW);
+ }
+
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+
+ evas_object_show(layout);
+
+ return layout;
+}
+
+static void _phone_lock_view_create_bg_image(Evas_Object * parent)
+{
+ char *file = NULL;
+ Evas_Object *image = NULL;
+ Eina_Bool ret = EINA_FALSE;
+
+ if (!parent) {
+ return;
+ }
+ PHONE_LOCK_DBG("");
+
+ if ((file = vconf_get_str(VCONFKEY_IDLE_LOCK_BGSET)) != NULL) {
+
+ } else if ((file = vconf_get_str(VCONFKEY_BGSET)) != NULL) {
+
+ }
+ PHONE_LOCK_DBG("file = %s", file);
+
+ image = elm_image_add(parent);
+ if (file) {
+ ret = elm_image_file_set(image, file, NULL);
+ if (ret == EINA_FALSE) {
+ elm_image_file_set(image,
+ PHONE_LOCK_VIEW_DEFAULT_BG_PATH,
+ NULL);
+ }
+ free(file);
+ file = NULL;
+ }
+
+ elm_object_part_content_set(parent, "swallow.bg", image);
+ evas_object_show(image);
+}
+
+static Eina_Bool _phone_lock_view_set_info_time(void *data)
+{
+ Evas_Object *time_label = NULL;
+ Evas_Object *date_label = NULL;
+ Evas_Object *info = NULL;
+ Ecore_Timer *info_timer = NULL;
+ struct tm st;
+ time_t tt;
+ char buf[512] = { 0, };
+ char bf1[32] = { 0, };
+ char bf2[32] = { 0, };
+ int r;
+ int hour;
+ phone_lock_view_data_t *phone_lock_view_data = NULL;
+ enum appcore_time_format timeformat;
+
+ phone_lock_view_data = (phone_lock_view_data_t *) data;
+
+ if (!phone_lock_view_data) {
+ return 0;
+ }
+ PHONE_LOCK_DBG("");
+
+ info = phone_lock_view_data->info;
+ info_timer = phone_lock_view_data->info_timer;
+
+ if (!info) {
+ return 0;
+ }
+
+ tt = time(NULL);
+ localtime_r(&tt, &st);
+
+ if (info_timer != NULL) {
+ ecore_timer_del(info_timer);
+ info_timer = NULL;
+ }
+
+ info_timer =
+ ecore_timer_add(60 - st.tm_sec, _phone_lock_view_set_info_time,
+ phone_lock_view_data);
+ phone_lock_view_data->info_timer = info_timer;
+
+ r = appcore_get_timeformat(&timeformat);
+ if (r == 0 && timeformat == APPCORE_TIME_FORMAT_24) {
+ strftime(bf1, sizeof(bf1), "%H:%M", &st);
+ switch (phone_lock_view_data->align_type) {
+ case PHONE_LOCK_VIEW_ALIGN_LEFT:
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=150 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff align=left>",
+ bf1, "</>");
+ break;
+ case PHONE_LOCK_VIEW_ALIGN_CENTER:
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=150 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff align=center>",
+ bf1, "</>");
+ break;
+ case PHONE_LOCK_VIEW_ALIGN_RIGHT:
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=150 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff align=right>",
+ bf1, "</>");
+ break;
+ }
+ PHONE_LOCK_DBG("buf = %s", buf);
+ } else {
+ strftime(bf1, sizeof(bf1), "%l", &st);
+ hour = atoi(bf1);
+ strftime(bf1, sizeof(bf1), ":%M", &st);
+
+ if (st.tm_hour >= 0 && st.tm_hour < 12)
+ snprintf(bf2, sizeof(bf2), "%s", "AM");
+ else
+ snprintf(bf2, sizeof(bf2), "%s", "PM");
+
+ switch (phone_lock_view_data->align_type) {
+ case PHONE_LOCK_VIEW_ALIGN_LEFT:
+ snprintf(buf, sizeof(buf), "%s%d%s%s %s%s%s",
+ "<font_size=150 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff align=left>",
+ hour, bf1,
+ "</>",
+ "<font_size=36 font=SLP:style=Bold style=shadow shadow_color=#000000bf color=#ffffffff align=left>",
+ bf2, "</>");
+ break;
+ case PHONE_LOCK_VIEW_ALIGN_CENTER:
+ snprintf(buf, sizeof(buf), "%s%d%s%s %s%s%s",
+ "<font_size=150 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff align=center>",
+ hour, bf1,
+ "</>",
+ "<font_size=36 font=SLP:style=Bold style=shadow shadow_color=#000000bf color=#ffffffff align=center>",
+ bf2, "</>");
+ break;
+ case PHONE_LOCK_VIEW_ALIGN_RIGHT:
+ snprintf(buf, sizeof(buf), "%s%d%s%s %s%s%s",
+ "<font_size=150 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff align=right>",
+ hour, bf1,
+ "</>",
+ "<font_size=36 font=SLP:style=Bold style=shadow shadow_color=#000000bf color=#ffffffff align=right>",
+ bf2, "</>");
+ break;
+ }
+ PHONE_LOCK_DBG("buf = %s", buf);
+ }
+
+ time_label = elm_label_add(info);
+ elm_object_text_set(time_label, buf);
+ elm_object_part_content_set(info, "label.time", time_label);
+
+ UErrorCode status = U_ZERO_ERROR;
+ UDateTimePatternGenerator *generator;
+ UDateFormat *formatter;
+ UChar skeleton[40] = { 0 }
+ , pattern[40] = {
+ 0}
+ , formatted[40] = {
+ 0};
+ int32_t patternCapacity, formattedCapacity;
+ int32_t skeletonLength, patternLength, formattedLength;
+ UDate date;
+ const char *locale;
+ const char customSkeleton[] = UDAT_MONTH_WEEKDAY_DAY;
+
+ /* set UDate from time_t */
+ date = (UDate) tt *1000;
+
+ /* get default locale */
+ uloc_setDefault(__secure_getenv("LC_TIME"), &status); /* for thread saftey */
+ locale = uloc_getDefault();
+
+ /* open datetime pattern generator */
+ generator = udatpg_open(locale, &status);
+ if (generator == NULL)
+ return 0;
+
+ /* calculate pattern string capacity */
+ patternCapacity = (int32_t) (sizeof(pattern) / sizeof((pattern)[0]));
+
+ /* ascii to unicode for input skeleton */
+ u_uastrcpy(skeleton, customSkeleton);
+
+ /* get skeleton length */
+ skeletonLength = strlen(customSkeleton);
+
+ /* get best pattern using skeleton */
+ patternLength =
+ udatpg_getBestPattern(generator, skeleton, skeletonLength, pattern,
+ patternCapacity, &status);
+
+ /* open datetime formatter using best pattern */
+ formatter =
+ udat_open(UDAT_IGNORE, UDAT_DEFAULT, locale, NULL, -1, pattern,
+ patternLength, &status);
+ if (formatter == NULL) {
+ udatpg_close(generator);
+ }
+
+ /* calculate formatted string capacity */
+ formattedCapacity =
+ (int32_t) (sizeof(formatted) / sizeof((formatted)[0]));
+
+ /* formatting date using formatter by best pattern */
+ formattedLength =
+ udat_format(formatter, date, formatted, formattedCapacity, NULL,
+ &status);
+
+ /* unicode to ascii to display */
+ u_austrcpy(bf1, formatted);
+ PHONE_LOCK_DBG("formatted string=%s", bf1);
+
+ /* close datetime pattern generator */
+ udatpg_close(generator);
+
+ /* close datetime formatter */
+ udat_close(formatter);
+
+ switch (phone_lock_view_data->align_type) {
+ case PHONE_LOCK_VIEW_ALIGN_LEFT:
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=45 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff align=left>",
+ bf1, "</>");
+ break;
+ case PHONE_LOCK_VIEW_ALIGN_CENTER:
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=45 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff align=center>",
+ bf1, "</>");
+ break;
+ case PHONE_LOCK_VIEW_ALIGN_RIGHT:
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=45 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff align=right>",
+ bf1, "</>");
+ break;
+ }
+
+ PHONE_LOCK_DBG("buf = %s", buf);
+
+ date_label = elm_label_add(info);
+ elm_object_text_set(date_label, buf);
+ elm_object_part_content_set(info, "label.date", date_label);
+
+ evas_object_show(time_label);
+ evas_object_show(date_label);
+
+ return 0;
+}
+
+static void
+_phone_lock_view_set_info(phone_lock_view_data_t * phone_lock_view_data)
+{
+ Evas_Object *bg = NULL;
+ Evas_Object *info = NULL;
+
+ if (!phone_lock_view_data) {
+ return;
+ }
+ PHONE_LOCK_DBG("");
+
+ bg = phone_lock_view_data->background;
+
+ if (!bg) {
+ return;
+ }
+ _phone_lock_view_set_info_time(phone_lock_view_data);
+
+ info = phone_lock_view_data->info;
+
+ if (!info) {
+ return;
+ }
+ elm_object_part_content_set(bg, "swallow.info.2", info);
+}
+
+static void _phone_lock_view_wakeup_cb(void *data)
+{
+ phone_lock_view_data_t *phone_lock_view_data = NULL;
+ PHONE_LOCK_DBG("%s %d", __FUNCTION__, __LINE__);
+
+ phone_lock_view_data = (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data)
+ _phone_lock_view_set_info_time(phone_lock_view_data);
+}
+
+static int _phone_lock_view_init_heynoti(phone_lock_view_data_t * phone_lock_view_data)
+{
+ int fd = 0, ret = -1;
+ PHONE_LOCK_DBG("%s %d", __FUNCTION__, __LINE__);
+
+ fd = heynoti_init();
+ if (fd == -1) {
+ PHONE_LOCK_ERR("Noti init error\n");
+ return -1;
+ }
+
+ ret = heynoti_subscribe(fd, SYSTEM_RESUME, _phone_lock_view_wakeup_cb, phone_lock_view_data);
+ if (ret) {
+ PHONE_LOCK_ERR
+ ("[Error] heynoti_subscribe : system_wakeup\n");
+ return -1;
+ }
+
+ ret = heynoti_attach_handler(fd);
+ if (ret) {
+ PHONE_LOCK_ERR
+ ("[Error] heynoti_attach_handler failed.\n");
+ return -1;
+ }
+
+ phone_lock_view_data->heynoti_fd = fd;
+
+ return EXIT_SUCCESS;
+}
+
+static void _phone_lock_fini_heynoti(phone_lock_view_data_t * phone_lock_view_data)
+{
+ PHONE_LOCK_DBG("%s %d", __FUNCTION__, __LINE__);
+ heynoti_unsubscribe(phone_lock_view_data->heynoti_fd, SYSTEM_RESUME, _phone_lock_view_wakeup_cb);
+
+ heynoti_close(phone_lock_view_data->heynoti_fd);
+
+ phone_lock_view_data->heynoti_fd = 0;
+}
+
+static void
+_phone_lock_view_create_info(phone_lock_view_data_t * phone_lock_view_data)
+{
+ Evas_Object *bg = NULL;
+ Evas_Object *info = NULL;
+
+ if (!phone_lock_view_data) {
+ return;
+ }
+ PHONE_LOCK_DBG("");
+
+ bg = phone_lock_view_data->background;
+
+ if (!bg) {
+ return;
+ }
+
+ info = _phone_lock_view_create_layout(bg, EDJ_PHONE_LOCK_VIEW,
+ "phlock.view.info");
+ if (info == NULL) {
+ PHONE_LOCK_ERR("[Error] Cannot add layout: info\n");
+ return;
+ }
+
+ if (_phone_lock_view_init_heynoti(phone_lock_view_data) < 0) {
+ PHONE_LOCK_ERR("heynoti ERR..!!");
+ }
+
+ phone_lock_view_data->info = info;
+ _phone_lock_view_set_info(phone_lock_view_data);
+
+ evas_object_show(phone_lock_view_data->info);
+}
+
+static void _phone_lock_view_set_color_start(int count, int r, int g, int b,
+ int a)
+{
+ int i = 0;
+ for (i = count; i < 6; i++) {
+ evas_object_color_set(arrow_icon[i], r, g, b, a);
+ }
+}
+
+static void _phone_lock_view_set_color_index(int index, int r, int g, int b,
+ int a)
+{
+
+ evas_object_color_set(arrow_icon[index], r, g, b, a);
+}
+
+static void _phone_lock_view_arrow_down_cb(void *data, Evas * evas,
+ Evas_Object * obj, void *event_info)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+ PHONE_LOCK_DBG("_phone_lock_view_arrow_down_cb");
+ Evas_Event_Mouse_Down *ev = event_info;
+ start_pos = ev->canvas.x;
+ PHONE_LOCK_DBG("_phone_lock_view_arrow_down_cb start_pos = %d",
+ start_pos);
+}
+
+static void _phone_lock_view_arrow_up_cb(void *data, Evas * evas,
+ Evas_Object * obj, void *event_info)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+ PHONE_LOCK_DBG("_phone_lock_view_arrow_up_cb");
+
+ Evas_Event_Mouse_Down *ev = event_info;
+ if ((ev->canvas.x - start_pos) > 440 * (phone_lock_view_data->scale)) {
+ phone_lock_view_hide_imf_context_input_panel
+ (phone_lock_view_data);
+ if (phone_lock_view_data->func) {
+ phone_lock_view_data->is_callug_launched = EINA_TRUE;
+ phone_lock_view_data->func(1, NULL,
+ phone_lock_view_data->user_data);
+ }
+ } else {
+ }
+ _phone_lock_view_set_color_start(0, 255, 255, 255, 255);
+}
+
+static void _phone_lock_view_arrow_move_cb(void *data, Evas * evas,
+ Evas_Object * obj, void *event_info)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+ PHONE_LOCK_DBG("_phone_lock_view_arrow_move_cb");
+ PHONE_LOCK_DBG
+ ("_phone_lock_view_arrow_move_cb: phone_lock_view_data->scale = %f",
+ phone_lock_view_data->scale);
+ Evas_Event_Mouse_Down *ev = event_info;
+ if (ev->canvas.x <= 96 * (phone_lock_view_data->scale)) {
+ _phone_lock_view_set_color_start(0, 255, 255, 255, 255);
+ } else if (ev->canvas.x > 96 * (phone_lock_view_data->scale)
+ && ev->canvas.x <= 184 * (phone_lock_view_data->scale)) {
+ _phone_lock_view_set_color_start(0, 255, 255, 255, 255);
+ _phone_lock_view_set_color_index(0, 0, 191, 255, 255);
+ } else if (ev->canvas.x > 184 * (phone_lock_view_data->scale)
+ && ev->canvas.x <= 272 * (phone_lock_view_data->scale)) {
+ _phone_lock_view_set_color_start(1, 255, 255, 255, 255);
+ _phone_lock_view_set_color_index(1, 0, 191, 255, 255);
+ } else if (ev->canvas.x > 272 * (phone_lock_view_data->scale)
+ && ev->canvas.x <= 360 * (phone_lock_view_data->scale)) {
+ _phone_lock_view_set_color_start(2, 255, 255, 255, 255);
+ _phone_lock_view_set_color_index(2, 0, 191, 255, 255);
+ } else if (ev->canvas.x > 360 * (phone_lock_view_data->scale)
+ && ev->canvas.x <= 448 * (phone_lock_view_data->scale)) {
+ _phone_lock_view_set_color_start(3, 255, 255, 255, 255);
+ _phone_lock_view_set_color_index(3, 0, 191, 255, 255);
+ } else if (ev->canvas.x > 448 * (phone_lock_view_data->scale)
+ && ev->canvas.x <= 536 * (phone_lock_view_data->scale)) {
+ _phone_lock_view_set_color_start(4, 255, 255, 255, 255);
+ _phone_lock_view_set_color_index(4, 0, 191, 255, 255);
+ } else if (ev->canvas.x > 536 * (phone_lock_view_data->scale)) {
+ _phone_lock_view_set_color_start(5, 255, 255, 255, 255);
+ _phone_lock_view_set_color_index(5, 0, 191, 255, 255);
+ }
+}
+
+static void
+_phone_lock_view_create_emergency_event(phone_lock_view_data_t *
+ phone_lock_view_data)
+{
+ Evas_Object *event = NULL;
+ Evas_Object *bg = NULL;
+ Evas_Object *emergency_icon = NULL;
+ Evas_Object *emergency_text = NULL;
+ char buf[512] = { 0, };
+ int i = 0;
+ /* create dragable */
+ event =
+ _phone_lock_view_create_layout(phone_lock_view_data->layout_main,
+ EDJ_PHONE_LOCK_VIEW,
+ "phlock.view.event");
+ if (event == NULL) {
+ PHONE_LOCK_ERR("[Error] Cannot add layout: event\n");
+ return;
+ }
+
+ phone_lock_view_data->event = event;
+ bg = phone_lock_view_data->background;
+
+ for (i = 0; i < 6; i++) {
+ if (arrow_icon[i]) {
+ evas_object_del(arrow_icon[i]);
+ arrow_icon[i] = NULL;
+ }
+ arrow_icon[i] = elm_image_add(bg);
+ elm_image_file_set(arrow_icon[i],
+ PHONE_LOCK_VIEW_ARROW_DEFAULT_IMG, NULL);
+ snprintf(buf, sizeof(buf), "%s%d", "arrow_icon_", i);
+ elm_object_part_content_set(event, buf, arrow_icon[i]);
+ evas_object_show(arrow_icon[i]);
+ }
+
+ emergency_icon = elm_image_add(bg);
+ elm_image_file_set(emergency_icon, PHONE_LOCK_VIEW_EMERGENCY_CALL_IMG,
+ NULL);
+ elm_object_part_content_set(event, "emergency_icon", emergency_icon);
+ evas_object_show(emergency_icon);
+
+ emergency_text = elm_label_add(bg);
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=25 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffffff>",
+ phone_lock_get_string(IDS_IDLE_BODY_EMERGENCY_CALL), "</>");
+ PHONE_LOCK_DBG("buf = %s", buf);
+ elm_object_text_set(emergency_text, buf);
+ elm_object_part_content_set(event, "emergency_text", emergency_text);
+
+ evas_object_show(emergency_text);
+
+ evas_object_event_callback_add(event, EVAS_CALLBACK_MOUSE_MOVE,
+ _phone_lock_view_arrow_move_cb,
+ phone_lock_view_data);
+ evas_object_event_callback_add(event, EVAS_CALLBACK_MOUSE_DOWN,
+ _phone_lock_view_arrow_down_cb,
+ phone_lock_view_data);
+ evas_object_event_callback_add(event, EVAS_CALLBACK_MOUSE_UP,
+ _phone_lock_view_arrow_up_cb,
+ phone_lock_view_data);
+ evas_object_show(event);
+ elm_object_part_content_set(bg, "swallow.event.down", event);
+}
+
+static void
+_phone_lock_view_entry_changed_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ PHONE_LOCK_DBG("");
+}
+
+static void
+_phone_lock_view_entry_activated_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ PHONE_LOCK_DBG("enter key clicked!!\n");
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ phone_lock_view_data->is_customedentry_clicked = EINA_TRUE;
+}
+
+static void
+_phone_lock_view_input_panel_event_cb(void *data,
+ Ecore_IMF_Context * imf_context,
+ int value)
+{
+ PHONE_LOCK_DBG("");
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ Evas_Coord x;
+ Evas_Coord y;
+ Evas_Coord w;
+ Evas_Coord h;
+ double dx;
+ double dy;
+ switch (value) {
+ case ECORE_IMF_INPUT_PANEL_STATE_SHOW:
+ /* Move up emergency object */
+ evas_object_geometry_get(phone_lock_view_data->event, &x, &y,
+ &w, &h);
+ PHONE_LOCK_DBG("y = %d", y);
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->background),
+ "bg.up", "swallow.event.bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->background),
+ "bg.up", "swallow.event");
+ elm_object_part_content_unset(phone_lock_view_data->background,
+ "swallow.event.down");
+ elm_object_part_content_set(phone_lock_view_data->background,
+ "swallow.event.up",
+ phone_lock_view_data->event);
+
+ break;
+ case ECORE_IMF_INPUT_PANEL_STATE_HIDE:
+ /* Move down Emergency call event if current focus is not emergency call */
+ edje_object_part_drag_value_get(_EDJ
+ (phone_lock_view_data->event),
+ "sw.slider", &dx, &dy);
+ evas_object_geometry_get(phone_lock_view_data->event, &x, &y,
+ &w, &h);
+ PHONE_LOCK_DBG("dx= %f", dx);
+ PHONE_LOCK_DBG("y = %d", y);
+
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->background),
+ "bg.down", "swallow.event.bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->background),
+ "bg.down", "swallow.event");
+ elm_object_part_content_unset(phone_lock_view_data->background,
+ "swallow.event.up");
+ elm_object_part_content_set(phone_lock_view_data->background,
+ "swallow.event.down",
+ phone_lock_view_data->event);
+
+ break;
+ default:
+ break;
+ }
+}
+
+static void _phone_lock_view_button_up_cb(void *data, Evas_Object * obj,
+ const char *emission,
+ const char *source)
+{
+ PHONE_LOCK_DBG("");
+
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (NULL == phone_lock_view_data) {
+ return;
+ }
+
+ edje_object_signal_emit(elm_layout_edje_get
+ (phone_lock_view_data->input), "release",
+ "button");
+
+ phone_lock_view_hide_imf_context_input_panel(phone_lock_view_data);
+
+ if (phone_lock_view_data->func) {
+ _phone_lock_view_set_str(&phone_lock_view_data->contents,
+ elm_entry_entry_get
+ (phone_lock_view_data->input_entry));
+ PHONE_LOCK_DBG("%s, phone_lock_view_data->contents : %s",
+ __FUNCTION__, phone_lock_view_data->contents);
+ phone_lock_view_data->func(2, phone_lock_view_data->contents,
+ phone_lock_view_data->user_data);
+ }
+}
+
+static void _phone_lock_view_button_down_cb(void *data, Evas_Object * obj,
+ const char *emission,
+ const char *source)
+{
+ PHONE_LOCK_DBG("");
+
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (NULL == phone_lock_view_data) {
+ return;
+ }
+
+ edje_object_signal_emit(elm_layout_edje_get
+ (phone_lock_view_data->input), "press",
+ "button");
+}
+
+static void _phone_lock_view_create_customed_entry(void *data)
+{
+ Evas_Object *entry = NULL;
+ Evas_Object *input = NULL;
+ Evas_Object *background = NULL;
+
+ static Elm_Entry_Filter_Limit_Size limit_filter_data_alpha;
+
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ background = phone_lock_view_data->background;
+ input = phone_lock_view_data->input;
+
+ entry = elm_entry_add(background);
+
+ Elm_Theme *th = elm_theme_new();
+ elm_theme_ref_set(th, NULL);
+ elm_theme_extension_add(th, EDJ_PHONE_LOCK_VIEW_ENTRY);
+
+ elm_object_theme_set(entry, th);
+ elm_object_style_set(entry, "phone_lock_alpha_style");
+
+ limit_filter_data_alpha.max_char_count =
+ PHONE_LOCK_VIEW_PHONE_LOCK_MAX_LENGTH;
+ limit_filter_data_alpha.max_byte_count = 0;
+ elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size,
+ &limit_filter_data_alpha);
+
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ elm_entry_password_set(entry, EINA_TRUE);
+ elm_entry_entry_set(entry, "");
+ elm_entry_cursor_end_set(entry);
+ elm_object_part_content_set(input, "swallow.text", entry);
+
+ Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(entry);
+ ecore_imf_context_input_panel_event_callback_add(imf_context,
+ ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+ _phone_lock_view_input_panel_event_cb,
+ phone_lock_view_data);
+ ecore_imf_context_input_panel_language_set(imf_context,
+ ECORE_IMF_INPUT_PANEL_LANG_ALPHABET);
+
+ phone_lock_view_data->input_entry = entry;
+ phone_lock_view_data->theme = th;
+ phone_lock_view_data->is_customedentry_clicked = EINA_FALSE;
+}
+
+static void _phone_lock_view_destroy_customed_entry(void *data)
+{
+ Evas_Object *entry = NULL;
+ Evas_Object *input = NULL;
+ Elm_Theme *th = NULL;
+
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ input = phone_lock_view_data->input;
+ entry = phone_lock_view_data->input_entry;
+ th = phone_lock_view_data->theme;
+
+ elm_object_part_content_unset(input, "swallow.text");
+
+ if (entry) {
+ evas_object_del(entry);
+ entry = NULL;
+ }
+ if (th) {
+ elm_theme_free(th);
+ th = NULL;
+ }
+}
+
+static void _phone_lock_view_enable_phone_lock(void *data)
+{
+ Evas_Object *label = NULL;
+ Evas_Object *entry = NULL;
+ Evas_Object *input = NULL;
+ Evas_Object *background = NULL;
+ char buf[256] = { 0, };
+
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ label = phone_lock_view_data->title_label;
+ entry = phone_lock_view_data->input_entry;
+ input = phone_lock_view_data->input;
+ background = phone_lock_view_data->background;
+
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=62 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffff align=center>",
+ phone_lock_get_string(IDS_COM_BODY_ENTER_PASSWORD), "</>");
+ elm_object_text_set(label, buf);
+ elm_object_part_content_set(background, "swallow.input", input);
+ evas_object_smart_callback_add(entry, "changed",
+ _phone_lock_view_entry_changed_cb, NULL);
+ evas_object_smart_callback_add(entry, "focused",
+ _phone_lock_view_entry_activated_cb,
+ phone_lock_view_data);
+ evas_object_show(input);
+}
+
+static void _phone_lock_view_disable_phone_lock(void *data)
+{
+ Evas_Object *label = NULL;
+ Evas_Object *entry = NULL;
+ Evas_Object *input = NULL;
+ Evas_Object *background = NULL;
+ char buf[256] = { 0, };
+ char buf_str[50] = { 0, };
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ label = phone_lock_view_data->title_label;
+ entry = phone_lock_view_data->input_entry;
+ input = phone_lock_view_data->input;
+ background = phone_lock_view_data->background;
+ snprintf(buf_str, sizeof(buf_str),
+ phone_lock_get_string(IDS_IDLE_BODY_TRY_LATER),
+ phone_lock_view_data->block_seconds);
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=62 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffff align=center>",
+ buf_str, "</>");
+ elm_object_text_set(label, buf);
+
+ elm_object_part_content_unset(background, "swallow.input");
+ evas_object_hide(input);
+
+ evas_object_smart_callback_del(entry, "changed",
+ _phone_lock_view_entry_changed_cb);
+ evas_object_smart_callback_del(entry, "focused",
+ _phone_lock_view_entry_activated_cb);
+
+ ecore_timer_thaw(phone_lock_view_data->phone_lock_timer);
+}
+
+static void _phone_lock_view_enable_simple_phone_lock(void *data)
+{
+ Evas_Object *label = NULL;
+ Evas_Object *label1 = NULL;
+ Evas_Object *label2 = NULL;
+ Evas_Object *label3 = NULL;
+ Evas_Object *label4 = NULL;
+ Evas_Object *input = NULL;
+ Evas_Object *background = NULL;
+ char buf[256] = { 0, };
+
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ label = phone_lock_view_data->title_label;
+ label1 = phone_lock_view_data->sp_label1;
+ label2 = phone_lock_view_data->sp_label2;
+ label3 = phone_lock_view_data->sp_label3;
+ label4 = phone_lock_view_data->sp_label4;
+ input = phone_lock_view_data->input;
+ background = phone_lock_view_data->background;
+
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=62 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffff align=center>",
+ phone_lock_get_string(IDS_COM_BODY_ENTER_PASSWORD), "</>");
+ elm_object_text_set(label, buf);
+ elm_object_text_set(label1, "");
+ elm_object_text_set(label2, "");
+ elm_object_text_set(label3, "");
+ elm_object_text_set(label4, "");
+ elm_object_part_content_set(background, "swallow.input", input);
+ evas_object_show(input);
+}
+
+static void _phone_lock_view_disable_simple_phone_lock(void *data)
+{
+ Evas_Object *label = NULL;
+ Evas_Object *input = NULL;
+ Evas_Object *background = NULL;
+ char buf[256] = { 0, };
+ char buf_str[50] = { 0, };
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ label = phone_lock_view_data->title_label;
+ input = phone_lock_view_data->input;
+ background = phone_lock_view_data->background;
+ snprintf(buf_str, sizeof(buf_str),
+ phone_lock_get_string(IDS_IDLE_BODY_TRY_LATER),
+ phone_lock_view_data->block_seconds);
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=62 font=SLP:style=Light style=shadow shadow_color=#000000bf color=#ffffff align=center>",
+ buf_str, "</>");
+ elm_object_text_set(label, buf);
+
+ elm_object_part_content_unset(background, "swallow.input");
+ evas_object_hide(input);
+ ecore_timer_thaw(phone_lock_view_data->phone_lock_timer);
+}
+
+static Eina_Bool _phone_lock_view_update_phone_lock_cb(void *data)
+{
+ _phone_lock_view_update_phone_lock(data);
+ return EINA_TRUE;
+}
+
+static void _phone_lock_view_update_phone_lock(void *data)
+{
+ int value = -1;
+ int ret = 0;
+
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ ret =
+ vconf_get_int(VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ &value);
+
+ if (ret != 0) {
+ return;
+ }
+
+ if (value == 0) {
+ char timestamp_str
+ [PHONE_LOCK_VIEW_PHONE_LOCK_TIMESTAMP_STR_LENGTH + 1] =
+ { 0, };
+ char *temp = NULL;
+ int length = 0;
+ int temp_length = 0;
+ temp = vconf_get_str(VCONFKEY_SETAPPL_PHONE_LOCK_TIMESTAMP_STR);
+ temp_length = strlen(temp);
+ length =
+ (temp_length <=
+ PHONE_LOCK_VIEW_PHONE_LOCK_TIMESTAMP_STR_LENGTH) ?
+ temp_length :
+ PHONE_LOCK_VIEW_PHONE_LOCK_TIMESTAMP_STR_LENGTH;
+ strncpy(timestamp_str, temp, length);
+ timestamp_str[length] = '\0';
+ if ((strcmp(timestamp_str, "") != 0)
+ || (strlen(timestamp_str) != 0)) {
+ time_t cur_time = time(NULL);
+ time_t last_lock_time;
+ sscanf(timestamp_str, "%ld", &last_lock_time);
+
+ if ((cur_time - last_lock_time) <
+ PHONE_LOCK_VIEW_PHONE_LOCK_BLOCK_SECONDS) {
+ phone_lock_view_data->block_seconds =
+ PHONE_LOCK_VIEW_PHONE_LOCK_BLOCK_SECONDS -
+ (cur_time - last_lock_time);
+ PHONE_LOCK_DBG
+ ("phone_lock_view_data->block_seconds = %d",
+ phone_lock_view_data->block_seconds);
+ phone_lock_view_data->view_disabled = 1;
+ switch (phone_lock_view_data->lock_type) {
+ case PHONE_LOCK_VIEW_COMPLEX_PHONE_LOCK:
+ _phone_lock_view_disable_phone_lock
+ (phone_lock_view_data);
+ break;
+ case PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK:
+ _phone_lock_view_disable_simple_phone_lock(phone_lock_view_data);
+ break;
+ default:
+ break;
+ }
+ } else {
+ phone_lock_view_data->view_disabled = 0;
+ vconf_set_int
+ (VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ PHONE_LOCK_VIEW_PHONE_LOCK_ATTEMPTS_MAX);
+
+ PHONE_LOCK_DBG
+ ("phone_lock_view_data->view_disabled = %d",
+ phone_lock_view_data->view_disabled);
+ switch (phone_lock_view_data->lock_type) {
+ case PHONE_LOCK_VIEW_COMPLEX_PHONE_LOCK:
+ _phone_lock_view_destroy_customed_entry
+ (phone_lock_view_data);
+ _phone_lock_view_create_customed_entry
+ (phone_lock_view_data);
+ _phone_lock_view_enable_phone_lock
+ (phone_lock_view_data);
+ break;
+ case PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK:
+ _phone_lock_view_enable_simple_phone_lock(phone_lock_view_data);
+ if (phone_lock_view_data->is_callug_launched == EINA_FALSE) {
+ phone_lock_view_show_imf_context_input_panel
+ (phone_lock_view_data);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+}
+
+static void _phone_lock_view_check_vconf_value(void *data)
+{
+ int phone_lock_value = -1;
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ vconf_get_int(VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ &phone_lock_value);
+
+ if (phone_lock_value == 0) {
+ if (phone_lock_view_data->phone_lock_timer) {
+ return;
+ }
+ phone_lock_view_data->phone_lock_timer =
+ ecore_timer_add(1, (Ecore_Task_Cb)
+ _phone_lock_view_update_phone_lock_cb,
+ phone_lock_view_data);
+ } else {
+ if (phone_lock_view_data->phone_lock_timer) {
+ ecore_timer_del(phone_lock_view_data->phone_lock_timer);
+ phone_lock_view_data->phone_lock_timer = NULL;
+ }
+ phone_lock_view_data->view_disabled = 0;
+ switch (phone_lock_view_data->lock_type) {
+ case PHONE_LOCK_VIEW_COMPLEX_PHONE_LOCK:
+ _phone_lock_view_enable_phone_lock
+ (phone_lock_view_data);
+ break;
+ case PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK:
+ _phone_lock_view_enable_simple_phone_lock
+ (phone_lock_view_data);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static void _phone_lock_view_check_vconf_value_cb(keynode_t * key, void *data)
+{
+ _phone_lock_view_check_vconf_value(data);
+}
+
+static void _phone_lock_view_clear_entry_contents(void *data)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ switch (phone_lock_view_data->lock_type) {
+ case PHONE_LOCK_VIEW_COMPLEX_PHONE_LOCK:
+ PHONE_LOCK_DBG("Clear the complex pw's entry.");
+ if (phone_lock_view_data->input_entry) {
+ elm_entry_entry_set
+ (phone_lock_view_data->input_entry, "");
+ }
+ break;
+ case PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK:
+ PHONE_LOCK_DBG("Clear the simple pw's entry.");
+ if (phone_lock_view_data->editfield_layout) {
+ elm_entry_entry_set(_phone_lock_view_editfield_entry_get
+ (phone_lock_view_data->editfield_layout),
+ "");
+ }
+ phone_lock_view_data->is_simple_pw_checking = EINA_FALSE;
+ break;
+ }
+}
+
+/* reset: clear entry and hide keypad */
+static void _phone_lock_view_notify_pm_state_cb(keynode_t * key, void *data)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ int val = -1;
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ if (vconf_get_int(VCONFKEY_PM_STATE, &val) < 0) {
+ PHONE_LOCK_ERR("Cannot get VCONFKEY_PM_STATE");
+ return;
+ }
+
+ if (val == VCONFKEY_PM_STATE_LCDOFF) {
+ _phone_lock_view_clear_entry_contents(phone_lock_view_data);
+ phone_lock_view_hide_imf_context_input_panel
+ (phone_lock_view_data);
+ }
+}
+
+void
+_phone_lock_view_create_alpha_view_complex_lock(phone_lock_view_data_t *
+ phone_lock_view_data)
+{
+ Evas_Object *background = NULL;
+ Evas_Object *label = NULL;
+ Evas_Object *title_label = NULL;
+ Evas_Object *input = NULL;
+ Evas_Object *entry = NULL;
+ char buf[256] = { 0, };
+ static Elm_Entry_Filter_Limit_Size limit_filter_data_alpha;
+
+ background =
+ _phone_lock_view_create_layout(phone_lock_view_data->layout_main,
+ EDJ_PHONE_LOCK_VIEW,
+ "phlock.view.main");
+
+ evas_object_resize(background, phone_lock_view_data->win_w,
+ phone_lock_view_data->win_h);
+ evas_object_show(background);
+
+ _phone_lock_view_create_bg_image(background);
+
+ title_label = elm_label_add(background);
+ elm_object_part_content_set(background, "swallow.title", title_label);
+
+ evas_object_show(title_label);
+ input =
+ _phone_lock_view_create_layout(background, EDJ_PHONE_LOCK_VIEW,
+ "phlock.view.input.complex");
+
+ entry = elm_entry_add(background);
+
+ Elm_Theme *th = elm_theme_new();
+ elm_theme_ref_set(th, NULL);
+ elm_theme_extension_add(th, EDJ_PHONE_LOCK_VIEW_ENTRY);
+
+ elm_object_theme_set(entry, th);
+ elm_object_style_set(entry, "phone_lock_alpha_style");
+
+ limit_filter_data_alpha.max_char_count =
+ PHONE_LOCK_VIEW_PHONE_LOCK_MAX_LENGTH;
+ limit_filter_data_alpha.max_byte_count = 0;
+ elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size,
+ &limit_filter_data_alpha);
+
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ elm_entry_password_set(entry, EINA_TRUE);
+ elm_entry_entry_set(entry, "");
+ elm_entry_cursor_end_set(entry);
+ elm_object_part_content_set(input, "swallow.text", entry);
+
+ Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(entry);
+ ecore_imf_context_input_panel_event_callback_add(imf_context,
+ ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+ _phone_lock_view_input_panel_event_cb,
+ phone_lock_view_data);
+ ecore_imf_context_input_panel_language_set(imf_context,
+ ECORE_IMF_INPUT_PANEL_LANG_ALPHABET);
+
+ label = elm_label_add(background);
+
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=34 font=SLP:style=Roman color=#ffffff align=center>",
+ phone_lock_get_string(IDS_COM_SK_OK), "</>");
+ elm_object_text_set(label, buf);
+ elm_object_part_content_set(input, "swallow.button", label);
+
+ evas_object_show(label);
+
+ edje_object_signal_callback_add(_EDJ(input), "mouse,up,1", "button",
+ _phone_lock_view_button_up_cb,
+ phone_lock_view_data);
+ edje_object_signal_callback_add(_EDJ(input), "mouse,down,1", "button",
+ _phone_lock_view_button_down_cb,
+ phone_lock_view_data);
+
+ phone_lock_view_data->background = background;
+ phone_lock_view_data->input_label = label;
+ phone_lock_view_data->title_label = title_label;
+ phone_lock_view_data->input_entry = entry;
+ phone_lock_view_data->input = input;
+ phone_lock_view_data->theme = th;
+
+ _phone_lock_view_create_emergency_event(phone_lock_view_data);
+ _phone_lock_view_create_info(phone_lock_view_data);
+ _phone_lock_view_update_phone_lock(phone_lock_view_data);
+ vconf_notify_key_changed
+ (VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ _phone_lock_view_check_vconf_value_cb, phone_lock_view_data);
+ vconf_notify_key_changed(VCONFKEY_PM_STATE,
+ _phone_lock_view_notify_pm_state_cb,
+ phone_lock_view_data);
+ _phone_lock_view_check_vconf_value(phone_lock_view_data);
+}
+
+static void _phone_lock_view_set_entry_bg_color(void *data)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ char *s = NULL;
+ int length = 0;
+ Evas_Object *editfield_layout = NULL;
+
+ if (!phone_lock_view_data) {
+ return;
+ }
+ editfield_layout = phone_lock_view_data->editfield_layout;
+ if (editfield_layout) {
+ s = (char *)
+ elm_entry_entry_get(_phone_lock_view_editfield_entry_get
+ (editfield_layout));
+ }
+
+ PHONE_LOCK_DBG("%s s = %s", __FUNCTION__, s);
+ length = strlen(s);
+ switch (length) {
+ case 0:
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp1_bg_set_default", "sp1_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp2_bg_set_default", "sp2_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp3_bg_set_default", "sp3_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp4_bg_set_default", "sp4_bg");
+ break;
+ case 1:
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp1_bg_set_input", "sp1_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp2_bg_set_default", "sp2_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp3_bg_set_default", "sp3_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp4_bg_set_default", "sp4_bg");
+ break;
+ case 2:
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp1_bg_set_input", "sp1_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp2_bg_set_input", "sp2_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp3_bg_set_default", "sp3_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp4_bg_set_default", "sp4_bg");
+ break;
+ case 3:
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp1_bg_set_input", "sp1_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp2_bg_set_input", "sp2_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp3_bg_set_input", "sp3_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp4_bg_set_default", "sp4_bg");
+ break;
+ case 4:
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp1_bg_set_input", "sp1_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp2_bg_set_input", "sp2_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp3_bg_set_input", "sp3_bg");
+ edje_object_signal_emit(_EDJ(phone_lock_view_data->input),
+ "sp4_bg_set_input", "sp4_bg");
+ break;
+ }
+}
+
+static void _phone_lock_view_simple_entry_changed_cb(void *data,
+ Evas_Object * obj,
+ void *event_info)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ char *s = NULL;
+ int length = 0;
+ Evas_Object *editfield_layout = NULL;
+ Evas_Object *label1 = NULL;
+ Evas_Object *label2 = NULL;
+ Evas_Object *label3 = NULL;
+ Evas_Object *label4 = NULL;
+ char buf[255] = { 0 };
+
+ if (!phone_lock_view_data) {
+ return;
+ }
+
+ if (phone_lock_view_data->is_simple_pw_checking == EINA_TRUE) {
+ return;
+ }
+ editfield_layout = phone_lock_view_data->editfield_layout;
+ if (obj) {
+ s = (char *)
+ elm_entry_entry_get(_phone_lock_view_editfield_entry_get
+ (editfield_layout));
+ }
+
+ if (elm_object_focus_get(editfield_layout)) {
+ if (elm_entry_is_empty
+ (_phone_lock_view_editfield_entry_get(editfield_layout))) {
+ elm_object_signal_emit(editfield_layout,
+ "elm,state,eraser,hide", "elm");
+ } else {
+ elm_object_signal_emit(editfield_layout,
+ "elm,state,eraser,show", "elm");
+ }
+ }
+
+ PHONE_LOCK_DBG("%s s = %s", __FUNCTION__, s);
+ length = strlen(s);
+ label1 = phone_lock_view_data->sp_label1;
+ label2 = phone_lock_view_data->sp_label2;
+ label3 = phone_lock_view_data->sp_label3;
+ label4 = phone_lock_view_data->sp_label4;
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ "<font_size=70 font=SLP:style=Roman color=#ffffff align=center>",
+ "*", "</>");
+ switch (length) {
+ case 0:
+ elm_object_text_set(label1, "");
+ elm_object_text_set(label2, "");
+ elm_object_text_set(label3, "");
+ elm_object_text_set(label4, "");
+ break;
+ case 1:
+ elm_object_text_set(label1, buf);
+ elm_object_text_set(label2, "");
+ elm_object_text_set(label3, "");
+ elm_object_text_set(label4, "");
+ break;
+ case 2:
+ elm_object_text_set(label1, buf);
+ elm_object_text_set(label2, buf);
+ elm_object_text_set(label3, "");
+ elm_object_text_set(label4, "");
+ break;
+ case 3:
+ elm_object_text_set(label1, buf);
+ elm_object_text_set(label2, buf);
+ elm_object_text_set(label3, buf);
+ elm_object_text_set(label4, "");
+ break;
+ case 4:
+ elm_object_text_set(label1, buf);
+ elm_object_text_set(label2, buf);
+ elm_object_text_set(label3, buf);
+ elm_object_text_set(label4, buf);
+ break;
+ }
+ _phone_lock_view_set_entry_bg_color(phone_lock_view_data);
+
+ if (length != 4) {
+ PHONE_LOCK_DBG("%s %d", __FUNCTION__, __LINE__);
+ return;
+ }
+ PHONE_LOCK_DBG("%s %d length = %d", __FUNCTION__, __LINE__, length);
+ phone_lock_view_hide_imf_context_input_panel(phone_lock_view_data);
+ _phone_lock_view_set_str(&phone_lock_view_data->contents,
+ _phone_lock_view_entry_get(editfield_layout));
+
+ if (phone_lock_view_data->func) {
+ phone_lock_view_data->func(2, phone_lock_view_data->contents,
+ phone_lock_view_data->user_data);
+ phone_lock_view_data->is_simple_pw_checking = EINA_TRUE;
+ PHONE_LOCK_DBG("%s %d phone_lock_view_data->contents = %s",
+ __FUNCTION__, __LINE__,
+ phone_lock_view_data->contents);
+ }
+}
+
+static void _phone_lock_view_label_signal_process(void *data, Evas_Object * o,
+ const char *emission,
+ const char *source)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ PHONE_LOCK_DBG("emission = %s", emission);
+ if (!phone_lock_view_data) {
+ return;
+ }
+
+ if ((strcmp("sp1_entry_clicked", emission) == 0)
+ || (strcmp("sp2_entry_clicked", emission) == 0)
+ || (strcmp("sp3_entry_clicked", emission) == 0)
+ || (strcmp("sp4_entry_clicked", emission) == 0)) {
+ phone_lock_view_show_imf_context_input_panel
+ (phone_lock_view_data);
+ }
+ _phone_lock_view_set_entry_bg_color(phone_lock_view_data);
+}
+
+static void _phone_lock_view_focused_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ PHONE_LOCK_DBG("_focused_cb\n");
+ 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 _phone_lock_view_unfocused_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ PHONE_LOCK_DBG("_unfocused_cb\n");
+ 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 _phone_lock_view_eraser_clicked_cb(void *data, Evas_Object * obj,
+ const char *emission,
+ const char *source)
+{
+ PHONE_LOCK_DBG("_eraser_clicked_cb\n");
+ elm_entry_entry_set(data, "");
+}
+
+static Evas_Object *_phone_lock_view_editfield_create(Evas_Object * parent,
+ void *data)
+{
+ Evas_Object *layout = NULL;
+ Evas_Object *entry = NULL;
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+ limit_filter_data.max_char_count = PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK_MAX_LENGTH; /* hard code for demo */
+ limit_filter_data.max_byte_count = 0;
+ PHONE_LOCK_DBG("_openlock_setting_pw_editfield_create\n");
+
+ 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_object_focus_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(layout);
+ if (entry) {
+ elm_object_focus_set(entry, EINA_TRUE);
+ phone_lock_view_data->is_customedentry_clicked = EINA_TRUE;
+ }
+ evas_object_move(entry, -100, -100); /* can't be seen */
+ evas_object_hide(entry);
+
+ evas_object_smart_callback_add(entry, "changed",
+ _phone_lock_view_simple_entry_changed_cb,
+ phone_lock_view_data);
+ evas_object_smart_callback_add(entry, "focused",
+ _phone_lock_view_focused_cb, layout);
+ evas_object_smart_callback_add(entry, "unfocused",
+ _phone_lock_view_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",
+ _phone_lock_view_eraser_clicked_cb,
+ entry);
+ return layout;
+}
+
+static Evas_Object *_phone_lock_view_editfield_entry_get(Evas_Object * parent)
+{
+ Evas_Object *entry = NULL;
+
+ entry = elm_object_part_content_get(parent, "elm.swallow.content");
+
+ return entry;
+}
+
+void
+_phone_lock_view_create_alpha_view_simple_lock(phone_lock_view_data_t *
+ phone_lock_view_data)
+{
+ Evas_Object *background = NULL;
+ Evas_Object *title_label = NULL;
+ Evas_Object *label1 = NULL;
+ Evas_Object *label2 = NULL;
+ Evas_Object *label3 = NULL;
+ Evas_Object *label4 = NULL;
+ Evas_Object *layout = NULL;
+ Evas_Object *input = NULL;
+
+ background =
+ _phone_lock_view_create_layout(phone_lock_view_data->layout_main,
+ EDJ_PHONE_LOCK_VIEW,
+ "phlock.view.main.simple");
+
+ evas_object_resize(background, phone_lock_view_data->win_w,
+ phone_lock_view_data->win_h);
+ evas_object_show(background);
+
+ _phone_lock_view_create_bg_image(background);
+
+ title_label = elm_label_add(background);
+ elm_object_text_set(title_label, "");
+ elm_object_part_content_set(background, "swallow.title", title_label);
+
+ evas_object_show(title_label);
+
+ input =
+ _phone_lock_view_create_layout(background, EDJ_PHONE_LOCK_VIEW,
+ "phlock.view.input.simple");
+
+ layout =
+ _phone_lock_view_editfield_create(background, phone_lock_view_data);
+
+ Ecore_IMF_Context *imf_context =
+ elm_entry_imf_context_get(_phone_lock_view_editfield_entry_get
+ (layout));
+ ecore_imf_context_input_panel_event_callback_add(imf_context,
+ ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+ _phone_lock_view_input_panel_event_cb,
+ phone_lock_view_data);
+ ecore_imf_context_input_panel_language_set(imf_context,
+ ECORE_IMF_INPUT_PANEL_LANG_ALPHABET);
+
+ label1 = elm_label_add(background);
+ elm_object_text_set(label1, "");
+ elm_object_part_content_set(input, "sp1_entry", label1);
+ evas_object_show(label1);
+
+ label2 = elm_label_add(background);
+ elm_object_text_set(label2, "");
+ elm_object_part_content_set(input, "sp2_entry", label2);
+ evas_object_show(label2);
+
+ label3 = elm_label_add(background);
+ elm_object_text_set(label3, "");
+ elm_object_part_content_set(input, "sp3_entry", label3);
+ evas_object_show(label3);
+
+ label4 = elm_label_add(background);
+ elm_object_text_set(label4, "");
+ elm_object_part_content_set(input, "sp4_entry", label4);
+ evas_object_show(label4);
+
+ edje_object_signal_callback_add(_EDJ(input), "sp1_entry_clicked", "*",
+ _phone_lock_view_label_signal_process,
+ phone_lock_view_data);
+ edje_object_signal_callback_add(_EDJ(input), "sp2_entry_clicked", "*",
+ _phone_lock_view_label_signal_process,
+ phone_lock_view_data);
+ edje_object_signal_callback_add(_EDJ(input), "sp3_entry_clicked", "*",
+ _phone_lock_view_label_signal_process,
+ phone_lock_view_data);
+ edje_object_signal_callback_add(_EDJ(input), "sp4_entry_clicked", "*",
+ _phone_lock_view_label_signal_process,
+ phone_lock_view_data);
+
+ phone_lock_view_data->background = background;
+ phone_lock_view_data->title_label = title_label;
+ phone_lock_view_data->editfield_layout = layout;
+ phone_lock_view_data->sp_label1 = label1;
+ phone_lock_view_data->sp_label2 = label2;
+ phone_lock_view_data->sp_label3 = label3;
+ phone_lock_view_data->sp_label4 = label4;
+ phone_lock_view_data->input = input;
+
+ _phone_lock_view_create_emergency_event(phone_lock_view_data);
+ _phone_lock_view_create_info(phone_lock_view_data);
+ _phone_lock_view_update_phone_lock(phone_lock_view_data);
+ vconf_notify_key_changed
+ (VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ _phone_lock_view_check_vconf_value_cb, phone_lock_view_data);
+ vconf_notify_key_changed(VCONFKEY_PM_STATE,
+ _phone_lock_view_notify_pm_state_cb,
+ phone_lock_view_data);
+ _phone_lock_view_check_vconf_value(phone_lock_view_data);
+}
+
+phone_lock_view_data_t *phone_lock_view_create(phone_lock_view_type_t view_type,
+ phone_lock_window_type_t
+ window_type,
+ Evas_Object * win_main,
+ phone_lock_view_cbfunc func,
+ void *user_data)
+{
+ PHONE_LOCK_DBG("%s, win : %p", __FUNCTION__, win_main);
+
+ phone_lock_view_data_t *phone_lock_view_data;
+ phone_lock_view_data =
+ (phone_lock_view_data_t *) malloc(sizeof(phone_lock_view_data_t));
+ if (!phone_lock_view_data)
+ return NULL;
+
+ memset(phone_lock_view_data, 0, sizeof(phone_lock_view_data_t));
+
+ ecore_x_window_size_get(ecore_x_window_root_first_get(),
+ &phone_lock_view_data->win_w,
+ &phone_lock_view_data->win_h);
+
+ phone_lock_view_data->view_type = view_type;
+ phone_lock_view_data->window_type = window_type;
+ phone_lock_view_data->win_main = win_main;
+ phone_lock_view_data->func = func;
+ phone_lock_view_data->user_data = user_data;
+ phone_lock_view_data->scale =
+ (double)(phone_lock_view_data->win_w) /
+ (double)PHONE_LOCK_VIEW_MAIN_W;
+
+ phone_lock_view_data->layout_main =
+ _phone_lock_view_create_layout(phone_lock_view_data->win_main, NULL,
+ NULL);
+
+ if (window_type == PHONE_LOCK_WINDOW_TYPE_ALPHA) {
+ int simple_password_on = 0;
+ evas_object_color_set(phone_lock_view_data->layout_main, 255, 255, 255, 0.7); /* for alpha window */
+ vconf_get_bool(VCONFKEY_SETAPPL_STATE_SIMPLE_PASSWORD_BOOL,
+ &simple_password_on);
+ if (simple_password_on == 1) {
+ phone_lock_view_data->lock_type =
+ PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK;
+ } else {
+ phone_lock_view_data->lock_type =
+ PHONE_LOCK_VIEW_COMPLEX_PHONE_LOCK;
+ }
+ PHONE_LOCK_DBG("phone_lock_view_data->lock_type = %d\n",
+ phone_lock_view_data->lock_type);
+
+ if (view_type >= PHONE_LOCK_VIEW_TYPE_PHONE_LOCK
+ && view_type < PHONE_LOCK_VIEW_TYPE_PHONE_MAX) {
+ switch (phone_lock_view_data->lock_type) {
+ case PHONE_LOCK_VIEW_COMPLEX_PHONE_LOCK:
+ _phone_lock_view_create_alpha_view_complex_lock
+ (phone_lock_view_data);
+ break;
+ case PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK:
+ _phone_lock_view_create_alpha_view_simple_lock
+ (phone_lock_view_data);
+ break;
+ default:
+ break;
+ }
+ } else {
+ PHONE_LOCK_DBG("Error. Invalide view type\n");
+ free(phone_lock_view_data);
+ return NULL;
+ }
+ }
+ return phone_lock_view_data;
+}
+
+void phone_lock_view_destroy(phone_lock_view_data_t * phone_lock_view_data)
+{
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ _phone_lock_view_check_vconf_value_cb);
+ vconf_ignore_key_changed(VCONFKEY_PM_STATE,
+ _phone_lock_view_notify_pm_state_cb);
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+ if (phone_lock_view_data) {
+ _phone_lock_fini_heynoti(phone_lock_view_data);
+ ecore_imf_context_input_panel_event_callback_del
+ (elm_entry_imf_context_get
+ (_phone_lock_view_editfield_entry_get
+ (phone_lock_view_data->editfield_layout)),
+ ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+ _phone_lock_view_input_panel_event_cb);
+ ecore_imf_context_input_panel_event_callback_del
+ (elm_entry_imf_context_get
+ (phone_lock_view_data->input_entry),
+ ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+ _phone_lock_view_input_panel_event_cb);
+ if (phone_lock_view_data->emgc_up_timer) {
+ ecore_timer_del(phone_lock_view_data->emgc_up_timer);
+ phone_lock_view_data->emgc_up_timer = NULL;
+ }
+ if (phone_lock_view_data->slide_timer) {
+ ecore_timer_del(phone_lock_view_data->slide_timer);
+ phone_lock_view_data->slide_timer = NULL;
+ }
+
+ if (phone_lock_view_data->phone_lock_timer) {
+ ecore_timer_del(phone_lock_view_data->phone_lock_timer);
+ phone_lock_view_data->phone_lock_timer = NULL;
+ }
+ if (phone_lock_view_data->info_timer) {
+ ecore_timer_del(phone_lock_view_data->info_timer);
+ phone_lock_view_data->info_timer = NULL;
+ }
+
+ if (phone_lock_view_data->contents) {
+ free(phone_lock_view_data->contents);
+ phone_lock_view_data->contents = NULL;
+ }
+ if (phone_lock_view_data->sp_label1) {
+ evas_object_del(phone_lock_view_data->sp_label1);
+ phone_lock_view_data->sp_label1 = NULL;
+ }
+ if (phone_lock_view_data->sp_label2) {
+ evas_object_del(phone_lock_view_data->sp_label2);
+ phone_lock_view_data->sp_label2 = NULL;
+ }
+ if (phone_lock_view_data->sp_label3) {
+ evas_object_del(phone_lock_view_data->sp_label3);
+ phone_lock_view_data->sp_label3 = NULL;
+ }
+ if (phone_lock_view_data->sp_label4) {
+ evas_object_del(phone_lock_view_data->sp_label4);
+ phone_lock_view_data->sp_label4 = NULL;
+ }
+ if (phone_lock_view_data->editfield_layout) {
+ evas_object_del(phone_lock_view_data->editfield_layout);
+ phone_lock_view_data->editfield_layout = NULL;
+ }
+ if (phone_lock_view_data->info) {
+ evas_object_del(phone_lock_view_data->info);
+ phone_lock_view_data->info = NULL;
+ }
+
+ if (phone_lock_view_data->theme) {
+ elm_theme_extension_del(phone_lock_view_data->theme,
+ EDJ_PHONE_LOCK_VIEW_ENTRY);
+ elm_theme_free(phone_lock_view_data->theme);
+ }
+ if (phone_lock_view_data->layout_main) {
+ evas_object_del(phone_lock_view_data->layout_main);
+ phone_lock_view_data->layout_main = NULL;
+ }
+ }
+
+ free(phone_lock_view_data);
+ phone_lock_view_data = NULL;
+}
+
+Evas_Object *phone_lock_view_get_layoutmain(phone_lock_view_data_t *
+ phone_lock_view_data)
+{
+ return phone_lock_view_data->layout_main;
+}
+
+phone_lock_view_type_t phone_lock_view_get_type(phone_lock_view_data_t *
+ phone_lock_view_data)
+{
+ return phone_lock_view_data->view_type;
+}
+
+phone_lock_window_type_t
+phone_lock_window_get_type(phone_lock_view_data_t * phone_lock_view_data)
+{
+ return phone_lock_view_data->window_type;
+}
+
+void phone_lock_view_hide_imf_context_input_panel(void *data)
+{
+ PHONE_LOCK_DBG("");
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ Ecore_IMF_Context *imf_context = NULL;
+
+ if (NULL == phone_lock_view_data) {
+ return;
+ }
+
+ switch (phone_lock_view_data->lock_type) {
+ case PHONE_LOCK_VIEW_COMPLEX_PHONE_LOCK:
+ imf_context =
+ elm_entry_imf_context_get
+ (phone_lock_view_data->input_entry);
+ if (imf_context) {
+ ecore_imf_context_input_panel_hide(imf_context);
+ }
+ break;
+ case PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK:
+ evas_object_hide(phone_lock_view_data->editfield_layout);
+ elm_object_focus_set(_phone_lock_view_editfield_entry_get
+ (phone_lock_view_data->editfield_layout),
+ EINA_FALSE);
+ imf_context =
+ elm_entry_imf_context_get
+ (_phone_lock_view_editfield_entry_get
+ (phone_lock_view_data->editfield_layout));
+ if (imf_context) {
+ ecore_imf_context_input_panel_hide(imf_context);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void phone_lock_view_show_imf_context_input_panel(void *data)
+{
+ PHONE_LOCK_DBG("");
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ Ecore_IMF_Context *imf_context = NULL;
+
+ if (NULL == phone_lock_view_data) {
+ return;
+ }
+
+ PHONE_LOCK_DBG
+ ("phone_lock_view_data->is_callug_launched = %d,phone_lock_view_data->is_customedentry_clicked = %d",
+ phone_lock_view_data->is_callug_launched,
+ phone_lock_view_data->is_customedentry_clicked);
+ PHONE_LOCK_DBG
+ ("phone_lock_view_data->view_disabled = %d,phone_lock_view_data->is_customedentry_clicked = %d",
+ phone_lock_view_data->view_disabled,
+ phone_lock_view_data->is_customedentry_clicked);
+ PHONE_LOCK_DBG
+ ("phone_lock_view_data->view_disabled = %d,phone_lock_view_data->is_customedentry_clicked = %d",
+ phone_lock_view_data->view_disabled,
+ phone_lock_view_data->is_customedentry_clicked);
+ if ((phone_lock_view_data->view_disabled == 0)
+ && (phone_lock_view_data->is_customedentry_clicked == EINA_TRUE)) {
+ switch (phone_lock_view_data->lock_type) {
+ case PHONE_LOCK_VIEW_COMPLEX_PHONE_LOCK:
+ evas_object_show(phone_lock_view_data->input_entry);
+ elm_object_focus_set(phone_lock_view_data->input_entry,
+ EINA_TRUE);
+ imf_context =
+ elm_entry_imf_context_get
+ (phone_lock_view_data->input_entry);
+ if (imf_context) {
+ ecore_imf_context_input_panel_show(imf_context);
+ }
+ break;
+ case PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK:
+ PHONE_LOCK_DBG("");
+ evas_object_show
+ (phone_lock_view_data->editfield_layout);
+ elm_object_focus_set
+ (_phone_lock_view_editfield_entry_get
+ (phone_lock_view_data->editfield_layout),
+ EINA_TRUE);
+ imf_context =
+ elm_entry_imf_context_get
+ (_phone_lock_view_editfield_entry_get
+ (phone_lock_view_data->editfield_layout));
+ if (imf_context) {
+ ecore_imf_context_input_panel_show(imf_context);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void phone_lock_view_check_attempts_left(void *data)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ int value = -1;
+
+ vconf_get_int(VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT, &value);
+ value--;
+
+ if (value > 0 && value <= PHONE_LOCK_VIEW_PHONE_LOCK_ATTEMPTS_MAX) {
+ char temp_str[200] = { 0, };
+ char temp_left[50] = { 0, };
+
+ vconf_set_int(VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ value);
+ snprintf(temp_left, 50,
+ phone_lock_get_string(IDS_IDLE_BODY_PD_ATTEMPTS_LEFT),
+ value);
+ snprintf(temp_str, 200, "%s, %s",
+ phone_lock_get_string(IDS_IDLE_BODY_WRONG_PASSWORD),
+ temp_left);
+ phone_lock_view_show_msg(phone_lock_view_data, temp_str);
+ } else if (value == 0) {
+ time_t cur_time = time(NULL);
+ char cur_timestamp[64] = { 0, };
+
+ snprintf(cur_timestamp, sizeof(cur_timestamp), "%ld", cur_time);
+ vconf_set_str(VCONFKEY_SETAPPL_PHONE_LOCK_TIMESTAMP_STR,
+ cur_timestamp);
+ vconf_set_int(VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ value);
+ phone_lock_view_data->block_seconds = PHONE_LOCK_VIEW_PHONE_LOCK_BLOCK_SECONDS; /* set the initial value for block seconds */
+ phone_lock_view_data->view_disabled = 1;
+ switch (phone_lock_view_data->lock_type) {
+ case PHONE_LOCK_VIEW_COMPLEX_PHONE_LOCK:
+ _phone_lock_view_disable_phone_lock
+ (phone_lock_view_data);
+ break;
+ case PHONE_LOCK_VIEW_SIMPLE_PHONE_LOCK:
+ _phone_lock_view_disable_simple_phone_lock
+ (phone_lock_view_data);
+ break;
+ default:
+ break;
+ }
+ phone_lock_view_show_msg(phone_lock_view_data,
+ phone_lock_get_string
+ (IDS_IDLE_BODY_INPUT_PASSWORD_AFTER_THIRTYSECONDS));
+ }
+}
+
+void phone_lock_view_reset_attempts_num(void *data)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ _phone_lock_view_check_vconf_value_cb);
+ vconf_set_int(VCONFKEY_SETAPPL_PHONE_LOCK_ATTEMPTS_LEFT_INT,
+ PHONE_LOCK_VIEW_PHONE_LOCK_ATTEMPTS_MAX);
+}
+
+void phone_lock_view_reset_callug_launch_flag(void *data)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+ phone_lock_view_data->is_callug_launched = EINA_FALSE;
+}
+
+void phone_lock_view_set_right_password_flag(void *data)
+{
+ phone_lock_view_data_t *phone_lock_view_data =
+ (phone_lock_view_data_t *) data;
+ PHONE_LOCK_DBG("%s", __FUNCTION__);
+
+ if (phone_lock_view_data == NULL) {
+ return;
+ }
+ phone_lock_view_data->is_right_password = EINA_TRUE;
+}
+
+void
+phone_lock_view_show_msg(phone_lock_view_data_t * phone_lock_view_data,
+ const char *str)
+{
+ Evas_Object *popup;
+
+ PHONE_LOCK_DBG("%s : %d, %p", __FUNCTION__,
+ phone_lock_view_data->view_type, phone_lock_view_data);
+
+ popup = elm_popup_add(phone_lock_view_data->win_main);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+
+ evas_object_smart_callback_add(popup, "block,clicked",
+ _phone_lock_view_block_clicked_cb, phone_lock_view_data);
+ elm_popup_timeout_set(popup, 3);
+
+ elm_object_text_set(popup, str);
+
+ evas_object_smart_callback_add(popup, "timeout",
+ _phone_lock_view_popup_timeout_cb, phone_lock_view_data);
+ evas_object_show(popup);
+}