Make call disable when enter airplane mode 99/161799/1 submit/tizen/20171127.111933
authorjunkyu han <junkyu.han@samsung.com>
Mon, 27 Nov 2017 07:30:40 +0000 (16:30 +0900)
committerjunkyu han <junkyu.han@samsung.com>
Mon, 27 Nov 2017 11:15:22 +0000 (11:15 +0000)
Change-Id: Iebe84669cbb2f3ed1b5c587bf1f3315ca2a47d14
(cherry picked from commit 13899a9accb4c2cfee3a3d9ca3377520160bebef)

data/org.tizen.w-home.xml.in
packaging/org.tizen.w-home.spec
src/clock.c
src/moments/moments_control_flight_mode.c
src/moments/moments_manager.c

index 738a7d9292155e60d3d6c3914b75a3f17e49a9d1..b928c4b314f663e5e3cbfd5e82d65269908ad6e7 100755 (executable)
@@ -25,6 +25,7 @@
                <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
                <privilege>http://tizen.org/privilege/notification</privilege>
                <privilege>http://tizen.org/privilege/telephony</privilege>
+               <privilege>http://tizen.org/privilege/telephony.admin</privilege>
                <privilege>http://tizen.org/privilege/network.get</privilege>
                <privilege>http://tizen.org/privilege/systemsettings.admin</privilege>
                <privilege>http://tizen.org/privilege/volume.set</privilege>
index 412a906c40875d48e0257c3431405a57deff88ed..a143833d8e12b3c7254cc5f2edbb5b26a0f92eca 100755 (executable)
@@ -41,6 +41,7 @@ BuildRequires: pkgconfig(capi-appfw-app-manager)
 BuildRequires: pkgconfig(capi-ui-efl-util)
 BuildRequires: pkgconfig(capi-telephony)
 BuildRequires: pkgconfig(capi-network-connection)
+BuildRequires: pkgconfig(tapi)
 
 %ifarch %{arm}
 %define ARCH arm
index cd477b697cf53cbe735e2490c5632e8a1c7d37f4..a2cf80f34fdc207051899051181b452276bd13a3 100755 (executable)
@@ -98,6 +98,12 @@ static void _clock_set_dnd_icon(int is_dnd_mode, Evas_Object *layout)
 {
        Evas_Object *image = NULL;
        image = elm_image_add(layout);
+       static int current_dnd_mode = -1;
+
+       if (is_dnd_mode == current_dnd_mode)
+               return;
+
+       current_dnd_mode = is_dnd_mode;
 
        if (is_dnd_mode) {
                elm_image_file_set(image, IMG_DND_ICON, NULL);
@@ -135,6 +141,13 @@ static void _clock_set_flight_mode_icon(int is_flight_mode, Evas_Object *layout)
        Evas_Object *image = NULL;
        image = elm_image_add(layout);
 
+       static int current_flight_mode = -1;
+
+       if (is_flight_mode == current_flight_mode)
+               return;
+
+       current_flight_mode = is_flight_mode;
+
        if (is_flight_mode) {
                elm_image_file_set(image, IMG_FLIGHT_MODE, NULL);
                if (indicator_data.is_left == 0) {
index 5c075ea000ce4c7e532221794d35e473bbf8776e..75591c4783dc69e492b79b00952760f58d161d49 100755 (executable)
 
 
 #include <efl_extension.h>
+#include <tapi_common.h>
+#include <TapiUtility.h>
+#include <ITapiSim.h>
+#include <ITapiModem.h>
+#include <TelPower.h>
 #include <vconf.h>
 
 #include "log.h"
 static struct __control_flight_mode_s {
        Evas_Object *flight_mode_popup;
        Evas_Object *flight_mode_layout;
+       TapiHandle *tel_handle;
 } s_info = {
        .flight_mode_popup = NULL,
        .flight_mode_layout = NULL,
+       .tel_handle = NULL,
 };
 
 extern control_info_t control_button_list[MOMENTS_CONTROLS_MAX];
 
+
+static int __init_tapi_handle(void)
+{
+       TelSimCardStatus_t sim_status = TAPI_SIM_STATUS_UNKNOWN;
+       int card_changed = 0;
+       int ret = 0;
+
+       char **cp_names = tel_get_cp_name_list();
+       if (!cp_names) {
+               _E("Failed to get cp_names");
+               return -1;
+       }
+
+       s_info.tel_handle = tel_init(cp_names[0]);
+       if (!s_info.tel_handle) {
+               _E("Failed to init tapi handle");
+               return -1;
+       }
+
+       ret = tel_get_sim_init_info(s_info.tel_handle, &sim_status, &card_changed);
+       if (ret != TAPI_API_SUCCESS) {
+               _E("Failed to get sim init info[%d]", ret);
+               return -1;
+       }
+
+       _D("SIM NAME: %s, %d", cp_names[0], sim_status);
+
+       free(cp_names);
+       return 0;
+}
+
+static void __fini_tapi_handle(void)
+{
+       if (s_info.tel_handle) {
+               tel_deinit(s_info.tel_handle);
+               s_info.tel_handle = NULL;
+       }
+}
+
+static void __tapi_flightmode_event_cb(TapiHandle *handle, int result, void *data, void *user_data)
+{
+       _D("Set Call State as Flight Mode Result[%d]", result);
+
+       switch (result) {
+       case TAPI_POWER_FLIGHT_MODE_RESP_ON:
+               break;
+       case TAPI_POWER_FLIGHT_MODE_RESP_OFF:
+               __fini_tapi_handle();
+               break;
+       case TAPI_POWER_FLIGHT_MODE_RESP_FAIL:
+               _E("Failed to set call state as flight mode");
+               break;
+       case TAPI_POWER_FLIGHT_MODE_RESP_MAX:
+               break;
+       default:
+               break;
+       }
+}
+
+static int __set_call_state_as_flight_mode(bool current_flight_mode)
+{
+       int ret = TAPI_API_SUCCESS;
+       tapi_power_flight_mode_type_t mode;
+
+       if (!s_info.tel_handle) {
+               ret = __init_tapi_handle();
+               if (ret != 0) {
+                       _E("Failed to init tapi handle[%d]", ret);
+                       return -1;
+               }
+       }
+
+       if (!current_flight_mode)
+               mode = TAPI_POWER_FLIGHT_MODE_ENTER;
+       else
+               mode = TAPI_POWER_FLIGHT_MODE_LEAVE;
+
+       ret = tel_set_flight_mode(s_info.tel_handle, mode, __tapi_flightmode_event_cb, NULL);
+       if (ret != TAPI_API_SUCCESS) {
+               _E("Failed to set tapi flight mode event cb[%d]", ret);
+               return -1;
+       }
+
+       return 0;
+}
+
 static void __flight_mode_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
 {
        if (evas_object_visible_get(s_info.flight_mode_popup) == false)
@@ -48,12 +141,20 @@ static void __flight_mode_popup_cancel_cb(void *data, Evas_Object *obj, void *ev
 
 static void __flight_mode_popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
 {
+       int ret = 0;
+
        if (evas_object_visible_get(s_info.flight_mode_popup) == false)
                return;
 
-       int ret = vconf_set_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, true);
-       if (ret < 0)
-               _E("Failed to set vconfkey(%s) : %d", VCONFKEY_TELEPHONY_FLIGHT_MODE, ret);
+       if (!moments_check_is_3g_device()) {
+               ret = vconf_set_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, true);
+               if (ret < 0)
+                       _E("Failed to set vconfkey(%s) : %d", VCONFKEY_TELEPHONY_FLIGHT_MODE, ret);
+       } else {
+               ret = __set_call_state_as_flight_mode(false);
+               if (ret < 0)
+                       _E("Failed to set call state as flight mode");
+       }
 
        elm_popup_dismiss(s_info.flight_mode_popup);
        s_info.flight_mode_popup = NULL;
@@ -131,9 +232,16 @@ void moments_control_flight_mode_pressed_cb(void *data, Evas *e, Evas_Object *ob
                moments_hide();
                __flight_mode_popup_view_create();
        } else {
-               int ret = vconf_set_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, false);
-               if (ret < 0)
-                       _E("Failed to set vconfkey(%s) : %d", VCONFKEY_TELEPHONY_FLIGHT_MODE, ret);
+               int ret = 0;
+               if (moments_check_is_3g_device()) {
+                       ret = __set_call_state_as_flight_mode(is_flight_mode);
+                       if (ret < 0)
+                               _E("Failed to set call state as flight mode");
+               } else {
+                       ret = vconf_set_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, false);
+                       if (ret < 0)
+                               _E("Failed to set vconfkey(%s) : %d", VCONFKEY_TELEPHONY_FLIGHT_MODE, ret);
+               }
        }
 }
 
index 34c10b2d96cfbfb0f6717004e94fdc8dc67b4010..d881d103dbe8b61a6bff99121a2875d64e3e8000 100755 (executable)
@@ -446,10 +446,18 @@ static void __callsignal_state_changed_cb(telephony_h handle, telephony_noti_e n
        _D("Callsignal Strength or Roaming State is changed");
        int callsignal_strength = 0;
        bool is_roaming = false;
+       int is_flight = 0;
 
-       __get_callsignal_state(&is_roaming, &callsignal_strength);
+       if (vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &is_flight) < 0) {
+               _E("Failed to get vconfkey for flight");
+               return;
+       }
 
-       moments_status_callsignal_update(callsignal_strength, is_roaming);
+       if (!is_flight) {
+               __get_callsignal_state(&is_roaming, &callsignal_strength);
+
+               moments_status_callsignal_update(callsignal_strength, is_roaming);
+       }
 }
 static void __callsignal_enable(void)
 {
@@ -476,10 +484,18 @@ static void __network_type_changed_cb(keynode_t *node, void *user_data)
        _D("Network type or Packet type is changed");
        int network_type = 0;
        int packet_type = 0;
+       int is_flight = 0;
+
+       if (vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &is_flight) < 0) {
+               _E("Failed to get vconfkey for flight");
+               return;
+       }
 
-       __get_network_strength_and_packet_type(&network_type, &packet_type);
+       if (!is_flight) {
+               __get_network_strength_and_packet_type(&network_type, &packet_type);
 
-       moments_status_network_update(network_type, network_type == 0 ? network_type : packet_type+NETWORK_PACKET_INDEX_START);
+               moments_status_network_update(network_type, network_type == 0 ? network_type : packet_type+NETWORK_PACKET_INDEX_START);
+       }
 }
 static void __network_enable(void)
 {
@@ -515,13 +531,13 @@ static void __network_disable(void)
 
 static void __flight_mode_changed_cb(keynode_t *node, void *user_data)
 {
-       _D("Flight Mode is changed");
        int is_flight = 0;
 
        if (vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &is_flight) < 0) {
                _E("Failed to get vconfkey for flight");
                return;
        }
+       _D("Flight Mode is changed to [%d]", is_flight);
        // on
        if (is_flight) {
                if (moments_check_is_3g_device() && s_info.telephony_initialized) {
@@ -637,13 +653,19 @@ static void __callforwarding_state_changed_cb(keynode_t *node, void *user_data)
 {
        _D("Callforwarding State is changed");
        int state = 0;
+       int is_flight = 0;
+
+       if (vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &is_flight) < 0) {
+               _E("Failed to get vconfkey for flight");
+               return;
+       }
 
        if (vconf_get_int(VCONFKEY_TELEPHONY_CALL_FORWARD_STATE, &state) < 0) {
                _E("Failed to get vconfkey for callforwarding");
                return;
        }
 
-       if (state == VCONFKEY_TELEPHONY_CALL_FORWARD_ON)
+       if (state == VCONFKEY_TELEPHONY_CALL_FORWARD_ON && !is_flight)
                moments_status_callforwarding_icon_show();
        else
                moments_status_callforwarding_icon_hide();