merge with master
authorJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:04:06 +0000 (01:04 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:04:06 +0000 (01:04 +0900)
CMakeLists.txt
data/groups/lock-info.edc
org.tizen.lockscreen.xml.in
packaging/org.tizen.lockscreen.spec
src/info.c
src/sim-state.c [new file with mode: 0755]
src/sim-state.h [new file with mode: 0755]
src/util.c
src/util.h

index 5bdaa0e..532882a 100755 (executable)
@@ -4,6 +4,7 @@ PROJECT(lockscreen C)
 SET(SRCS
        ${CMAKE_SOURCE_DIR}/src/lockscreen.c
        ${CMAKE_SOURCE_DIR}/src/util.c
+       ${CMAKE_SOURCE_DIR}/src/sim-state.c
        ${CMAKE_SOURCE_DIR}/src/info.c
        ${CMAKE_SOURCE_DIR}/src/bg.c
        ${CMAKE_SOURCE_DIR}/src/noti.c
index 1fd387d..bfaf11a 100755 (executable)
 #define INFO_WIDTH 720
 #define INFO_HEIGHT 382
 
+       styles{
+               style {
+                       name: "style_time";
+                       base: "font=Tizen:style=Medium text_class=tizen font_size=130 align=top color=#ffffffff wrap=mixed";
+                       tag: "br" "\n";
+                       tag: "hilight" "+ color=#ffff";
+                       tag: "b" "+ color=#ffff";
+                       tag: "tab" "\t";
+               }
+       }
+
        group{
                name: "lock-info";
                parts{
                                                to: "info.bg";
                                        }
                                        rel2{
-                                               relative: 376/INFO_WIDTH 122/INFO_HEIGHT;
-                                               to: "info.bg";
-                                       }
-                               }
-                       }
-                       part{
-                               name: "rect.clock.ampm";
-                               type: RECT;
-                               scale: 1;
-                               mouse_events: 0;
-                               description{
-                                       state: "default" 0.0;//for 10:07 hour>=10
-                                       color: 0 0 0 0;
-                                       rel1{
-                                               relative: 376/INFO_WIDTH (122-54)/INFO_HEIGHT);
-                                               to: "info.bg";
-                                       }
-                                       rel2{
-                                               relative: 1.0 122/INFO_HEIGHT;
-                                               to: "info.bg";
-                                       }
-                               }
-                               description{
-                                       state: "digit" 1.0;//for 1:07 hour<10
-                                       color: 0 0 0 0;
-                                       rel1{
-                                               relative: (376-78)/INFO_WIDTH (122-54)/INFO_HEIGHT);
-                                               to: "info.bg";
-                                       }
-                                       rel2{
-                                               relative: 1.0 122/INFO_HEIGHT;
+                                               relative: 1.0 132/INFO_HEIGHT;
                                                to: "info.bg";
                                        }
                                }
@@ -97,7 +78,7 @@
                        }
                        part{
                                name: "txt.clock";
-                               type: TEXT;
+                               type: TEXTBLOCK;
                                scale: 1;
                                mouse_events: 0;
                                description{
                                        rel2{
                                                to: "rect.clock";
                                        }
-                                       text{
-                                               font: "Tizen:style=Medium";
-                                               text_class: "tizen";
-                                               size: 130;
-                                               align: 0.0 0.5;
-                                       }
-                               }
-                       }
-                       part{
-                               name: "txt.clock.ampm";
-                               type: TEXT;
-                               scale: 1;
-                               mouse_events: 0;
-                               description{
-                                       state: "default" 0.0;
-                                       color: 255 255 255 255;
-                                       rel1{
-                                               to: "rect.clock.ampm";
-                                       }
-                                       rel2{
-                                               to: "rect.clock.ampm";
-                                       }
-                                       text{
-                                               font: "Tizen:style=Medium";
-                                               text_class: "tizen";
-                                               size: 46;
-                                               align: 0.0 0.5;
+                                       text {
+                                               style: "style_time";
                                        }
                                }
                        }
 
                programs{
                        program{
-                               name: "digit,clock";
-                               signal: "digit,clock";
-                               source: "rect.clock.ampm";
-                               action: STATE_SET "digit" 1.0;
-                               target: "rect.clock.ampm";
-                       }
-                       program{
-                               name: "default,clock";
-                               signal: "default,clock";
-                               source: "rect.clock.ampm";
-                               action: STATE_SET "default" 0.0;
-                               target: "rect.clock.ampm";
-                       }
-                       program{
                                name: "visible,helptext";
                                signal: "visible,helptext";
                                source: "txt.helptext";
index 0ceba4c..7ab0b97 100755 (executable)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>\r
-<manifest xmlns="http://tizen.org/ns/packages" package="@PKGNAME@" version="0.1.12" install-location="internal-only">\r
+<manifest xmlns="http://tizen.org/ns/packages" package="@PKGNAME@" version="0.1.15" install-location="internal-only">\r
        <label>@PROJECT_NAME@</label>\r
        <author email="yjoo93.park@samsung.com" href="www.samsung.com">Youngjoo Park</author>\r
        <author email="seungtaek.chung@samsung.com" href="www.samsung.com">seungtaek chung</author>\r
index a43d1e7..c4ccff3 100755 (executable)
@@ -2,7 +2,7 @@
 
 Name:       org.tizen.lockscreen
 Summary:    lockscreen application
-Version:    0.1.12
+Version:    0.1.15
 Release:    1
 Group:      TBD
 License:    Apache
index 395a2b7..2e39bcc 100755 (executable)
 #include "lockscreen.h"
 #include "log.h"
 
+#define BUFFER_LENGTH 256
+
 static Ecore_Timer *timer = NULL;
+static int clock_font = 130;
+static int am_pm_font = 46;
+
+static void _lock_time_set(void *data, Eina_Bool is_pre, const char *clock, const char *am_pm)
+{
+       Evas_Object *info = data;
+       if (info == NULL)
+               return;
+
+       char time[BUFFER_LENGTH] = {0};
+       time[BUFFER_LENGTH-1] = '\0';
+
+       if(is_pre) {
+               snprintf(time, BUFFER_LENGTH - 1, "<font_size=%d>%s <font_size=%d>%s", am_pm_font, am_pm, clock_font, clock);
+       }else {
+               snprintf(time, BUFFER_LENGTH - 1, "<font_size=%d>%s <font_size=%d>%s", clock_font, clock, am_pm_font, am_pm);
+       }
+       LOCK_SCREEN_TRACE_DBG("time is %s", time);
+       edje_object_part_text_set(_EDJ(info), "txt.clock", time);
+}
+
+static bool get_formatted_ampm_from_utc_time(char* date_str, int date_size, int* str_length, Eina_Bool* is_pre)
+{
+       UChar customSkeleton[BUFFER_LENGTH] = { 0 };
+       UErrorCode status = U_ZERO_ERROR;
+       UDateFormat *formatter = NULL;
+
+       UChar bestPattern[BUFFER_LENGTH] = { 0 };
+       UChar formatted[BUFFER_LENGTH] = { 0 };
+
+       char bestPatternString[BUFFER_LENGTH] = { 0 };
+       char formattedString[BUFFER_LENGTH] = { 0 };
+
+       UDateTimePatternGenerator *pattern_generator = NULL;
+
+       char *time_skeleton = "hhmm";
+
+       char *locale = vconf_get_str(VCONFKEY_REGIONFORMAT);
+       if (locale == NULL) {
+               LOCK_SCREEN_TRACE_ERR("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
+               return false;
+       }
+
+       u_uastrncpy(customSkeleton, time_skeleton, strlen(time_skeleton));
+
+       pattern_generator = udatpg_open(locale, &status);
+
+       int32_t bestPatternCapacity = (int32_t) (sizeof(bestPattern) / sizeof((bestPattern)[0]));
+       (void)udatpg_getBestPattern(pattern_generator, customSkeleton,
+                                   u_strlen(customSkeleton), bestPattern,
+                                   bestPatternCapacity, &status);
+
+       u_austrcpy(bestPatternString, bestPattern);
+       u_uastrcpy(bestPattern,"a");
+
+       if(bestPatternString[0] == 'a')
+       {
+               (*is_pre) = EINA_TRUE;
+       }
+       else
+       {
+               (*is_pre) = EINA_FALSE;
+       }
+
+       UDate date = ucal_getNow();
+       formatter = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, bestPattern, -1, &status);
+       int32_t formattedCapacity = (int32_t) (sizeof(formatted) / sizeof((formatted)[0]));
+       (void)udat_format(formatter, date, formatted, formattedCapacity, NULL, &status);
+       u_austrcpy(formattedString, formatted);
+
+       LOCK_SCREEN_TRACE_DBG("DATE & TIME is %s %s %d %s", locale, formattedString, u_strlen(formatted), bestPatternString);
+
+       (*str_length) = u_strlen(formatted);
+
+       udatpg_close(pattern_generator);
+
+       udat_close(formatter);
+
+       if(strlen(formattedString) < date_size) {
+               strncpy(date_str, formattedString, strlen(formattedString));
+       } else {
+               strncpy(date_str, formattedString, date_size - 1);
+       }
+
+       return true;
+}
 
 static bool get_formatted_date_from_utc_time(time_t* utc_time, char* date_str, int date_size)
 {
        UErrorCode status = U_ZERO_ERROR;
-       UDateTimePatternGenerator *generator;
-       UDateFormat *formatter;
-       UChar skeleton[40] = { 0 }
-               , pattern[40] = { 0 }
-               , formatted[40] = { 0 };
+       UDateTimePatternGenerator *generator = NULL;
+       UDateFormat *formatter = NULL;
+       UChar skeleton[BUFFER_LENGTH] = { 0 }
+               , pattern[BUFFER_LENGTH] = { 0 }
+               , formatted[BUFFER_LENGTH] = { 0 };
        int32_t patternCapacity, formattedCapacity;
        int32_t skeletonLength, patternLength, formattedLength;
        UDate date;
-       const char *locale;
+       const char *locale = NULL;
        const char customSkeleton[] = UDAT_MONTH_WEEKDAY_DAY;
 
        date = (UDate) (*utc_time) *1000;
 
        uloc_setDefault(__secure_getenv("LC_TIME"), &status);
-       locale = uloc_getDefault();
+       locale = vconf_get_str(VCONFKEY_REGIONFORMAT);
+       if (locale == NULL) {
+               LOCK_SCREEN_TRACE_ERR("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
+               return false;
+       }
 
        generator = udatpg_open(locale, &status);
        if (generator == NULL)
@@ -116,29 +208,30 @@ static Eina_Bool _set_info_time(void *data)
        if (r == 0 && timeformat == APPCORE_TIME_FORMAT_24) {
                strftime(bf1, sizeof(bf1), "%H:%M", &st);
                snprintf(buf, sizeof(buf), "%s", bf1);
+               edje_object_part_text_set(_EDJ(info), "txt.clock", bf1);
        } else {
                strftime(bf1, sizeof(bf1), "%l", &st);
                hour = atoi(bf1);
                strftime(bf1, sizeof(bf1), ":%M", &st);
                snprintf(buf, sizeof(buf), "%d%s", hour, bf1);
-               if (st.tm_hour >= 0 && st.tm_hour < 12) {
-                       snprintf(bf2, sizeof(bf2), "%s", "AM");
-                       if ((st.tm_hour - 10) < 0 && st.tm_hour != 0) {
-                               edje_object_signal_emit(_EDJ(info), "digit,clock", "rect.clock.ampm");
-                       } else {
-                               edje_object_signal_emit(_EDJ(info), "default,clock", "rect.clock.ampm");
-                       }
+
+               char utc_ampm[BUFFER_LENGTH] = { 0 };
+               int ampm_length = 0;
+               Eina_Bool is_pre = EINA_FALSE;
+
+               get_formatted_ampm_from_utc_time(utc_ampm, sizeof(utc_ampm), &ampm_length, &is_pre);
+               LOCK_SCREEN_TRACE_DBG("utc_ampm = %s", utc_ampm);
+               if(ampm_length > 0 && ampm_length <= 4) {
+                       snprintf(bf2, sizeof(bf2), "%s", utc_ampm);
                } else {
-                       snprintf(bf2, sizeof(bf2), "%s", "PM");
-                       if ((st.tm_hour - 12) < 10 && (st.tm_hour - 12) != 0) {
-                               edje_object_signal_emit(_EDJ(info), "digit,clock", "rect.clock.ampm");
+                       if (st.tm_hour >= 0 && st.tm_hour < 12) {
+                               snprintf(bf2, sizeof(bf2), "%s", "AM");
                        } else {
-                               edje_object_signal_emit(_EDJ(info), "default,clock", "rect.clock.ampm");
+                               snprintf(bf2, sizeof(bf2), "%s", "PM");
                        }
                }
-               edje_object_part_text_set(_EDJ(info), "txt.clock.ampm", bf2);
+               _lock_time_set(info, is_pre, buf, bf2);
        }
-       edje_object_part_text_set(_EDJ(info), "txt.clock", buf);
 
        return 0;
 }
diff --git a/src/sim-state.c b/src/sim-state.c
new file mode 100755 (executable)
index 0000000..b06c7f2
--- /dev/null
@@ -0,0 +1,118 @@
+/*\r
+ * Copyright 2012  Samsung Electronics Co., Ltd\r
+ *\r
+ * Licensed under the Flora License, Version 1.0 (the License);\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *  http://floralicense.org/license/\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an AS IS BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+#include <vconf.h>\r
+#include <vconf-keys.h>\r
+\r
+#include "lockscreen.h"\r
+#include "sim-state.h"\r
+\r
+static void _set_sim_state(void *data)\r
+{\r
+       struct appdata *ad = data;\r
+       if (ad == NULL)\r
+               return;\r
+\r
+       int state = 0;\r
+       int ret = 0;\r
+       char *buf = NULL;\r
+\r
+       int service_type = VCONFKEY_TELEPHONY_SVCTYPE_SEARCH;\r
+\r
+       if(vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &service_type) != 0) {\r
+               LOGD("fail to get VCONFKEY_TELEPHONY_SVCTYPE");\r
+       }\r
+\r
+       ret = (vconf_get_int(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, &state));\r
+       if (ret == 0) {\r
+               LOGD("[%s:%d] VCONFKEY(%s) = %d", __func__, __LINE__, VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, state);\r
+               if (state != VCONFKEY_TELEPHONY_DISP_INVALID\r
+                       && service_type > VCONFKEY_TELEPHONY_SVCTYPE_SEARCH) {\r
+                       if (state & VCONFKEY_TELEPHONY_DISP_SPN) {\r
+                               buf = vconf_get_str(VCONFKEY_TELEPHONY_SPN_NAME);\r
+                               edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", buf);\r
+                       }\r
+\r
+                       if (state & VCONFKEY_TELEPHONY_DISP_PLMN) {\r
+                               buf = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);\r
+                               edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", buf);\r
+                       }\r
+               } else if (service_type == VCONFKEY_TELEPHONY_SVCTYPE_NOSVC) {\r
+                       edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", _S("IDS_COM_BODY_NO_SERVICE"));\r
+               } else if (service_type == VCONFKEY_TELEPHONY_SVCTYPE_EMERGENCY) {\r
+                       edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", _("IDS_LCKSCN_HEADER_EMERGENCY_CALLS_ONLY"));\r
+               } else {\r
+                       if (service_type > VCONFKEY_TELEPHONY_SVCTYPE_SEARCH) {\r
+                               buf = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);\r
+                               edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", buf);\r
+                       }else {\r
+                               edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", _S("IDS_COM_BODY_SEARCHING"));\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+static void _sim_state_changed_cb(keynode_t *node, void *data)\r
+{\r
+       _set_sim_state(data);\r
+}\r
+\r
+static void _register_sim_state_event_handler(void *data)\r
+{\r
+       int ret = 0;\r
+\r
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVCTYPE,\r
+                               _sim_state_changed_cb, data);\r
+       if (ret != 0)\r
+               LOCK_SCREEN_TRACE_ERR("Failed to register [%s]",\r
+                       VCONFKEY_TELEPHONY_SVCTYPE);\r
+\r
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION,\r
+                               _sim_state_changed_cb, data);\r
+       if (ret != 0)\r
+               LOCK_SCREEN_TRACE_ERR("Failed to register [%s]",\r
+                       VCONFKEY_TELEPHONY_SPN_DISP_CONDITION);\r
+\r
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_NAME,\r
+                               _sim_state_changed_cb, data);\r
+       if (ret != 0)\r
+               LOCK_SCREEN_TRACE_ERR("Failed to register [%s]",\r
+                       VCONFKEY_TELEPHONY_SPN_NAME);\r
+\r
+\r
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_NWNAME,\r
+                               _sim_state_changed_cb, data);\r
+       if (ret != 0)\r
+               LOCK_SCREEN_TRACE_ERR("Failed to register [%s]",\r
+                       VCONFKEY_TELEPHONY_NWNAME);\r
+}\r
+\r
+void set_sim_state(void *data)\r
+{\r
+       _set_sim_state(data);\r
+       _register_sim_state_event_handler(data);\r
+}\r
+\r
+void fini_sim_state(void *data)\r
+{\r
+       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVCTYPE, _sim_state_changed_cb);\r
+\r
+       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, _sim_state_changed_cb);\r
+\r
+       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_NAME, _sim_state_changed_cb);\r
+\r
+       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NWNAME, _sim_state_changed_cb);\r
+}\r
diff --git a/src/sim-state.h b/src/sim-state.h
new file mode 100755 (executable)
index 0000000..c2b6c26
--- /dev/null
@@ -0,0 +1,23 @@
+/*\r
+ * Copyright 2012  Samsung Electronics Co., Ltd\r
+ *\r
+ * Licensed under the Flora License, Version 1.0 (the License);\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *  http://floralicense.org/license/\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an AS IS BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+#ifndef __SIM_STATE_H__\r
+#define __SIM_STATE_H__\r
+\r
+void set_sim_state(void *data);\r
+void fini_sim_state(void *data);\r
+\r
+#endif\r
index 6c33e4c..1df7a2e 100755 (executable)
@@ -24,6 +24,7 @@
 #include <heynoti.h>
 
 #include "util.h"
+#include "sim-state.h"
 #include "info.h"
 #include "bg.h"
 #include "noti.h"
@@ -90,7 +91,14 @@ Evas_Object *_make_top_layout(struct appdata *ad)
        if(conform == NULL) {
                return NULL;
        }
+
+#if 0
        elm_object_style_set(conform, "indicator_overlap");
+#else
+       elm_object_signal_emit(conform, "elm,state,virtualkeypad,disable", "");
+       elm_object_signal_emit(conform, "elm,state,indicator,overlap", "");
+       elm_object_signal_emit(conform, "elm,state,clipboard,disable", "");
+#endif
 
        eo = _add_layout(conform, EDJEFILE, "lock-main");
        if (eo == NULL)
@@ -183,51 +191,6 @@ void lockscreen_info_hide(struct appdata *ad)
        }
 }
 
-static void _set_sim_state(void *data)
-{
-       struct appdata *ad = data;
-       if (ad == NULL)
-               return;
-
-       int state = 0;
-       int ret = 0;
-       char *buf = NULL;
-
-       int service_type = VCONFKEY_TELEPHONY_SVCTYPE_SEARCH;
-
-       if(vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &service_type) != 0) {
-               LOGD("fail to get VCONFKEY_TELEPHONY_SVCTYPE");
-       }
-
-       ret = (vconf_get_int(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, &state));
-       if (ret == 0) {
-               LOGD("[%s:%d] VCONFKEY(%s) = %d", __func__, __LINE__, VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, state);
-               if (state != VCONFKEY_TELEPHONY_DISP_INVALID
-                       && service_type > VCONFKEY_TELEPHONY_SVCTYPE_SEARCH) {
-                       if (state & VCONFKEY_TELEPHONY_DISP_SPN) {
-                               buf = vconf_get_str(VCONFKEY_TELEPHONY_SPN_NAME);
-                               edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", buf);
-                       }
-
-                       if (state & VCONFKEY_TELEPHONY_DISP_PLMN) {
-                               buf = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
-                               edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", buf);
-                       }
-               } else if (service_type == VCONFKEY_TELEPHONY_SVCTYPE_NOSVC) {
-                       edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", _S("IDS_COM_BODY_NO_SERVICE"));
-               } else if (service_type == VCONFKEY_TELEPHONY_SVCTYPE_EMERGENCY) {
-                       edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", _("IDS_LCKSCN_HEADER_EMERGENCY_CALLS_ONLY"));
-               } else {
-                       if (service_type > VCONFKEY_TELEPHONY_SVCTYPE_SEARCH) {
-                               buf = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
-                               edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", buf);
-                       }else {
-                               edje_object_part_text_set(_EDJ(ad->ly_main), "sim.state", _S("IDS_COM_BODY_SEARCHING"));
-                       }
-               }
-       }
-}
-
 static void _app_exit(void *data, Evas_Object *obj, const char *emission, const char *source)
 {
        struct appdata *ad = data;
@@ -316,7 +279,7 @@ static Eina_Bool _init_widget_cb(void *data)
                        &ad->slider_rel2.x, &ad->slider_rel2.y, &ad->slider_rel2.w,
                        &ad->slider_rel2.h);
 
-       _set_sim_state(ad);
+       set_sim_state(ad);
 
        ad->info = elm_layout_add(ad->win);
        elm_layout_file_set(ad->info, EDJEFILE, "lock-info");
@@ -413,6 +376,7 @@ int _app_terminate(struct appdata *ad)
        }
 
        vconf_ignore_key_changed(VCONFKEY_PM_STATE, _pm_state_cb);
+       fini_sim_state(ad);
        _fini_heynoti(ad);
 
        LOGD("[%s] app termiante", __func__);
index 5aba7ed..439bda3 100755 (executable)
@@ -31,4 +31,5 @@ void launch_emgcall(struct appdata *ad);
 int _app_create(struct appdata *ad);
 int _app_reset(struct appdata *ad);
 int _app_terminate(struct appdata *ad);
+
 #endif