Implement Data Restriction Feature in W3-HOME 38/187038/2 accepted/tizen/unified/20180821.091251 submit/tizen/20180821.143906
authorNilesh Trimbake <t.shripati@samsung.com>
Fri, 17 Aug 2018 10:32:44 +0000 (16:02 +0530)
committerNilesh Trimbake <t.shripati@samsung.com>
Fri, 17 Aug 2018 10:41:15 +0000 (16:11 +0530)
This patch implement Data Restriction feature.
When data usage reach the data restriction limit,
data network icon is disabled.

Change-Id: I3b8ed9c33bd728f9041360511285ff1e5b87f6f2

src/moments/moments_manager.c
src/moments/moments_status_view.c

index 2f31b61ada59d926de404f9893b881e57561e37f..1553e3c41a0dcab9d3fb79aeab96fb08b727c896 100755 (executable)
@@ -67,6 +67,7 @@ static void __simcard_state_changed_cb(telephony_h handle, telephony_noti_e noti
 static void __location_service_state_changed_cb(runtime_info_key_e key, void *data);
 static void __bluetooth_state_changed_cb(keynode_t *node, void *user_data);
 static void __headset_state_changed_cb(keynode_t *node, void *user_data);
+static void __data_restriction_state_changed_cb(keynode_t *node, void *user_data);
 static void __callforwarding_state_changed_cb(keynode_t *node, void *user_data);
 static void __get_callsignal_state(bool *is_roaming, int *strength);
 static void __get_network_strength_and_packet_type(int *network_type, int *packet_type);
@@ -250,6 +251,7 @@ static void __initialize_status_view(void)
                }
        }
        __wifi_state_changed_cb(NULL, NULL);
+       __data_restriction_state_changed_cb(NULL, NULL);
        __bluetooth_state_changed_cb(NULL, NULL);
        __headset_state_changed_cb(NULL, NULL);
        __flight_mode_changed_cb(NULL, NULL);
@@ -354,6 +356,8 @@ static void __register_status_callback(void)
        vconf_notify_key_changed(VCONFKEY_WMS_WMANAGER_CONNECTED, __bluetooth_state_changed_cb, NULL);
        /* HEADSET */
        vconf_notify_key_changed(VCONFKEY_BT_DEVICE, __headset_state_changed_cb, NULL);
+       /* DATA RESTRICTION */
+       vconf_notify_key_changed(VCONFKEY_SETAPPL_DATA_RESTRICTION_INT, __data_restriction_state_changed_cb, NULL);
 }
 
 static void __unregister_status_callback(void)
@@ -408,7 +412,9 @@ static void __unregister_status_callback(void)
        vconf_ignore_key_changed(VCONFKEY_BT_STATUS, __bluetooth_state_changed_cb);
        vconf_ignore_key_changed(VCONFKEY_WMS_WMANAGER_CONNECTED, __bluetooth_state_changed_cb);
 
-       vconf_ignore_key_changed(VCONFKEY_WMS_WMANAGER_CONNECTED, __headset_state_changed_cb);
+       vconf_ignore_key_changed(VCONFKEY_BT_DEVICE, __headset_state_changed_cb);
+
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_DATA_RESTRICTION_INT, __data_restriction_state_changed_cb);
 }
 
 static void __battery_state_changed_cb(device_callback_e type, void *value, void *user_data)
@@ -557,6 +563,7 @@ static void __flight_mode_changed_cb(keynode_t *node, void *user_data)
                        __callforwarding_state_changed_cb(NULL, NULL);
                }
                __network_enable();
+               __data_restriction_state_changed_cb(NULL, NULL);
                __bluetooth_state_changed_cb(NULL, NULL);
                __headset_state_changed_cb(NULL, NULL);
        }
@@ -577,8 +584,7 @@ static void __wifi_state_changed_cb(keynode_t *node, void *user_data)
 
        if (wifi_state == VCONFKEY_WIFI_CONNECTED) {
                _D("WIFI CONNECTED");
-               if (!moments_check_is_3g_device())
-                       moments_status_network_icon_show();
+               moments_status_network_icon_show();
 
                __get_wifi_strength_and_packet_type(&network_type, &packet_type);
                moments_status_network_update(network_type + MOMENT_STATUS_SIGNAL_WIFI_INDEX, packet_type+NETWORK_PACKET_INDEX_START);
@@ -586,6 +592,7 @@ static void __wifi_state_changed_cb(keynode_t *node, void *user_data)
                if (moments_check_is_3g_device() && s_info.telephony_initialized) {
                        _D("WIFI DISCONNECTED, 3G");
                        __network_enable();
+                       __data_restriction_state_changed_cb(NULL, NULL);
                } else {
                        _D("WIFI DISCONNECTED, NOT 3G");
                        moments_status_network_icon_hide();
@@ -650,6 +657,43 @@ static void __headset_state_changed_cb(keynode_t *node, void *user_data)
        moments_status_update_view();
 }
 
+static void __data_restriction_state_changed_cb(keynode_t *node, void *user_data)
+{
+       int data_restriction_state = RESTRICTION_STATE_INIT;
+       int wifi_state = 0;
+
+       _D("Data Restriction state is changed");
+       if (vconf_get_int(VCONFKEY_SETAPPL_DATA_RESTRICTION_INT, &data_restriction_state) < 0) {
+               _E("Failed to get vconfkey for data restriction state");
+               return;
+       }
+
+       switch (data_restriction_state) {
+       case RESTRICTION_STATE_INIT:
+               _D("Data Restriction State is initialized");
+               break;
+       case RESTRICTION_STATE_UNSET:
+               _D("Data Restriction State is Unset");
+               __network_enable();
+               moments_status_update_view();
+               break;
+       case RESTRICTION_STATE_SET:
+               _D("Data Restriction State is Set");
+               if (vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state) < 0) {
+                       _E("Failed to get vconfkey for wifi state");
+                       return;
+               }
+               if (wifi_state != VCONFKEY_WIFI_CONNECTED && moments_check_is_3g_device()) {
+                       moments_status_network_icon_hide();
+                       moments_status_update_view();
+               }
+               break;
+       default:
+               _E("Incorrect Data Restriction State");
+               break;
+       }
+}
+
 static void __callforwarding_state_changed_cb(keynode_t *node, void *user_data)
 {
        _D("Callforwarding State is changed");
index d84153af5c0446ddebba6b8a885cdbc97ce21793..13a5325a5cfcfdf24aa7cd50400bcf5c725afc8b 100755 (executable)
@@ -212,7 +212,7 @@ void moments_status_callsignal_update(int strength, bool is_roaming)
 
 void moments_status_network_icon_show(void)
 {
-       if (s_info.icon_array[STATUS_ICON_NETWORK])
+       if (s_info.icon_array[STATUS_ICON_NETWORK] != NULL)
                return;
 
        s_info.icon_array[STATUS_ICON_NETWORK] = __create_network(s_info.status_layout);