modules/connection: refactor tapi into telephony. 02/58902/11
authorLukasz Stanislawski <l.stanislaws@samsung.com>
Thu, 4 Feb 2016 14:51:58 +0000 (15:51 +0100)
committerLukasz Stanislawski <l.stanislaws@samsung.com>
Wed, 10 Feb 2016 14:43:56 +0000 (15:43 +0100)
Change Tapi related API into telephony API. Remove some cross dependencies
between indicator modules.
Vconf VCONF_PACKET_STATE wasn't changed due to lack in telephony/system settings API.

Change-Id: Ic931ec5df060f58457e8368c3c088f5de029427d
Signed-off-by: Lukasz Stanislawski <l.stanislaws@samsung.com>
inc/util.h
src/modules/connection/connection.c
src/modules/connection/wifi.c
src/modules/network/rssi.c
src/util.c
tizen-manifest.xml

index 063cc59..27d79e9 100644 (file)
@@ -22,7 +22,7 @@
 #ifndef __INDICATOR_UTIL_H__
 #define __INDICATOR_UTIL_H__
 #include <Ecore.h>
-//#include <Ecore_X.h>
+#include <wifi.h>
 
 typedef enum {
        INDICATOR_ERROR_NONE = 0,
@@ -112,4 +112,20 @@ const char *util_get_file_path(enum app_subdir dir, const char *relative);
 #define util_get_external_cache_file_path(x) util_get_file_path(APP_DIR_EXTERNAL_CACHE, (x))
 #define util_get_external_shared_data_file_path(x) util_get_file_path(APP_DIR_EXTERNAL_SHARED_DATA, (x))
 
+/**
+ * @brief Allows to set multiple callbacks using wifi_set_connection_state_changed_cb API
+ *
+ * @param cb callback
+ * @param data user_data passed to callback function.
+ * @return 0 on success, other value on failure
+ */
+int util_wifi_set_connection_state_changed_cb(wifi_connection_state_changed_cb, void *data);
+
+/**
+ * @brief Unregisters callback set with util_wifi_set_connection_state_changed_cb.
+ *
+ * @param cb callback
+ */
+void util_wifi_unset_connection_state_changed_cb(wifi_connection_state_changed_cb);
+
 #endif /* __INDICATOR_UTIL_H__ */
index d8a28c2..4c83198 100644 (file)
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <tapi_common.h>
-#include <TelNetwork.h>
-#include <TelSim.h>
-#include <ITapiNetwork.h>
-#include <TelCall.h>
-#include <vconf.h>
 #include <wifi.h>
+#include <telephony.h>
+#include <system_settings.h>
+#include <runtime_info.h>
+#include <vconf.h>
 
 #include "common.h"
 #include "indicator.h"
 
 #define ICON_PRIORITY  INDICATOR_PRIORITY_FIXED5
 #define MODULE_NAME            "connection"
-#define TIMER_INTERVAL 0.3
-#define TAPI_HANDLE_MAX  2
 
 static int register_conn_module(void *data);
 static int unregister_conn_module(void);
 static int wake_up_cb(void *data);
+static void __deinit_tel(void);
+
 static int transfer_state = -1;
 int isBTIconShowing = 0;
-extern TapiHandle *tapi_handle[TAPI_HANDLE_MAX+1];
+static telephony_handle_list_s tel_list;
 static int updated_while_lcd_off = 0;
 static int prevIndex = -1;
 
@@ -66,7 +64,7 @@ icon_s conn = {
        .wake_up = wake_up_cb
 };
 
-enum {
+typedef enum {
        LEVEL_MIN = 0,
        LEVEL_2G = LEVEL_MIN,
        LEVEL_EDGE,
@@ -77,10 +75,10 @@ enum {
        LEVEL_LTE,
        LEVEL_4G,
        LEVEL_BT_TETHERING,
-       LEVEL_MAX
-};
+       LEVEL_LAST
+} icon_e;
 
-static const char *icon_path[LEVEL_MAX] = {
+static const char *icon_path[LEVEL_LAST] = {
        [LEVEL_2G] = "Connection/B03_connection_G.png",
        [LEVEL_EDGE] = "Connection/B03_connection_E.png",
        [LEVEL_3G] = "Connection/B03_connection_3G.png",
@@ -186,100 +184,138 @@ static void hide_image_icon(void)
        prevIndex = -1;
 }
 
+static icon_e _icon_level_for_network_type(telephony_network_type_e net_type)
+{
+       switch (net_type) {
+       case TELEPHONY_NETWORK_TYPE_GSM:
+       case TELEPHONY_NETWORK_TYPE_GPRS:
+               return LEVEL_2G;
+       case TELEPHONY_NETWORK_TYPE_EDGE:
+               return LEVEL_EDGE;
+       case TELEPHONY_NETWORK_TYPE_UMTS:
+               return LEVEL_3G;
+       case TELEPHONY_NETWORK_TYPE_HSDPA:
+               return LEVEL_H;
+       case TELEPHONY_NETWORK_TYPE_LTE:
+               return LEVEL_LTE;
+       default:
+               return LEVEL_LAST;
+       }
+}
 
+static icon_e _icon_level_for_ps_network_type(telephony_network_ps_type_e net_type)
+{
+       switch (net_type) {
+       case TELEPHONY_NETWORK_PS_TYPE_HSDPA:
+       case TELEPHONY_NETWORK_PS_TYPE_HSUPA:
+       case TELEPHONY_NETWORK_PS_TYPE_HSPA:
+               return LEVEL_H;
+       case TELEPHONY_NETWORK_PS_TYPE_HSPAP:
+               return LEVEL_H_PLUS;
+       default:
+               return LEVEL_LAST;
+       }
+}
 
-static void _show_proper_icon(int svc_type,int ps_type, void *data)
+static void _view_icon_update_ps_network(telephony_network_ps_type_e ps_type, void *data)
 {
-       retif(data == NULL, , "Invalid parameter!");
+       icon_e icon = _icon_level_for_ps_network_type(ps_type);
+       if (icon != LEVEL_LAST) {
+               show_image_icon(icon);
+               show_connection_transfer_icon(data);
+       }
+       else {
+               hide_image_icon();
+       }
+}
 
-       if (ps_type != TAPI_NETWORK_PS_TYPE_UNKNOWN) {
-               switch (ps_type) {
-               case TAPI_NETWORK_PS_TYPE_HSDPA:
-               case TAPI_NETWORK_PS_TYPE_HSUPA:
-               case TAPI_NETWORK_PS_TYPE_HSPA:
-                       show_image_icon(LEVEL_H);
-                       show_connection_transfer_icon(data);
-                       break;
-               case TAPI_NETWORK_PS_TYPE_HSPAP:
-                       show_image_icon(LEVEL_H_PLUS);
-                       show_connection_transfer_icon(data);
-                       break;
-               default:
-                       hide_image_icon();
-                       break;
-               }
-       } else {
-               switch (svc_type) {
-               case TAPI_NETWORK_SERVICE_TYPE_UNKNOWN:
-               case TAPI_NETWORK_SERVICE_TYPE_NO_SERVICE:
-               case TAPI_NETWORK_SERVICE_TYPE_EMERGENCY:
-               case TAPI_NETWORK_SERVICE_TYPE_SEARCH:
-                       hide_image_icon();
-                       break;
-               case TAPI_NETWORK_SERVICE_TYPE_2G:
-               case TAPI_NETWORK_SERVICE_TYPE_2_5G:
-                       show_image_icon(LEVEL_2G);
-                       show_connection_transfer_icon(data);
-                       break;
-               case TAPI_NETWORK_SERVICE_TYPE_2_5G_EDGE:
-                       show_image_icon(LEVEL_EDGE);
-                       show_connection_transfer_icon(data);
-                       break;
-               case TAPI_NETWORK_SERVICE_TYPE_3G:
-                       show_image_icon(LEVEL_3G);
-                       show_connection_transfer_icon(data);
-                       break;
-               case TAPI_NETWORK_SERVICE_TYPE_HSDPA:
-                       show_image_icon(LEVEL_H_PLUS);
-                       show_connection_transfer_icon(data);
-                       break;
-               case TAPI_NETWORK_SERVICE_TYPE_LTE:
-                       show_image_icon(LEVEL_LTE);
-                       show_connection_transfer_icon(data);
+static void _view_icon_update_network(telephony_network_service_state_e state, telephony_network_type_e network_type, void *data)
+{
+       icon_e icon;
+
+       switch (state) {
+               case TELEPHONY_NETWORK_SERVICE_STATE_IN_SERVICE:
+                       icon = _icon_level_for_network_type(network_type);
+                       if (icon != LEVEL_LAST) {
+                               show_image_icon(icon);
+                               show_connection_transfer_icon(data);
+                       }
+                       else {
+                               hide_image_icon();
+                       }
                        break;
+               case TELEPHONY_NETWORK_SERVICE_STATE_OUT_OF_SERVICE:
+               case TELEPHONY_NETWORK_SERVICE_STATE_EMERGENCY_ONLY:
                default:
                        hide_image_icon();
                        break;
-               }
        }
 }
 
+static void _view_icon_update(telephony_h handle, void *data)
+{
+       telephony_network_ps_type_e ps_type;
+       telephony_network_service_state_e service_state;
+       telephony_network_type_e network_type;
 
+       retif(data == NULL, , "Invalid parameter!");
+
+       int ret = telephony_network_get_ps_type(handle, &ps_type);
+       retm_if(ret != TELEPHONY_ERROR_NONE, "telephony_network_get_ps_type failed %s", get_error_message(ret));
+
+       ret = telephony_network_get_type(handle, &network_type);
+       retm_if(ret != TELEPHONY_ERROR_NONE, "telephony_network_get_type failed %s", get_error_message(ret));
+
+       ret = telephony_network_get_service_state(handle, &service_state);
+       retm_if(ret != TELEPHONY_ERROR_NONE, "telephony_network_get_service_state failed %s", get_error_message(ret));
+
+       if (ps_type != TELEPHONY_NETWORK_PS_TYPE_UNKNOWN) {
+               _view_icon_update_ps_network(ps_type, data);
+       }
+       else {
+               _view_icon_update_network(service_state, network_type, data);
+       }
+}
 
-static void on_noti(TapiHandle *handle_obj, const char *noti_id, void *data, void *user_data)
+static void on_noti(telephony_h handle, const char *noti_id, void *data, void *user_data)
 {
-       DBG("On noti function");
-       TelNetworkDefaultDataSubs_t default_subscription = TAPI_NETWORK_DEFAULT_DATA_SUBS_UNKNOWN;
+       telephony_network_default_data_subs_e default_subscription;
+       wifi_connection_state_e state;
+
        int ret = 0;
-       int val = 0;
-       int ps_type = 0;
-       struct appdata *ad = (struct appdata *)user_data;
+       bool val;
        retif(user_data == NULL, , "invalid parameter!!");
 
-       ret = wifi_get_connection_state(&val);
-       DBG("WIFI Status : %d", val);
-       if (ret == WIFI_ERROR_NONE && val == WIFI_CONNECTION_STATE_CONNECTED) {
+       ret = wifi_get_connection_state(&state);
+       DBG("WIFI Status : %d", state);
+       retm_if(ret != WIFI_ERROR_NONE, "wifi_get_connection_state failed: %s", get_error_message(ret));
+
+       if (state == WIFI_CONNECTION_STATE_CONNECTED) {
                DBG("WIFI connected, so hide connection icon");
                hide_image_icon();
                return;
        }
 
-       ret = vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &val);
-       if (ret == OK && val == TRUE) {
+       ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE, &val);
+       retm_if(ret != SYSTEM_SETTINGS_ERROR_NONE, "system_settings_get_value_bool failed: %s", get_error_message(ret));
+
+       if (val) {
                DBG("FLIGHT MODE ON");
                hide_image_icon();
                return;
        }
 
-       ret = vconf_get_int(VCONFKEY_NETWORK_STATUS, &val);
-       if (ret == OK && val == VCONFKEY_NETWORK_BLUETOOTH) {
+       ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_BLUETOOTH_TETHERING_ENABLED, &val);
+       retm_if(ret != RUNTIME_INFO_ERROR_NONE, "runtime_info_get_value_bool failed: %s", get_error_message(ret));
+
+       if (val) {
                DBG("bluetooth tethering On");
                isBTIconShowing = 1;
                show_image_icon(LEVEL_BT_TETHERING);
                util_signal_emit(conn.ad,"indicator.connection.updown.hide","indicator.prog");
                return;
        }
-       else if (ret == OK && val != VCONFKEY_NETWORK_BLUETOOTH) {
+       else {
                DBG("bluetooth tethering Off");
                if(isBTIconShowing == 1)
                {
@@ -288,474 +324,187 @@ static void on_noti(TapiHandle *handle_obj, const char *noti_id, void *data, voi
                }
        }
 
-       default_subscription = ad->tel_info.prefered_data;
-       if(default_subscription == TAPI_NETWORK_DEFAULT_DATA_SUBS_UNKNOWN)
-       {
-               hide_image_icon();
-       }
-       else if(default_subscription == TAPI_NETWORK_DEFAULT_DATA_SUBS_SIM1)
-       {
-               int ret = 0;
-               ret = vconf_get_int(VCONFKEY_DNET_STATE, &val);
-               if (ret == OK) {
-                       if (val == VCONFKEY_DNET_OFF)
-                       {
-                               DBG("CONNECTION DNET Status: %d", val);
-                               hide_image_icon();
-                               return;
-                       }
-               }
-
-               val = ad->tel_info.network_service_type;
-               ps_type = ad->tel_info.network_ps_type;
-
-               DBG("TAPI_NETWORK_DEFAULT_DATA_SUBS_SIM1 %d",val);
-               DBG("TAPI_NETWORK_DEFAULT_DATA_SUBS_SIM1 %d",ps_type);
-               _show_proper_icon(val,ps_type, user_data);
-       }
-       /* FIXME : remove? */
-#if 0
-       else
-       {
-               int ret = 0;
-//             ret = vconf_get_int(VCONFKEY_DNET_STATE2, &val);
-               if (ret == OK) {
-                       if (val == VCONFKEY_DNET_OFF)
-                       {
-                               DBG("CONNECTION DNET Status: %d", val);
-                               hide_image_icon();
-                               return;
-                       }
-               }
-
-               val = ad->tel_info[1].network_service_type;
-               ps_type = ad->tel_info[1].network_ps_type;
-
-               DBG("TAPI_NETWORK_DEFAULT_DATA_SUBS_SIM2 %d",val);
-               DBG("TAPI_NETWORK_DEFAULT_DATA_SUBS_SIM2 %d",ps_type);
-               _show_proper_icon(val,ps_type, user_data);
-       }
-#endif
-}
-
-
-
-static void indicator_conn_change_cb(keynode_t *node, void *data)
-{
-       struct appdata* ad = NULL;
-       int svc_type = VCONFKEY_TELEPHONY_SVCTYPE_NONE;
-       wifi_connection_state_e status = WIFI_CONNECTION_STATE_FAILURE;
-       int ret = 0;
-       int ps_type = VCONFKEY_TELEPHONY_PSTYPE_NONE;
-
-       ret_if(!data);
-
-       ad = (struct appdata*)data;
-
-       if(icon_get_update_flag()==0)
-       {
-               updated_while_lcd_off = 1;
-               DBG("need to update %d",updated_while_lcd_off);
-               return;
-       }
-       updated_while_lcd_off = 0;
-
-       retif(data == NULL, , "Invalid parameter!");
-
-       /* check wifi status */
-       ret = wifi_get_connection_state(&status);
-       if (ret == WIFI_ERROR_NONE) {
-               INFO("CONNECTION WiFi Status: %d", status);
-
-               if (status == WIFI_CONNECTION_STATE_CONNECTED)
-               {
-                       int mms_state = 0;
-                       vconf_get_int(VCONFKEY_DNET_STATE, &mms_state);
-                       box_update_display(&(ad->win));
-
-                       if(mms_state!=VCONFKEY_DNET_SECURE_CONNECTED)
-                       {
-                               hide_image_icon();
-                               return;
-                       }
-               }
-       }
+       ret = telephony_network_get_default_data_subscription(handle, &default_subscription);
+       retm_if(ret != TELEPHONY_ERROR_NONE, "telephony_network_get_default_data_subscription failed %s", get_error_message(ret));
 
-       /* get dnet status */
-       ret = vconf_get_int(VCONFKEY_DNET_STATE, &status);
-       if (ret == OK) {
-               if (status == VCONFKEY_DNET_OFF)
-               {
-                       DBG("CONNECTION DNET Status: %d", status);
-                       hide_image_icon();
-               }
-               else
-               {
-                       ret = vconf_get_int(VCONFKEY_TELEPHONY_PSTYPE, &ps_type);
-                       if (ret == OK)
-                       {
-                               INFO("Telephony packet service type: %d", ps_type);
-
-                               switch (ps_type)
-                               {
-
-                               case VCONFKEY_TELEPHONY_PSTYPE_HSDPA:
-                               case VCONFKEY_TELEPHONY_PSTYPE_HSUPA:
-                               case VCONFKEY_TELEPHONY_PSTYPE_HSPA:
-                                       if(util_is_orf())
-                                       {
-                                               show_image_icon(LEVEL_3G_PLUS);
-                                       }
-                                       else
-                                       {
-                                               show_image_icon(LEVEL_H);
-                                       }
-                                       show_connection_transfer_icon(data);
-                                       return;
-                               case VCONFKEY_TELEPHONY_PSTYPE_NONE:
-                               default:
-                                       break;
-                               }
-                       }
-
-                       /* check service type */
-                       ret = vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &svc_type);
-                       if (ret == OK) {
-                               switch (svc_type) {
-                               case VCONFKEY_TELEPHONY_SVCTYPE_2G:
-                                       /**< Network 2G. Show to LEVEL_2G icon */
-                               case VCONFKEY_TELEPHONY_SVCTYPE_2_5G:
-                                       /**< Network 2.5G. Show to LEVEL_2G icon  */
-                                       show_image_icon(LEVEL_2G);
-                                       show_connection_transfer_icon(data);
-                                       break;
-                               case VCONFKEY_TELEPHONY_SVCTYPE_2_5G_EDGE:
-                                       /**< Network EDGE */
-                                       show_image_icon(LEVEL_EDGE);
-                                       show_connection_transfer_icon(data);
-                                       break;
-                               case VCONFKEY_TELEPHONY_SVCTYPE_3G:
-                                       /**< Network UMTS */
-                                       show_image_icon(LEVEL_3G);
-                                       show_connection_transfer_icon(data);
-                                       break;
-                               case VCONFKEY_TELEPHONY_SVCTYPE_LTE:
-                                       /**< Network LTE */
-                                       show_image_icon(LEVEL_4G);
-                                       show_connection_transfer_icon(data);
-                                       break;
-
-                               default:
-                                       hide_image_icon();
-                                       break;
-                               }
-
-                               return;
-                       }
-               }
-       }
-
-//     ret = vconf_get_int(VCONFKEY_DNET_STATE2, &status);
-       if (ret == OK) {
-               if (status == VCONFKEY_DNET_OFF)
-               {
-                       DBG("CONNECTION DNET Status: %d", status);
+       switch (default_subscription) {
+               case TELEPHONY_NETWORK_DEFAULT_DATA_SUBS_SIM1:
+                       _view_icon_update(handle, user_data);
+                       break;
+               case TELEPHONY_NETWORK_DEFAULT_DATA_SUBS_SIM2:
+               case TELEPHONY_NETWORK_DEFAULT_DATA_SUBS_UNKNOWN:
+               default:
                        hide_image_icon();
-               }
-               else
-               {
-
-                       ret = vconf_get_int(VCONFKEY_TELEPHONY_PSTYPE, &ps_type);
-                       if (ret == OK)
-                       {
-                               switch (ps_type)
-                               {
-
-                               case VCONFKEY_TELEPHONY_PSTYPE_HSDPA:
-                               case VCONFKEY_TELEPHONY_PSTYPE_HSUPA:
-                                       if(util_is_orf())
-                                       {
-                                               show_image_icon(LEVEL_3G_PLUS);
-                                       }
-                                       else
-                                       {
-                                               show_image_icon(LEVEL_H);
-                                       }
-                                       show_connection_transfer_icon(data);
-                                       return;
-                               case VCONFKEY_TELEPHONY_PSTYPE_HSPA:
-                                       show_image_icon(LEVEL_H_PLUS);
-                                       show_connection_transfer_icon(data);
-                                       return;
-
-                               case VCONFKEY_TELEPHONY_PSTYPE_NONE:
-                               default:
-                                       break;
-                               }
-                       }
-
-                       /* check service type */
-                       ret = vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &svc_type);
-                       if (ret == OK) {
-                               switch (svc_type) {
-                               case VCONFKEY_TELEPHONY_SVCTYPE_2G:
-                                       /**< Network 2G. Show to LEVEL_2G icon */
-                               case VCONFKEY_TELEPHONY_SVCTYPE_2_5G:
-                                       /**< Network 2.5G. Show to LEVEL_2G icon  */
-                                       show_image_icon(LEVEL_2G);
-                                       show_connection_transfer_icon(data);
-                                       break;
-                               case VCONFKEY_TELEPHONY_SVCTYPE_2_5G_EDGE:
-                                       /**< Network EDGE */
-                                       show_image_icon(LEVEL_EDGE);
-                                       show_connection_transfer_icon(data);
-                                       break;
-                               case VCONFKEY_TELEPHONY_SVCTYPE_3G:
-                                       /**< Network UMTS */
-                                       show_image_icon(LEVEL_3G);
-                                       show_connection_transfer_icon(data);
-                                       break;
-                               case VCONFKEY_TELEPHONY_SVCTYPE_LTE:
-                                       /**< Network LTE */
-                                       show_image_icon(LEVEL_4G);
-                                       show_connection_transfer_icon(data);
-                                       break;
-
-                               default:
-                                       hide_image_icon();
-                                       break;
-                               }
-
-                               return;
-                       }
-               }
+                       break;
        }
-       hide_image_icon();
-
-       return;
 }
 
-
-
 static int wake_up_cb(void *data)
 {
        if(updated_while_lcd_off==0)
        {
                return OK;
        }
-       on_noti(tapi_handle[0], NULL, NULL, data);
+       on_noti(tel_list.handle[0], NULL, NULL, data);
        return OK;
 }
 
 
-#if 0
-static void svc_type_callback(keynode_t *node, void *data)
-{
-       int type = 0;
 
-       vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &type);
-       DBG("svc_type_callback %d",type);
-       indicator_conn_change_cb(node,data);
-}
-#endif
 
-
-static void ps_type_callback(keynode_t *node, void *data)
+static void _update_status_ri(runtime_info_key_e key, void *user_data)
 {
-       int type = 0;
-
-       vconf_get_int(VCONFKEY_TELEPHONY_PSTYPE, &type);
-
-       DBG("ps_type_callback %d",type);
-       indicator_conn_change_cb(node,data);
+       on_noti(tel_list.handle[0], NULL, NULL, user_data);
 }
 
-
-
-static void dnet_state_callback(keynode_t *node, void *data)
-{
-       DBG("dnet_state_callback");
-       on_noti(tapi_handle[0], NULL, NULL, data);
-}
-
-
-
-/*static void dnet2_state_callback(keynode_t *node, void *data)
-{
-       DBG("dnet_state_callback");
-       on_noti(tapi_handle[1], NULL, NULL, data);
-}*/
-
-
-
-static void packet_state_callback(keynode_t *node, void *data)
-{
-       DBG("packet_state_callback");
-       on_noti(tapi_handle[0], NULL, NULL, data);
-}
-
-
-
 static void _wifi_status_changed_cb(wifi_connection_state_e state, wifi_ap_h ap, void *user_data)
 {
        int status = 0;
        int ret = 0;
 
        ret = wifi_get_connection_state(&status);
-       if (ret == WIFI_ERROR_NONE)
-       {
+       if (ret == WIFI_ERROR_NONE) {
                INFO("[CB] WIFI Status: %d", status);
-               if(status == WIFI_CONNECTION_STATE_CONNECTED)
-               {
+               if(status == WIFI_CONNECTION_STATE_CONNECTED) {
                        DBG("[CB] WIFI connected, so hide connection icon");
                        hide_image_icon();
                }
-               else
-               {
-                       on_noti(tapi_handle[0], NULL, NULL, user_data);
+               else {
+                       on_noti(tel_list.handle[0], NULL, NULL, user_data);
                }
        }
 }
 
 
 
-static void _flight_mode(keynode_t *key, void *data)
+static void _flight_mode(system_settings_key_e key, void *user_data)
 {
-       on_noti(tapi_handle[0], NULL, NULL, data);
+       on_noti(tel_list.handle[0], NULL, NULL, user_data);
 }
 
 
 
-static void _bt_tethering(keynode_t *key, void *data)
+static void _update_status(telephony_h handle, telephony_noti_e noti_id, void *data, void *user_data)
 {
-       on_noti(tapi_handle[0], NULL, NULL, data);
+       on_noti(tel_list.handle[0], NULL, NULL, data);
 }
 
-
-
-void connection_icon_on_noti(TapiHandle *handle_obj, const char *noti_id, void *data, void *user_data)
-{
-       DBG("");
-       on_noti(handle_obj, NULL, NULL, user_data);
-}
-
-
-
 /* Initialize TAPI */
-static void __init_tel(void *data)
+static int __init_tel(void *data)
 {
        DBG("__init_tel");
-       int ret = FAIL;
+       int ret, i;
 
-       ret = vconf_notify_key_changed(VCONFKEY_DNET_STATE, dnet_state_callback, data);
-       if (ret != OK) {
-               ERR("Failed to register callback!");
+       ret = telephony_init(&tel_list);
+       if (ret != TELEPHONY_ERROR_NONE) {
+               ERR("telephony_init failed %d", ret);
+               return FAIL;
        }
 
-/*     ret = vconf_notify_key_changed(VCONFKEY_DNET_STATE2, dnet2_state_callback, data);
-       if (ret != OK) {
-               ERR("Failed to register callback!");
-       }*/
+       if (!tel_list.count) {
+               DBG("Not SIM handle returned by telephony_init");
+               __deinit_tel();
+               return FAIL;
+       }
 
-       ret = vconf_notify_key_changed(VCONFKEY_PACKET_STATE, packet_state_callback, data);
-       if (ret != OK) {
-               ERR("Failed to register callback!");
+       telephony_noti_e events[] = { TELEPHONY_NOTI_NETWORK_DEFAULT_DATA_SUBSCRIPTION, TELEPHONY_NOTI_NETWORK_PS_TYPE, TELEPHONY_NOTI_NETWORK_SERVICE_STATE };
+       for (i = 0; i < ARRAY_SIZE(events); i++) {
+               /* Currently handle only first SIM */
+               ret = telephony_set_noti_cb(tel_list.handle[0], events[i], _update_status, data);
+               if (ret != TELEPHONY_ERROR_NONE) {
+                       __deinit_tel();
+                       return FAIL;
+               }
        }
 
-       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE, _flight_mode, data);
-       if (ret != OK) {
-               ERR("Failed to register callback!");
+       ret = util_wifi_set_connection_state_changed_cb(_wifi_status_changed_cb, data);
+       if (ret != 0) {
+               ERR("util_wifi_set_connection_state_changed_cb");
+               __deinit_tel();
+               return FAIL;
        }
 
-       ret = vconf_notify_key_changed(VCONFKEY_NETWORK_STATUS, _bt_tethering, data);
-       if (ret != OK) {
-               ERR("Failed to register callback!");
+       ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE, _flight_mode, data);
+       if (ret != SYSTEM_SETTINGS_ERROR_NONE) {
+               ERR("system_settings_set_changed_cb %d", get_error_message(ret));
+               __deinit_tel();
+               return FAIL;
        }
 
-       on_noti(tapi_handle[0], NULL, NULL, data);
-}
+       ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_BLUETOOTH_TETHERING_ENABLED, _update_status_ri, data);
+       if (ret != RUNTIME_INFO_ERROR_NONE) {
+               ERR("runtime_info_set_changed_cb %d", get_error_message(ret));
+               __deinit_tel();
+               return FAIL;
+       }
 
+       on_noti(tel_list.handle[0], NULL, NULL, data);
 
+       return OK;
+}
 
-/* De-initialize TAPI */
+/* De-initialize telephony */
 static void __deinit_tel()
 {
        DBG("__deinit_tel");
-}
 
+       system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE);
+       util_wifi_unset_connection_state_changed_cb(_wifi_status_changed_cb);
+       runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_BLUETOOTH_TETHERING_ENABLED);
 
+       if (tel_list.count)
+               telephony_deinit(&tel_list);
+       tel_list.count = 0;
+}
 
-static void tel_ready_cb(keynode_t *key, void *data)
+static void tel_ready_cb(telephony_state_e state, void *user_data)
 {
-       gboolean status = FALSE;
-
-       status = vconf_keynode_get_bool(key);
-       if (status == TRUE) {    /* Telephony State - READY */
-               __init_tel(data);
+       if (state == TELEPHONY_STATE_READY) {    /* Telephony State - READY */
+               __init_tel(user_data);
        }
-       else {                   /* Telephony State – NOT READY */
+       else if (state == TELEPHONY_STATE_NOT_READY) {                   /* Telephony State – NOT READY */
                /* De-initialization is optional here (ONLY if required) */
                __deinit_tel();
        }
 }
 
-
-
 static int register_conn_module(void *data)
 {
-       int r = 0, ret = -1;
+       int ret;
+       telephony_state_e state;
 
        retif(data == NULL, FAIL, "Invalid parameter!");
 
        set_app_state(data);
 
-       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_PSTYPE,
-                                          ps_type_callback, data);
-       if (ret != OK) {
-               r = r | ret;
-       }
-
-       ret = wifi_set_connection_state_changed_cb(_wifi_status_changed_cb, data);
-       if (ret != WIFI_ERROR_NONE) {
-               ERR("Failed to register wifi_set_connection_state_changed_cb!");
-               r = r | ret;
+       ret = telephony_get_state(&state);
+       if (ret != TELEPHONY_ERROR_NONE) {
+               ERR("telephony_get_state failed: %d", get_error_message(ret));
+               return FAIL;
        }
-       gboolean state = FALSE;
 
-       vconf_get_bool(VCONFKEY_TELEPHONY_READY, &state);
-
-       if(state)
-       {
+       if (state == TELEPHONY_STATE_READY) {
                DBG("Telephony ready");
-               __init_tel(data);
+               if (__init_tel(data) != OK)
+                       return FAIL;
        }
-       else
-       {
+       else if (state == TELEPHONY_STATE_NOT_READY) {
                DBG("Telephony not ready");
-               vconf_notify_key_changed(VCONFKEY_TELEPHONY_READY, tel_ready_cb, data);
        }
 
-       return r;
+       ret = telephony_set_state_changed_cb(tel_ready_cb, data);
+       if (ret != TELEPHONY_ERROR_NONE) {
+               ERR("telephony_set_state_changed_cb failed %d", get_error_message(ret));
+               __deinit_tel();
+               return FAIL;
+       }
+       return OK;
 }
 
-
-
 static int unregister_conn_module(void)
 {
-       int ret = -1;
-
-       ret = ret | vconf_ignore_key_changed(VCONFKEY_TELEPHONY_PSTYPE, ps_type_callback);
-       ret = ret | vconf_ignore_key_changed(VCONFKEY_DNET_STATE, dnet_state_callback);
-//     ret = ret | vconf_ignore_key_changed(VCONFKEY_DNET_STATE2, dnet_state_callback);
-       ret = ret | wifi_unset_connection_state_changed_cb();
-       ret = ret | vconf_ignore_key_changed(VCONFKEY_PACKET_STATE, packet_state_callback);
-       ret = ret | vconf_ignore_key_changed(VCONFKEY_TELEPHONY_READY, tel_ready_cb);
-       ret = ret | vconf_ignore_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE, _flight_mode);
-       ret = ret | vconf_ignore_key_changed(VCONFKEY_NETWORK_STATUS, _bt_tethering);
-       if (ret != OK)
-               ERR("Failed to unregister callback!");
-
+       telephony_unset_state_changed_cb(tel_ready_cb);
        __deinit_tel();
 
-       return ret;
+       return OK;
 }
index 9600fbc..e42e1cd 100644 (file)
@@ -310,7 +310,7 @@ static int register_wifi_module(void *data)
        ret = wifi_set_device_state_changed_cb(_wifi_device_state_changed_cb, data);
        if (ret != WIFI_ERROR_NONE) r = ret;
 
-       ret = wifi_set_connection_state_changed_cb(_wifi_connection_state_changed_cb, data);
+       ret = util_wifi_set_connection_state_changed_cb(_wifi_connection_state_changed_cb, data);
        if (ret != WIFI_ERROR_NONE) r = ret;
 
        ret = vconf_notify_key_changed(VCONFKEY_WIFI_STRENGTH, _wifi_changed_cb, data);
@@ -328,8 +328,8 @@ static int unregister_wifi_module(void)
 {
        int ret;
 
+       util_wifi_unset_connection_state_changed_cb(_wifi_connection_state_changed_cb);
        ret = wifi_unset_device_state_changed_cb();
-       ret = wifi_unset_connection_state_changed_cb();
        ret = ret | vconf_ignore_key_changed(VCONFKEY_WIFI_STRENGTH, _wifi_changed_cb);
        ret = ret | vconf_ignore_key_changed(VCONFKEY_WIFI_TRANSFER_STATE, _wifi_changed_cb);
 
index 78428e1..d79c52d 100644 (file)
@@ -370,7 +370,7 @@ static void _sim_status_cb(TapiHandle *handle_obj, const char *noti_id, void *da
        ad->tel_info.sim_status= *sim_status;
 
        _on_noti(handle_obj, noti_id, data, user_data);
-       connection_icon_on_noti(handle_obj, noti_id, data, user_data);
+       //connection_icon_on_noti(handle_obj, noti_id, data, user_data);
 }
 
 static void _network_service_type_cb(TapiHandle *handle_obj, const char *noti_id, void *data, void *user_data)
@@ -385,7 +385,7 @@ static void _network_service_type_cb(TapiHandle *handle_obj, const char *noti_id
        ad->tel_info.network_service_type= *service_type;
 
        _on_noti(handle_obj, noti_id, data, user_data);
-       connection_icon_on_noti(handle_obj, noti_id, data, user_data);
+       //connection_icon_on_noti(handle_obj, noti_id, data, user_data);
 }
 
 static void _network_ps_type_cb(TapiHandle *handle_obj, const char *noti_id, void *data, void *user_data)
@@ -399,7 +399,7 @@ static void _network_ps_type_cb(TapiHandle *handle_obj, const char *noti_id, voi
 
        ad->tel_info.network_ps_type= *ps_type;
 
-       connection_icon_on_noti(handle_obj, noti_id, data, user_data);
+       //connection_icon_on_noti(handle_obj, noti_id, data, user_data);
 }
 
 static void _roaming_status_cb(TapiHandle *handle_obj, const char *noti_id, void *data, void *user_data)
@@ -430,7 +430,7 @@ static void _preferred_data_cb(TapiHandle *handle_obj, const char *noti_id, void
        ad->tel_info.prefered_data = noti->default_subs;
        //data prefered is not controllered
 
-       connection_icon_on_noti(handle_obj, noti_id, data, user_data);
+       //connection_icon_on_noti(handle_obj, noti_id, data, user_data);
 }
 
 static void _default_network_cb(TapiHandle *handle_obj, const char *noti_id, void *data, void *user_data)
index a4da333..aaffbfc 100644 (file)
@@ -22,6 +22,7 @@
 #include <vconf.h>
 #include <app.h>
 #include <app_common.h>
+#include <Eina.h>
 
 #include "common.h"
 #include "indicator.h"
 #define DIR_PREFIX     "Theme_%02d_"
 #define LABEL_STRING   "<color=#%02x%02x%02x%02x>%s</color>"
 
+typedef struct {
+       wifi_connection_state_changed_cb cb;
+       void *data;
+} wifi_handler_t;
+
+static Eina_List *wifi_callbacks;
 
 char *util_set_label_text_color(const char *txt)
 {
@@ -615,4 +622,52 @@ const char *util_get_file_path(enum app_subdir dir, const char *relative)
 
        return &buf[0];
 }
+
+static void _wifi_state_cb(wifi_connection_state_e state, wifi_ap_h ap, void *user_data)
+{
+       Eina_List *l;
+       wifi_handler_t *hdl;
+
+       EINA_LIST_FOREACH(wifi_callbacks, l, hdl) {
+               if (hdl->cb) hdl->cb(state, ap, hdl->data);
+       }
+}
+
+int util_wifi_set_connection_state_changed_cb(wifi_connection_state_changed_cb cb, void *data)
+{
+       wifi_handler_t *hdl = malloc(sizeof(wifi_handler_t));
+       if (!hdl) {
+               return -1;
+       }
+
+       if (!wifi_callbacks) {
+               int err = wifi_set_connection_state_changed_cb(_wifi_state_cb, NULL);
+               if (err != WIFI_ERROR_NONE) {
+                       free(hdl);
+                       return -1;
+               }
+       }
+
+       hdl->cb = cb;
+       hdl->data = data;
+       wifi_callbacks = eina_list_append(wifi_callbacks, cb);
+
+       return 0;
+}
+
+void util_wifi_unset_connection_state_changed_cb(wifi_connection_state_changed_cb cb)
+{
+       Eina_List *l, *l2;
+       wifi_handler_t *hdl;
+
+       EINA_LIST_FOREACH_SAFE(wifi_callbacks, l, l2, hdl) {
+               if (hdl->cb == cb) {
+                       wifi_callbacks = eina_list_remove_list(wifi_callbacks, l);
+                       free(hdl);
+               }
+       }
+       if (!wifi_callbacks)
+               wifi_unset_connection_state_changed_cb();
+}
+
 /* End of file */
index 64391c3..f3d1d37 100644 (file)
@@ -6,9 +6,10 @@
         <icon>indicator-win.png</icon>
     </ui-application>
     <privileges>
-        <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+        <privilege>http://tizen.org/privilege/telephony</privilege>
         <privilege>http://tizen.org/privilege/network.get</privilege>
         <privilege>http://tizen.org/privilege/bluetooth</privilege>
+        <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
         <privilege>http://tizen.org/privilege/wifidirect</privilege>
         <privilege>http://tizen.org/privilege/notification</privilege>
         <privilege>http://tizen.org/privilege/display</privilege>