Block background scan while Doze Mode is set 09/239509/1 accepted/tizen/unified/20200730.130919 submit/tizen/20200728.041121
authorJaehyun Kim <jeik01.kim@samsung.com>
Mon, 27 Jul 2020 07:53:24 +0000 (16:53 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Mon, 27 Jul 2020 07:53:24 +0000 (16:53 +0900)
Change-Id: Ia21041a6b5ee46a532f6d302bfa2cc0921a46e53
Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
include/wifi-background-scan.h
src/wifi-background-scan.c
src/wifi-power.c

index ed2584e..2874927 100755 (executable)
@@ -50,11 +50,11 @@ guint netconfig_wifi_bgscan_get_mode(void);
 gboolean netconfig_wifi_get_scanning(void);
 void netconfig_wifi_set_scanning(gboolean scanning);
 
+gboolean netconfig_wifi_block_bgscan(int status);
 void netconfig_wifi_set_bgscan_pause(gboolean pause);
 gboolean netconfig_wifi_bgscan_set_interval(guint interval);
 void netconfig_wifi_bgscan_get_interval(guint *interval);
 gboolean netconfig_wifi_is_bgscan_paused(void);
-void netconfig_wifi_set_bgscan_pause(gboolean pause);
 
 gboolean handle_set_bgscan(Wifi *wifi, GDBusMethodInvocation *context, guint scan_mode);
 gboolean handle_resume_bgscan(Wifi *wifi, GDBusMethodInvocation *context);
index 8c7f892..55e7423 100755 (executable)
@@ -132,6 +132,8 @@ static gboolean __netconfig_wifi_bgscan_immediate_scan(gpointer data)
                return FALSE;
        }
 #endif
+       if (netconfig_wifi_block_bgscan(-1))
+               return FALSE;
 
        if (state == NETCONFIG_WIFI_CONNECTED) {
                if (netconfig_wifi_bgscan_get_mode() == WIFI_BGSCAN_MODE_EXPONENTIAL) {
@@ -221,6 +223,18 @@ static gboolean __netconfig_wifi_bgscan_next_scan(gpointer data)
        return FALSE;
 }
 
+gboolean netconfig_wifi_block_bgscan(int status)
+{
+       static gboolean blocked = FALSE;
+
+       if (status == 1)
+               blocked = TRUE;
+       else if (status == 0)
+               blocked = FALSE;
+
+       return blocked;
+}
+
 void netconfig_wifi_set_bgscan_pause(gboolean pause)
 {
        struct bgscan_data *data = __netconfig_wifi_bgscan_get_data();
@@ -231,7 +245,7 @@ void netconfig_wifi_set_bgscan_pause(gboolean pause)
 gboolean netconfig_wifi_is_bgscan_paused(void)
 {
        struct bgscan_data *data = __netconfig_wifi_bgscan_get_data();
-       DBG("Wi-Fi background scan is [%s]", data->paused ? "Paused" : "Runnable");
+       DBG("Wi-Fi background scan is [%s]", data->paused ? "Paused" : "Runable");
        return data->paused;
 }
 
index be60606..ca109d5 100755 (executable)
@@ -629,6 +629,31 @@ static void __pm_state_changed_cb(keynode_t* node, void* user_data)
        prev_state = new_state;
 }
 
+static void __doze_level_changed_cb(keynode_t* node, void* user_data)
+{
+       int doze_level = -1;
+
+       if (node != NULL)
+               doze_level = vconf_keynode_get_int(node);
+       else
+               netconfig_vconf_get_int(VCONFKEY_SYSMAN_DOZE_MODE_LEVEL, &doze_level);
+
+       if (doze_level < 0) {
+               DBG("Invalid Doze Level: %d", doze_level);
+               return;
+       }
+
+       DBG("Doze Level: %d", doze_level);
+
+       if (doze_level >= 1) {
+               netconfig_wifi_block_bgscan(1);
+               DBG("Block BG scan!");
+       } else {
+               netconfig_wifi_block_bgscan(0);
+               DBG("Unblock BG scan!");
+       }
+}
+
 static void __netconfig_telephony_ready_changed_cb(keynode_t * node, void *data)
 {
        int telephony_ready = 0;
@@ -816,10 +841,15 @@ void wifi_power_initialize(void)
 
        vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, __emergency_mode_changed_cb, NULL);
        vconf_notify_key_changed(VCONFKEY_PM_STATE, __pm_state_changed_cb, NULL);
+       vconf_notify_key_changed(VCONFKEY_SYSMAN_DOZE_MODE_LEVEL, __doze_level_changed_cb, NULL);
+       __doze_level_changed_cb(NULL, NULL);
 }
 
 void wifi_power_deinitialize(void)
 {
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, __emergency_mode_changed_cb);
+       vconf_ignore_key_changed(VCONFKEY_PM_STATE, __pm_state_changed_cb);
+       vconf_ignore_key_changed(VCONFKEY_SYSMAN_DOZE_MODE_LEVEL, __doze_level_changed_cb);
 }
 
 gboolean handle_load_driver(Wifi *wifi,