tizen 2.3 release
[apps/home/settings.git] / setting-security / src / setting-security-main.c
index 510e9c0..c410df2 100755 (executable)
@@ -1,18 +1,22 @@
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.1 (the License);
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (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/
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
+ * 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 <setting-common-data-type.h>
@@ -23,6 +27,9 @@
 #include <setting-security-main.h>
 #include <setting-debug.h>
 #include <app.h>
+#if SUPPORT_ENCRYPTION
+#include <ode.h>
+#endif
 
 static int setting_security_main_create(void *cb);
 static int setting_security_main_destroy(void *cb);
@@ -36,48 +43,24 @@ setting_view setting_view_security_main = {
        .cleanup = setting_security_main_cleanup,
 };
 
-static void setting_security_main_click_softkey_back_cb(void *data,
-                                                       Evas_Object *obj,
-                                                       void *event_info);
-#if DISABLED_CODE
-static void setting_security_main_chk_btn_cb(void *data, Evas_Object *obj,
-                                               void *event_info);
-#endif
+static Eina_Bool setting_security_main_click_softkey_back_cb(void *data, Elm_Object_Item *it);
 static void setting_security_main_mouse_up_Gendial_list_cb(void *data,
                                                        Evas_Object *obj,
                                                        void *event_info);
-#if DISABLED_CODE
-static void setting_security_main_update_view(void *data, char *keyStr);
-static void setting_security_main_create_timer(void *data);
-static Eina_Bool setting_security_main_timer_update_cb(void *data);
-#endif
 
-static void setting_security_main_check_vconf_value(void *data);
+static Eina_Bool setting_security_engine_list_timer_cb(void *data);
+//static void __security_exp_cb(void *data, Evas_Object *obj, void *event_info);
+void __security_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info);
 
+#define SECURITY_ENGINE_NAME_MAX_LEN 128
 
+#define SUPPORT_LOCKTYPE_IN_SECURITY_MENU 0
 /* ***************************************************
  **
  **basic func
  **
  ****************************************************/
 
-char *get_pa_screen_lock_type_str()
-{
-       int lock_type = 0;
-
-       vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &lock_type);
-
-       switch(lock_type)
-       {
-               case SETTING_SCREEN_LOCK_TYPE_SWIPE:
-                       return setting_gettext("IDS_ST_MBODY_SWIPE");
-               case SETTING_SCREEN_LOCK_TYPE_OTHER:
-                       return vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
-               default:
-                       return NULL;
-       }
-}
-
 static int setting_security_main_create(void *cb)
 {
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
@@ -100,46 +83,87 @@ static int setting_security_main_create(void *cb)
        ad->ly_main =
            setting_create_layout_navi_bar_genlist(ad->win_main_layout,
                                                   ad->win_get,
-                                                  _("IDS_ST_BODY_SECURITY"),
+                                                  "IDS_ST_BODY_SECURITY",
                                                   setBtnStr, NULL,
-                                                  setting_security_main_click_softkey_back_cb,
+                                                  (setting_call_back_func)setting_security_main_click_softkey_back_cb,
                                                   NULL, ad, &scroller,
                                                   &ad->navi_bar);
 
-       Elm_Object_Item *item = NULL;
+       //setting_enable_expandable_genlist(scroller, ad, __security_exp_cb, NULL);
 
-       //item_data->sub_desc = (char *)g_strdup(sub_desc);
-       /* Screen lock type */
-       ad->data_screen_lock_type = setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
-                                                               setting_security_main_mouse_up_Gendial_list_cb,ad,
-                                                               SWALLOW_Type_INVALID,
-                                                               NULL, NULL,
-                                                               0, Keystr_ScreenLockType, get_pa_screen_lock_type_str(ad), NULL);
-       if(ad->data_screen_lock_type)
-               ad->data_screen_lock_type->userdata = ad;
+       Elm_Object_Item *item = NULL;
 
+       ADD_GL_SEPARATOR(scroller);
+       (void)setting_create_Gendial_field_titleItem(scroller,
+                                                    &itc_group_item,
+                                                    "IDS_ST_BODY_PHONE_SECURITY", NULL);
        /* SIM settings */
-       if(ad->handle && !isEmulBin())
-       {
-               /* check status of sim and tapi */
-               ret = setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
-               tapi_ret = tel_check_modem_power_status(ad->handle, &b_status);
-
-               if ((tapi_ret == TAPI_API_SUCCESS) && (b_status == TAPI_PHONE_POWER_STATUS_ON) && (value == VCONFKEY_TELEPHONY_SIM_INSERTED))
-               {
-                       /* separator */
-                       item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-                       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
 
-                       setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
+       ad->data_sim_settings = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
                                                                setting_security_main_mouse_up_Gendial_list_cb,ad,
                                                                SWALLOW_Type_INVALID,
                                                                NULL, NULL,
-                                                               0,"IDS_ST_BODY_SIM_CARD_SETTINGS", NULL, NULL);
+                                                               0,SECURITY_SIM_SETTINGS, NULL, NULL);
+
+       //Seperator
+       elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
+                                ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       /*Security update*/
+       app_info_h app_info = NULL;
+       /* replace deprecated API :
+                                       from app_manager_get_app_info()
+                                       to app_info_create()                    */
+       ret = app_info_create("org.tizen.msa", &app_info);
+       if (ret != APP_MANAGER_ERROR_NONE) {
+               SETTING_TRACE("No corresponding app_id for [%s]\n", "org.tizen.msa");
+       }
+       else {
+               item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               ad->data_security_update = setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
+                                                               setting_security_main_mouse_up_Gendial_list_cb, ad,
+                                                               SWALLOW_Type_INVALID,
+                                                               NULL, NULL,
+                                                               value,_(SECURITY_UPDATE_TEXT), NULL, NULL);
+
+               if (app_info_destroy(app_info) != 0) {
+                       SETTING_TRACE_ERROR("app_info_destroy error for org.tizen.msa");
                }
        }
+       ADD_GL_SEPARATOR(scroller);
 
        /* update info */
+       if(ad->data_sim_settings)
+       {
+               if((ad->handle == NULL) || (isEmulBin() == TRUE))
+               {
+                       setting_disable_genlist_item(ad->data_sim_settings->item);
+               }
+               else
+               {
+                       ret = setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
+                       tapi_ret = tel_check_modem_power_status(ad->handle, &b_status);
+                       if((tapi_ret != TAPI_API_SUCCESS)
+                               || (b_status != TAPI_PHONE_POWER_STATUS_ON)
+                               || (value != VCONFKEY_TELEPHONY_SIM_INSERTED))
+                       {
+                               setting_disable_genlist_item(ad->data_sim_settings->item);
+                       }
+                       TelSimCardType_t cardInfo;
+                       tapi_ret = tel_get_sim_type(ad->handle, &cardInfo);
+                       if(tapi_ret == TAPI_API_SIM_PERM_BLOCKED)
+                               setting_disable_genlist_item(ad->data_sim_settings->item);
+               }
+
+               /* If flight mode is ON, can't use sim settings menu */
+               int status = 0;
+               vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &status);
+               if(status == 1)
+                       setting_disable_genlist_item(ad->data_sim_settings->item);
+       }
 
        setting_view_security_main.is_create = 1;
 
@@ -147,6 +171,11 @@ static int setting_security_main_create(void *cb)
        retv_if(!g_ad, -1);
        memcpy(g_ad, ad, sizeof(SettingSecurityUG));
 
+       vconf_notify_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE,
+                               setting_security_main_vconf_change_cb, ad);
+       vconf_notify_key_changed(VCONFKEY_WIFI_STATE,
+                               setting_security_main_vconf_change_cb, ad);
+
        SETTING_TRACE_END;
        return SETTING_RETURN_SUCCESS;
 }
@@ -158,19 +187,46 @@ static int setting_security_main_destroy(void *cb)
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingSecurityUG *ad = (SettingSecurityUG *) cb;
-
-       if (ad->update_view_timer) {
+#if SUPPORT_ENCRYPTION
+       if(ad->popup_sd_card_encryption)
+       {
+               evas_object_del(ad->popup_sd_card_encryption);
+               ad->popup_sd_card_encryption = NULL;
+       }
+#endif
+       if(ad->update_view_timer)
+       {
                ecore_timer_del(ad->update_view_timer);
                ad->update_view_timer = NULL;
        }
+       if(ad->get_security_list_timer)
+       {
+               ecore_timer_del(ad->get_security_list_timer);
+               ad->get_security_list_timer = NULL;
+       }
+       if(ad->remove_sim_popup_timer)
+       {
+               ecore_timer_del(ad->remove_sim_popup_timer);
+               ad->remove_sim_popup_timer = NULL;
+       }
+       if(ad->tapi_async_cb_check_timer)
+       {
+               ecore_timer_del(ad->tapi_async_cb_check_timer);
+               ad->tapi_async_cb_check_timer = NULL;
+       }
 
+       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE,
+                                setting_security_main_vconf_change_cb);
+       vconf_ignore_key_changed(VCONFKEY_WIFI_STATE,
+                                setting_security_main_vconf_change_cb);
+       if(ad->secrity_engine_list) {
+               g_list_free(ad->secrity_engine_list);
+       }
        if (ad->ly_main != NULL) {
                evas_object_del(ad->ly_main);
 
                FREE(g_ad);
        }
-       if(ad->input_pwd)
-               FREE(ad->input_pwd);
 
        setting_view_security_main.is_create = 0;
 
@@ -182,15 +238,9 @@ static int setting_security_main_update(void *cb)
        SETTING_TRACE_BEGIN;
        /* error check */
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-
        SettingSecurityUG *ad = (SettingSecurityUG *) cb;
-       evas_object_show(ad->ly_main);
 
-       if (ad->data_screen_lock_type ) {
-               G_FREE(ad->data_screen_lock_type->sub_desc);
-               ad->data_screen_lock_type->sub_desc = (char *)g_strdup(get_pa_screen_lock_type_str(ad));
-               elm_genlist_item_update(ad->data_screen_lock_type->item);
-       }
+       evas_object_show(ad->ly_main);
 
        return SETTING_RETURN_SUCCESS;
 }
@@ -209,18 +259,29 @@ static int setting_security_main_cleanup(void *cb)
  **call back func
  **
  ****************************************************/
-static void
-setting_security_main_click_softkey_back_cb(void *data, Evas_Object *obj,
-                                           void *event_info)
+static Eina_Bool
+setting_security_main_click_softkey_back_cb(void *data, Elm_Object_Item *it)
 {
        SETTING_TRACE_BEGIN;
        /* error check */
-       retm_if(data == NULL, "[Setting > Security] Data parameter is NULL");
+       retvm_if(data == NULL, EINA_FALSE, "[Setting > Security] Data parameter is NULL");
 
        SettingSecurityUG *ad = (SettingSecurityUG *) data;
 
+       bool is_running = 0;
+       app_manager_is_running("gr47by21a5.SamsungAccount", &is_running);
+       if(is_running && ad->samsung_account_is_running)        // If samsung account is running from Find my mobile, security ug can't be destroyed.
+       {
+               return EINA_FALSE;
+       }
+       if(ad->ug_mt)   // If find my mobile ug is running, security ug can't be destroyed.
+       {
+               return EINA_FALSE;
+       }
+
        /* Send destroy request */
        ug_destroy_me(ad->ug);
+       return EINA_TRUE;
 }
 
 int _handle_sim_exception(void *data, int sim_status)
@@ -236,7 +297,7 @@ int _handle_sim_exception(void *data, int sim_status)
                case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
 
                        setting_create_simple_popup(NULL, ad->win_get,
-                                                   NULL, _("IDS_ST_SECURITY_BODY_NOIMSI"));
+                                                   NULL, _(SECURITY_SIM_NOT_PRESENT_MSG));
                        SETTING_TRACE_DEBUG
                            ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
                             SETTING_FONT_RED, sim_status, SETTING_FONT_BLACK);
@@ -261,6 +322,41 @@ int _handle_sim_exception(void *data, int sim_status)
        return SETTING_RETURN_SUCCESS;
 }
 
+static Eina_Bool __remove_sim_popup_cb(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(data == NULL, EINA_FALSE);
+       SettingSecurityUG *ad = (SettingSecurityUG *)data;
+
+       if(ad->sim_popup)
+       {
+               evas_object_del(ad->sim_popup);
+               ad->sim_popup = NULL;
+       }
+       ad->remove_sim_popup_timer = NULL;
+       return EINA_FALSE;
+}
+
+static Eina_Bool _check_tapi_async_cb_is_called(void *data)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(data == NULL, EINA_FALSE);
+
+       SettingSecurityUG *ad = (SettingSecurityUG *)data;
+
+       if(!ad->enter_tapi_async_cb_flag)
+       {
+               ad->sim_popup = setting_create_popup_without_btn(ad, ad->win_get,
+                                                                               NULL, _(KeyStr_Security_Waiting_Sim),
+                                                                               (setting_call_back_func)__remove_sim_popup_cb,
+                                                                               0, FALSE, FALSE);
+               ad->remove_sim_popup_timer = ecore_timer_add(1, __remove_sim_popup_cb, ad);
+       }
+       ad->tapi_async_cb_check_timer = NULL;
+
+       return EINA_FALSE;
+}
+
 static void
 setting_security_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
                                               void *event_info)
@@ -279,10 +375,29 @@ setting_security_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
 
        SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
 
-       if(!safeStrCmp("IDS_ST_BODY_SIM_CARD_SETTINGS", list_item->keyStr)) {
-               setting_view_change(&setting_view_security_main, &setting_view_security_sim_settings, ad);      
+       if(!safeStrCmp(SECURITY_SIM_SETTINGS, list_item->keyStr)) {
+               ad->enter_tapi_async_cb_flag = 0;
+               ad->sim_popup = NULL;
+               ad->tapi_async_cb_check_timer = ecore_timer_add(0.5, _check_tapi_async_cb_is_called, ad);
+
+               if (TAPI_API_SUCCESS != tel_get_sim_facility(ad->handle, TAPI_SIM_LOCK_SC, setting_security_pin_get_facility_cb, ad)) {
+                       SETTING_TRACE_ERROR("*** [ERR] tel_get_sim_facility(pin1). ***");
+               }
+
+               if(tel_get_sim_lock_info(ad->handle, TAPI_SIM_LOCK_FD, setting_security_pin2_get_lock_info_cb, ad) != 0)
+               {
+                       SETTING_TRACE_ERROR("failed to call tel_get_sim_lock_info()");
+               }
        }
-       else if(!safeStrCmp(Keystr_ScreenLockType, list_item->keyStr)) {
-               setting_view_change(&setting_view_security_main, &setting_view_security_locktype, ad);
+       else if(!safeStrCmp(_(SECURITY_UPDATE_TEXT), list_item->keyStr))
+       {
+               setting_view_change(&setting_view_security_main, &setting_view_security_update, ad);
        }
 }
+
+void setting_security_main_vconf_change_cb(keynode_t *key, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       //ret_if(NULL == data);
+       //SettingSecurityUG *ad = (SettingSecurityUG *) data;
+}