creating ug for plugin model
[apps/core/preloaded/settings.git] / src / setting-main.c
index 6714bcd..a3484bd 100755 (executable)
 #include <ail.h>
 #include <time.h>
 #include <setting-main.h>
-#include <setting-plugin.h>
 #include <wifi.h>
+#include <tethering.h>
 #include <bluetooth.h>
 #include <nfc.h>
 
+#include <setting-plugin.h>
+
 #define PLUGIN_PREFIX "/opt"
 
 typedef struct _DrawAppInfo
@@ -376,9 +378,9 @@ static Setting_GenGroupItem_Data * __wifi_handler(void* data, char* keyStr, char
        int value, err;
        setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
 
-       char* pa_wifi = get_pa_Wi_Fi_on_off_str();
+       //char* pa_wifi = get_pa_Wi_Fi_on_off_str();
        ad->data_wifi = setting_create_Gendial_field_groupitem(genlist,
-                                                  &(ad->itc[GENDIAL_Type_2text_2icon_3]),
+                                                  &(ad->itc[GENDIAL_Type_1text_2icon]),
                                                   NULL,
                                                   setting_main_click_list_ex_ug_cb,
                                                   ug_args,
@@ -387,10 +389,12 @@ static Setting_GenGroupItem_Data * __wifi_handler(void* data, char* keyStr, char
                                                   NULL,
                                                   value,
                                                   keyStr,
-                                                  pa_wifi,
+                                                  NULL,
                                                   setting_main_click_list_wifi_mode_cb);
        __BACK_POINTER_SET(ad->data_wifi);
-       G_FREE(pa_wifi);
+       if(ad->data_wifi)
+               ad->data_wifi->userdata = ad;
+       //G_FREE(pa_wifi);
 
        return ad->data_wifi;
 }
@@ -402,7 +406,7 @@ static Setting_GenGroupItem_Data * __bluetooth_handler(void* data, char* keyStr,
        setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
 
        ad->data_bt = setting_create_Gendial_field_groupitem(genlist,
-                                                  &(ad->itc[GENDIAL_Type_2text_2icon_3]),
+                                                  &(ad->itc[GENDIAL_Type_1text_2icon]),
                                                   NULL,
                                                   setting_main_click_list_ex_ug_cb,
                                                   ug_args,
@@ -411,10 +415,11 @@ static Setting_GenGroupItem_Data * __bluetooth_handler(void* data, char* keyStr,
                                                   NULL,
                                                   value,
                                                   keyStr,
-                                                  get_BT_on_off_str
-                                                  (),
+                                                  NULL,
                                                   setting_main_click_list_bt_mode_cb);
        __BACK_POINTER_SET(ad->data_bt);
+       if(ad->data_bt)
+               ad->data_bt->userdata = ad;
 
        return ad->data_bt;
 }
@@ -464,7 +469,7 @@ static Setting_GenGroupItem_Data * __nfc_handler(void* data, char* keyStr, char*
        setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
 
        ad->data_nfc = setting_create_Gendial_field_groupitem(genlist,
-                                                  &(ad->itc[GENDIAL_Type_2text_2icon_3]),
+                                                  &(ad->itc[GENDIAL_Type_1text_2icon]),
                                                   NULL,
                                                   setting_main_click_list_ex_ug_cb,
                                                   ug_args,
@@ -473,9 +478,11 @@ static Setting_GenGroupItem_Data * __nfc_handler(void* data, char* keyStr, char*
                                                   NULL,
                                                   value,
                                                   keyStr,
-                                                  get_NFC_on_off_str(),
+                                                  NULL,
                                                   setting_main_click_list_nfc_mode_cb);
        __BACK_POINTER_SET(ad->data_nfc);
+       if(ad->data_nfc)
+               ad->data_nfc->userdata = ad;
 
 #if DISABLED_CODE
        setting_create_Gendial_field_def(genlist, &itc_multiline_text, NULL,
@@ -1703,6 +1710,10 @@ static void setting_main_tapi_event_cb(TapiHandle *handle, int result, void *dat
                break;
        default:
                /* do nothing */
+               SETTING_TRACE_DEBUG("default");
+               if(ad->data_flight)
+                       setting_set_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE,
+                                        ad->data_flight->chk_status, &err);
                break;
        }
        return;
@@ -1829,13 +1840,6 @@ static int setting_main_destroy(void *cb)
                ad->flight_popup = NULL;
        }
 
-#if 0
-       if (ad->plugin_node)
-       {
-               setting_plugin_destroy(ad->plugin_node);
-       }
-#endif
-
        evas_object_smart_callback_del(ad->main_genlist, "realized", __gl_realized);
 
        setting_dbus_handler_fini();
@@ -2199,19 +2203,17 @@ setting_main_click_list_plugin_cb(void *data, Evas_Object *obj,
 
        setting_main_appdata *ad = data;
 
-
        ad->plugin_path = strdup(selected_item->sub_desc);
        SETTING_TRACE(" >> SELECTED plugin name : %s \n", ad->plugin_path);
 
-       setting_dbus_handler_init( ad );
+       PluginNode* plugin_node = setting_plugin_create(g_main_ad->navibar_main, g_main_ad->win_main);
+       plugin_node->plugin_path = strdup(selected_item->sub_desc);
+       ad->plugin_node = plugin_node; // the selected plugin name
 
-       #if 1
-       PluginNode* plugin_node = setting_plugin_create(ad);
-       plugin_node->plugin_path = strdup(ad->plugin_path);
-       setting_plugin_load(plugin_node, (const char *)plugin_node->plugin_path);
+       setting_drawer_list_init();
+       setting_dbus_handler_init( ad->plugin_node );
 
-       ad->plugin_node = plugin_node; // the selected plugin name
-       #endif
+       setting_plugin_load(plugin_node, (const char *)plugin_node->plugin_path);
 }
 
 /**
@@ -2337,77 +2339,241 @@ void __alternate_flight_mode(Evas_Object *check)
        SETTING_TRACE_END;
 }
 
-void __alternate_wifi_mode(Evas_Object *check)
+static void __tethering_disabled_cb(tethering_error_e error, tethering_type_e type, tethering_disabled_cause_e code, void *data)
 {
-       SETTING_TRACE_BEGIN;
        int ret;
-       Eina_Bool status =  elm_check_state_get(check);
-       SETTING_TRACE("wifi mode status : %d", status);
+
+       if (data) {
+               tethering_h th = (tethering_h)data;
+               tethering_destroy(th);
+       }
 
        ret = wifi_initialize();
        setting_retm_if(ret < 0, "*** [ERR] wifi_initialize() ***");
 
-
-       if (status) {
-               ret = wifi_activate(NULL, NULL);
-               setting_retm_if(ret < 0,
-                               "*** [ERR] wifi_activate() ***");
-       } else {
-               ret = wifi_deactivate(NULL, NULL);
-               setting_retm_if(ret < 0,
-                               "*** [ERR] wifi_deactivate() ***");
+       ret = wifi_activate(NULL, NULL);
+       if (ret < 0) {
+               wifi_deinitialize();
        }
+       setting_retm_if(ret < 0, "*** [ERR] wifi_activate() ***");
+
        ret = wifi_deinitialize();
        setting_retm_if(ret < 0, "*** [ERR] wifi_deinitialize() ***");
+}
+
+static void __tethering_turn_off_resp_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       setting_retm_if(NULL == obj, "NULL == obj");
+       int response_type = btn_type(obj);
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
+
+       if (g_main_ad)
+       {
+               evas_object_del(g_main_ad->popup);
+               g_main_ad->popup = NULL;
+       }
+
+       if (POPUP_RESPONSE_OK == response_type)
+       {
+               tethering_h th = NULL;
+               tethering_error_e ret = TETHERING_ERROR_NONE;
+
+               ret = tethering_create(&th);
+               if (ret != TETHERING_ERROR_NONE) {
+                       list_item->swallow_type = SWALLOW_Type_1ICON_1RADIO;
+                       list_item->chk_status = EINA_FALSE;
+                       elm_object_item_data_set(list_item->item, list_item);
+                       elm_genlist_item_update(list_item->item);
+               }
+
+               ret = tethering_set_disabled_cb(th, TETHERING_TYPE_WIFI, __tethering_disabled_cb, th);
+               if (ret != TETHERING_ERROR_NONE) {
+                       list_item->swallow_type = SWALLOW_Type_1ICON_1RADIO;
+                       list_item->chk_status = EINA_FALSE;
+                       elm_object_item_data_set(list_item->item, list_item);
+                       elm_genlist_item_update(list_item->item);
+
+                       tethering_destroy(th);
+                       return;
+               }
+
+               tethering_disable(th, TETHERING_TYPE_WIFI);
+       }
+       else if (POPUP_RESPONSE_CANCEL == response_type)
+       {
+               list_item->swallow_type = SWALLOW_Type_1ICON_1RADIO;
+               list_item->chk_status = EINA_FALSE;
+               elm_object_item_data_set(list_item->item, list_item);
+               elm_genlist_item_update(list_item->item);
+       }
+}
 
+void __alternate_wifi_mode(Setting_GenGroupItem_Data *list_item, Evas_Object *check)
+{
+       SETTING_TRACE_BEGIN;
+       int ret;
+       Eina_Bool status =  elm_check_state_get(check);
+       SETTING_TRACE("wifi mode status : %d", status);
+
+       int value, err;
+
+       if (tethering_is_enabled(NULL, TETHERING_TYPE_WIFI) == TRUE) {
+               list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
+               elm_object_item_data_set(list_item->item, list_item);
+               elm_genlist_item_update(list_item->item);
+
+               g_main_ad->popup = setting_create_popup_with_btn(list_item,
+                               g_main_ad->win_main, NULL,
+                               _("Connecting Wi-Fi will turn off Mobile hotspot. Continue?"),
+                               __tethering_turn_off_resp_cb,
+                               0, 2, _("IDS_COM_SK_OK"), _("IDS_COM_SK_CANCEL"));
+       } else {
+               ret = wifi_initialize();
+               if (ret < 0) {
+                       setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
+                       list_item->chk_status = value;
+                       elm_object_item_data_set(list_item->item, list_item);
+                       elm_genlist_item_update(list_item->item);
+               }
+               setting_retm_if(ret < 0, "*** [ERR] wifi_initialize() ***");
+
+               if (status) {
+                       ret = wifi_activate(NULL, NULL);
+                       if (ret < 0) {
+                               setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
+                               list_item->chk_status = value;
+                               elm_object_item_data_set(list_item->item, list_item);
+                               elm_genlist_item_update(list_item->item);
+                               wifi_deinitialize();
+                       }
+                       setting_retm_if(ret < 0, "*** [ERR] wifi_activate() ***");
+               } else {
+                       ret = wifi_deactivate(NULL, NULL);
+                       if (ret < 0) {
+                               setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
+                               list_item->chk_status = value;
+                               elm_object_item_data_set(list_item->item, list_item);
+                               elm_genlist_item_update(list_item->item);
+                               wifi_deinitialize();
+                       }
+                       setting_retm_if(ret < 0, "*** [ERR] wifi_deactivate() ***");
+               }
+
+               ret = wifi_deinitialize();
+               if (ret < 0) {
+                       setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
+                       list_item->chk_status = value;
+                       elm_object_item_data_set(list_item->item, list_item);
+                       elm_genlist_item_update(list_item->item);
+               }
+               setting_retm_if(ret < 0, "*** [ERR] wifi_deinitialize() ***");
+
+               list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
+               elm_object_item_data_set(list_item->item, list_item);
+               elm_genlist_item_update(list_item->item);
+
+       }
        SETTING_TRACE_END;
 }
 
-void __alternate_bt_mode(Evas_Object *check)
+void __alternate_bt_mode(Setting_GenGroupItem_Data *list_item, Evas_Object *check)
 {
        SETTING_TRACE_BEGIN;
        int ret;
        Eina_Bool status =  elm_check_state_get(check);
        SETTING_TRACE("bt mode status : %d", status);
 
+       int value, err;
+
        ret = bt_initialize();
+       if (ret < 0) {
+               setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
+               list_item->chk_status = value;
+               elm_object_item_data_set(list_item->item, list_item);
+               elm_genlist_item_update(list_item->item);
+       }
        setting_retm_if(ret < 0, "*** [ERR] bt_initialize() ***");
 
 
        if (status) {
                ret = bt_adapter_enable();
-               setting_retm_if(ret < 0,
-                               "*** [ERR] bt_adapter_enable() ***");
+               if (ret < 0) {
+                       setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
+                       list_item->chk_status = value;
+                       elm_object_item_data_set(list_item->item, list_item);
+                       elm_genlist_item_update(list_item->item);
+                       bt_deinitialize();
+               }
+               setting_retm_if(ret < 0, "*** [ERR] bt_adapter_enable() ***");
        } else {
                ret = bt_adapter_disable();
-               setting_retm_if(ret < 0,
-                               "*** [ERR] bt_adapter_disable() ***");
+               if (ret < 0) {
+                       setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
+                       list_item->chk_status = value;
+                       elm_object_item_data_set(list_item->item, list_item);
+                       elm_genlist_item_update(list_item->item);
+                       bt_deinitialize();
+               }
+               setting_retm_if(ret < 0, "*** [ERR] bt_adapter_disable() ***");
        }
 
        ret = bt_deinitialize();
+       if (ret < 0) {
+               setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
+               list_item->chk_status = value;
+               elm_object_item_data_set(list_item->item, list_item);
+               elm_genlist_item_update(list_item->item);
+       }
        setting_retm_if(ret < 0, "*** [ERR] bt_deinitialize() ***");
 
+       list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
+       elm_object_item_data_set(list_item->item, list_item);
+       elm_genlist_item_update(list_item->item);
+
        SETTING_TRACE_END;
 }
 
-void __alternate_nfc_mode(Evas_Object *check)
+void __alternate_nfc_mode(Setting_GenGroupItem_Data *list_item, Evas_Object *check)
 {
        SETTING_TRACE_BEGIN;
        int ret;
        Eina_Bool status =  elm_check_state_get(check);
        SETTING_TRACE("nfc mode status : %d", status);
 
+       int value, err;
+
        ret = nfc_manager_initialize(NULL, NULL);
+       if (ret < 0) {
+               setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
+               list_item->chk_status = value;
+               elm_object_item_data_set(list_item->item, list_item);
+               elm_genlist_item_update(list_item->item);
+       }
        setting_retm_if(ret < 0, "*** [ERR] nfc_manager_initialize() ***");
 
-
        ret = nfc_manager_set_activation(status, NULL, NULL);
-       setting_retm_if(ret < 0,
-                       "*** [ERR] nfc_manager_set_activation() ***");
+       if (ret < 0) {
+               setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
+               list_item->chk_status = value;
+               elm_object_item_data_set(list_item->item, list_item);
+               elm_genlist_item_update(list_item->item);
+               nfc_manager_deinitialize();
+       }
+       setting_retm_if(ret < 0, "*** [ERR] nfc_manager_set_activation() ***");
 
        ret = nfc_manager_deinitialize();
+       if (ret < 0) {
+               setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
+               list_item->chk_status = value;
+               elm_object_item_data_set(list_item->item, list_item);
+               elm_genlist_item_update(list_item->item);
+       }
        setting_retm_if(ret < 0, "*** [ERR] nfc_manager_deinitialize() ***");
 
+       list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
+       elm_object_item_data_set(list_item->item, list_item);
+       elm_genlist_item_update(list_item->item);
+
        SETTING_TRACE_END;
 }
 
@@ -2543,7 +2709,7 @@ setting_main_click_list_wifi_mode_cb(void *data, Evas_Object *obj,
        SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
                      list_item->chk_status);
 
-       __alternate_wifi_mode(obj);
+       __alternate_wifi_mode(list_item, obj);
        SETTING_TRACE_END;
 }
 
@@ -2562,7 +2728,7 @@ setting_main_click_list_bt_mode_cb(void *data, Evas_Object *obj,
        SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
                      list_item->chk_status);
 
-       __alternate_bt_mode(obj);
+       __alternate_bt_mode(list_item, obj);
        SETTING_TRACE_END;
 }
 
@@ -2581,7 +2747,7 @@ setting_main_click_list_nfc_mode_cb(void *data, Evas_Object *obj,
        SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
                      list_item->chk_status);
 
-       __alternate_nfc_mode(obj);
+       __alternate_nfc_mode(list_item, obj);
        SETTING_TRACE_END;
 }