1ba0c64cfddfba557bd9d16c3c0b7ddcc32ca919
[apps/native/ug-wifi-efl.git] / sources / ui-gadget / winset_popup.c
1 /*
2  * Wi-Fi
3  *
4  * Copyright 2012 Samsung Electronics Co., Ltd
5  *
6  * Licensed under the Flora License, Version 1.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.tizenopensource.org/license
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include <tethering.h>
21 #include <efl_assist.h>
22
23 #include "common.h"
24 #include "ug_wifi.h"
25 #include "i18nmanager.h"
26 #include "common_utils.h"
27 #include "winset_popup.h"
28 #include "wlan_manager.h"
29 #include "viewer_manager.h"
30
31 struct popup_manager_object {
32         /* General popup attributes */
33         Evas_Object* win;
34         Evas_Object *popup_user_prompt;
35         char *str_pkg_name;
36         void *tethering_handle;
37         int type;
38 };
39
40 static void __wifi_tethering_deactivated_cb(tethering_error_e error,
41                 tethering_type_e type, tethering_disabled_cause_e code, void *data)
42 {
43         __COMMON_FUNC_ENTER__;
44
45         if (data) {
46                 popup_manager_object_t *manager_object = (popup_manager_object_t *)data;
47                 tethering_h handle = (tethering_h)manager_object->tethering_handle;
48                 tethering_destroy(handle);
49                 manager_object->tethering_handle = NULL;
50         }
51
52         if (error != TETHERING_ERROR_NONE) {
53                 INFO_LOG(COMMON_NAME_LIB, "Error occurred [%d]\n", error);
54                 viewer_manager_header_mode_set(HEADER_MODE_OFF);
55         } else {
56                 INFO_LOG(COMMON_NAME_LIB, "TYPE = %d", type);
57                 if (type == TETHERING_TYPE_WIFI ||
58                                 type == TETHERING_TYPE_RESERVED) {
59                         INFO_LOG(COMMON_NAME_LIB, "OK\n");
60                         /* Tethering is now disabled. All OK to switch on Wi-Fi */
61                         power_control();
62                 } else {
63                         viewer_manager_header_mode_set(HEADER_MODE_OFF);
64                 }
65         }
66
67         __COMMON_FUNC_EXIT__;
68 }
69
70 static gboolean __wifi_tethering_deativate(popup_manager_object_t *manager_object)
71 {
72         __COMMON_FUNC_ENTER__;
73
74         tethering_error_e ret = TETHERING_ERROR_NONE;
75         tethering_h handle = NULL;
76
77         if (manager_object == NULL) {
78                 INFO_LOG(COMMON_NAME_LIB, "popup manager_object is NULL \n", ret);
79                 return FALSE;
80         }
81
82         if (manager_object->tethering_handle) {
83                 tethering_destroy(manager_object->tethering_handle);
84                 manager_object->tethering_handle = NULL;
85         }
86
87         ret = tethering_create(&handle);
88         if (ret != TETHERING_ERROR_NONE) {
89                 INFO_LOG(COMMON_NAME_LIB, "Failed to tethering_create() [%d]\n", ret);
90                 return FALSE;
91         }
92
93         manager_object->tethering_handle = handle;
94         ret = tethering_set_disabled_cb(handle, manager_object->type, __wifi_tethering_deactivated_cb, manager_object);
95         if (ret != TETHERING_ERROR_NONE) {
96                 INFO_LOG(COMMON_NAME_LIB, "Failed to tethering_set_disabled_cb() [%d]\n", ret);
97                 goto exit;
98         }
99
100         ret = tethering_disable(handle, manager_object->type);
101         if (ret != TETHERING_ERROR_NONE) {
102                 INFO_LOG(COMMON_NAME_LIB, "Failed to tethering_disable() [%d]\n", ret);
103                 goto exit;
104         }
105
106         __COMMON_FUNC_EXIT__;
107         return TRUE;
108
109 exit:
110         tethering_destroy(handle);
111         manager_object->tethering_handle = NULL;
112
113         __COMMON_FUNC_EXIT__;
114         return FALSE;
115 }
116
117 static void __wifi_tethering_off_ok_cb(void* data, Evas_Object* obj,
118                 void* event_info)
119 {
120         __COMMON_FUNC_ENTER__;
121
122         popup_manager_object_t *manager_object = (popup_manager_object_t *)data;
123         if (manager_object == NULL) {
124                 return;
125         }
126
127         INFO_LOG(UG_NAME_NORMAL, "Response OK");
128         if (manager_object && NULL != manager_object->popup_user_prompt) {
129                 evas_object_hide(manager_object->popup_user_prompt);
130                 evas_object_del(manager_object->popup_user_prompt);
131                 manager_object->popup_user_prompt = NULL;
132         }
133
134         if (manager_object->type == TETHERING_TYPE_WIFI ||
135                         manager_object->type == TETHERING_TYPE_RESERVED) {
136                 if (FALSE != __wifi_tethering_deativate(manager_object)) {
137                         INFO_LOG(UG_NAME_NORMAL, "Successfully de-activate Wi-Fi tethering");
138
139                         viewer_manager_header_mode_set(HEADER_MODE_ACTIVATING);
140                 } else {
141                         INFO_LOG(UG_NAME_NORMAL, "Fail to de-activate Wi-Fi tethering");
142                 }
143         }
144
145         __COMMON_FUNC_EXIT__;
146 }
147
148 static void __wifi_tethering_off_no_cb(void* data, Evas_Object* obj,
149                 void* event_info)
150 {
151         __COMMON_FUNC_ENTER__;
152
153         popup_manager_object_t *manager_object = (popup_manager_object_t *)data;
154
155         INFO_LOG(UG_NAME_NORMAL, "Response CANCEL");
156
157         if (manager_object && NULL != manager_object->popup_user_prompt) {
158                 evas_object_hide(manager_object->popup_user_prompt);
159                 evas_object_del(manager_object->popup_user_prompt);
160                 manager_object->popup_user_prompt = NULL;
161                 viewer_manager_header_mode_set(HEADER_MODE_OFF);
162         }
163
164         __COMMON_FUNC_EXIT__;
165 }
166
167 popup_manager_object_t *winset_popup_manager_create(Evas_Object* win,
168                 const char *str_pkg_name)
169 {
170         popup_manager_object_t *manager_object;
171         manager_object = g_new0(popup_manager_object_t, 1);
172         manager_object->win = win;
173         manager_object->str_pkg_name = (char *)str_pkg_name;
174         manager_object->tethering_handle = NULL;
175         manager_object->type = 0;
176
177         return manager_object;
178 }
179
180 void winset_popup_mode_set(popup_manager_object_t *manager_object,
181                 POPUP_MODE_OPTIONS option, void *input_data)
182 {
183         __COMMON_FUNC_ENTER__;
184
185         popup_btn_info_t popup_btn_data;
186
187         if (manager_object == NULL) {
188                 return;
189         }
190
191         if (manager_object->tethering_handle) {
192                 tethering_destroy(manager_object->tethering_handle);
193                 manager_object->tethering_handle = NULL;
194         }
195
196         INFO_LOG(UG_NAME_NORMAL, "option = %d", option);
197
198         memset(&popup_btn_data, 0, sizeof(popup_btn_data));
199
200         switch (option) {
201         case POPUP_OPTION_POWER_ON_FAILED_TETHERING_OCCUPIED:
202         case POPUP_OPTION_POWER_ON_FAILED_TETHERING_AP_OCCUPIED:
203                 if (NULL != manager_object->popup_user_prompt) {
204                         break;
205                 }
206
207                 if(option == POPUP_OPTION_POWER_ON_FAILED_TETHERING_OCCUPIED)
208                         manager_object->type = TETHERING_TYPE_WIFI;
209                 else
210                         manager_object->type = TETHERING_TYPE_RESERVED;
211                 popup_btn_data.title_txt = "IDS_WIFI_BODY_WI_FI";
212                 popup_btn_data.info_txt = "IDS_ST_POP_TURNING_ON_WI_FI_WILL_DISABLE_WI_FI_TETHERING";
213                 popup_btn_data.btn1_txt = "IDS_WIFI_SK_CANCEL";
214                 popup_btn_data.btn1_cb = __wifi_tethering_off_no_cb;
215                 popup_btn_data.btn1_data = popup_btn_data.btn2_data = manager_object;
216                 popup_btn_data.btn2_txt = "IDS_WIFI_SK2_OK";
217                 popup_btn_data.btn2_cb = __wifi_tethering_off_ok_cb;
218                 manager_object->popup_user_prompt =
219                                 common_utils_show_info_popup(manager_object->win, &popup_btn_data);
220
221                 break;
222
223         default:
224                 break;
225         }
226
227         __COMMON_FUNC_EXIT__;
228 }
229
230 gboolean winset_popup_manager_destroy(popup_manager_object_t *manager_object)
231 {
232         if (manager_object == NULL) {
233                 return FALSE;
234         }
235
236         if (manager_object->tethering_handle) {
237                 tethering_destroy(manager_object->tethering_handle);
238                 manager_object->tethering_handle = NULL;
239         }
240
241         g_free(manager_object);
242
243         return TRUE;
244 }
245
246 gboolean winset_popup_hide_popup(popup_manager_object_t *manager_object)
247 {
248         if (manager_object == NULL) {
249                 return FALSE;
250         }
251
252         if (manager_object->popup_user_prompt != NULL) {
253                 evas_object_hide(manager_object->popup_user_prompt);
254                 evas_object_del(manager_object->popup_user_prompt);
255                 manager_object->popup_user_prompt = NULL;
256         }
257
258         return TRUE;
259 }