Fix genlist style
[apps/native/ug-wifi-efl.git] / sources / ui-gadget / viewers-layout / view_ime_hidden.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 <feedback.h>
21
22 #include "ug_wifi.h"
23 #include "view_ime_hidden.h"
24 #include "i18nmanager.h"
25 #include "wlan_manager.h"
26 #include "viewer_manager.h"
27 #include "viewer_list.h"
28 #include "common_utils.h"
29
30 struct hiddep_ap_popup_data {
31         Evas_Object *win;
32         const char *str_pkg_name;
33         Evas_Object *popup;
34         Evas_Object *entry;
35         Evas_Object *ok_btn;
36 };
37
38 static hiddep_ap_popup_data_t *g_hidden_ap_popup_data = NULL;
39 static Elm_Genlist_Item_Class g_entry_itc;
40
41 static Eina_Bool _enable_scan_updates_cb(void *data)
42 {
43         /* Lets enable the scan updates */
44         wlan_manager_enable_scan_result_update();
45
46         /* Reset the ecore timer handle */
47         common_util_manager_ecore_scan_update_timer_reset();
48
49         return ECORE_CALLBACK_CANCEL;
50 }
51
52 static void __popup_entry_changed_cb(void* data, Evas_Object* obj, void* event_info)
53 {
54         if (g_hidden_ap_popup_data == NULL) {
55                 return;
56         }
57
58         hiddep_ap_popup_data_t *popup_data = g_hidden_ap_popup_data;
59         Evas_Object *ok_btn = popup_data->ok_btn;
60
61 //      if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
62                 if (elm_object_focus_get(obj)) {
63                         if (elm_entry_is_empty(obj)) {
64                                 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
65                                 elm_object_disabled_set(ok_btn, EINA_TRUE);
66                                 elm_entry_input_panel_return_key_disabled_set(obj, EINA_TRUE);
67                         } else {
68                                 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
69                                 elm_object_disabled_set(ok_btn, EINA_FALSE);
70                                 elm_entry_input_panel_return_key_disabled_set(obj, EINA_FALSE);
71                         }
72                 }
73 //      }
74 }
75
76 static void __popup_entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
77 {
78         if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
79                 if (!elm_entry_is_empty(obj)) {
80                         elm_object_signal_emit(obj, "elm,state,clear,visible", "");
81                 } else {
82                         elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
83                 }
84         }
85         elm_object_signal_emit(obj, "elm,state,focus,on", "");
86 }
87
88 static void __popup_entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
89 {
90         if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
91                 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
92         }
93         elm_object_signal_emit(obj, "elm,state,focus,off", "");
94 }
95
96 static void __popup_entry_maxlength_reached(void *data, Evas_Object *obj,
97                 void *event_info)
98 {
99                 common_utils_send_message_to_net_popup("Password length",
100                                 "Lengthy Password", "notification", NULL);
101 }
102
103 hiddep_ap_popup_data_t *view_hidden_ap_popup_data_get(void)
104 {
105         return g_hidden_ap_popup_data;
106 }
107
108 void view_hidden_ap_popup_delete(void)
109 {
110         if (g_hidden_ap_popup_data == NULL)
111                 return;
112
113         if (g_hidden_ap_popup_data->popup) {
114                 evas_object_del(g_hidden_ap_popup_data->popup);
115                 g_hidden_ap_popup_data->popup = NULL;
116         }
117
118         g_free(g_hidden_ap_popup_data);
119         g_hidden_ap_popup_data = NULL;
120 }
121
122 void view_hidden_ap_popup_destroy(void)
123 {
124         view_hidden_ap_popup_delete();
125
126         /* A delay is needed to get the smooth Input panel closing animation effect */
127         common_util_managed_ecore_scan_update_timer_add(0.1,
128                         _enable_scan_updates_cb, NULL);
129 }
130
131 static void view_hidden_ap_popup_ok_cb(void *data, Evas_Object *obj,
132                 void *event_info)
133 {
134         hiddep_ap_popup_data_t *popup_data = g_hidden_ap_popup_data;
135         char *entry_txt = NULL;
136         int err;
137
138         if (popup_data == NULL)
139                 return;
140
141         entry_txt = elm_entry_markup_to_utf8(elm_entry_entry_get(
142                         popup_data->entry));
143
144         err = wlan_manager_scan_with_ssid(entry_txt, entry_txt);
145         if (err != WLAN_MANAGER_ERR_NONE) {
146                 common_utils_send_message_to_net_popup("Network connection popup",
147                                 "no ap found", "notification", NULL);
148
149                 view_hidden_ap_popup_destroy();
150                 g_free(entry_txt);
151
152                 return;
153         }
154
155         viewer_manager_show(VIEWER_WINSET_SEARCHING);
156         viewer_manager_header_mode_set(HEADER_MODE_SEARCHING);
157
158         evas_object_del(popup_data->popup);
159         popup_data->popup = NULL;
160
161         /* A delay is needed to get the smooth Input panel closing animation effect */
162         common_util_managed_ecore_scan_update_timer_add(0.1,
163                         _enable_scan_updates_cb, NULL);
164 }
165
166 static void view_hidden_ap_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
167 {
168         viewer_manager_request_scan();
169         view_hidden_ap_popup_destroy();
170 }
171
172 static Evas_Object *_gl_entry_item_content_get(void *data,
173                 Evas_Object *obj, const char *part)
174 {
175         if (obj == NULL) {
176                 return NULL;
177         }
178
179         int return_key_type;
180         Evas_Object *entry = NULL;
181
182         static Elm_Entry_Filter_Limit_Size limit_filter_data;
183
184         if (!g_strcmp0(part, "elm.icon.entry")) {
185                 entry = elm_entry_add(obj);
186                 elm_layout_theme_set(entry, "layout", "editfield", "singleline");
187                 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
188                 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
189                 elm_entry_single_line_set(entry, EINA_TRUE);
190                 elm_entry_scrollable_set(entry, EINA_TRUE);
191                 if (!entry)
192                         return NULL;
193
194                 elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
195                 elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
196                 elm_entry_prediction_allow_set(entry, EINA_FALSE);
197                 elm_entry_autocapital_type_set(entry, ELM_AUTOCAPITAL_TYPE_NONE);
198                 elm_object_domain_translatable_part_text_set(entry, "elm.guide",
199                                 PACKAGE, "IDS_ST_BODY_NETWORK_SSID");
200                 elm_object_signal_emit(entry, "elm,action,hide,search_icon", "");
201
202                 limit_filter_data.max_char_count = 32;
203                 elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size,
204                                 &limit_filter_data);
205
206                 return_key_type = ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DONE;
207                 elm_entry_input_panel_return_key_type_set(entry, return_key_type);
208                 elm_entry_input_panel_return_key_disabled_set(entry, EINA_TRUE);
209
210                 g_hidden_ap_popup_data->entry = entry;
211
212                 evas_object_smart_callback_add(entry, "activated",
213                                 view_hidden_ap_popup_ok_cb, NULL);
214                 evas_object_smart_callback_add(entry, "changed",
215                                 __popup_entry_changed_cb, NULL);
216                 evas_object_smart_callback_add(entry, "preedit,changed",
217                                 __popup_entry_changed_cb, NULL);
218                 evas_object_smart_callback_add(entry, "focused",
219                                 __popup_entry_focused_cb, NULL);
220                 evas_object_smart_callback_add(entry, "unfocused",
221                                 __popup_entry_unfocused_cb, NULL);
222                 evas_object_smart_callback_add(entry, "maxlength,reached",
223                                 __popup_entry_maxlength_reached, NULL);
224
225                 elm_entry_input_panel_show(entry);
226
227                 return entry;
228         }
229
230         return NULL;
231 }
232
233 static void popup_animation_finish_cb(void *data, Evas_Object *obj, void *event_info)
234 {
235         __COMMON_FUNC_ENTER__;
236         Elm_Object_Item *item = (Elm_Object_Item *) data;
237         Evas_Object *entry = NULL;
238
239         entry = elm_object_item_part_content_get(item, "elm.icon.entry");
240         elm_entry_input_panel_show(entry);
241         elm_object_focus_set(entry, EINA_TRUE);
242
243         __COMMON_FUNC_EXIT__;
244 }
245
246 void view_hidden_ap_popup_create(Evas_Object *win_main, const char *str_pkg_name)
247 {
248         __COMMON_FUNC_ENTER__;
249
250         Evas_Object *passpopup = NULL;
251         Evas_Object *genlist = NULL;
252         popup_btn_info_t popup_data;
253
254         if (win_main == NULL) {
255                 INFO_LOG(UG_NAME_ERR, "Invalid argument passed.");
256                 return;
257         }
258
259         if (g_hidden_ap_popup_data != NULL) {
260                 if (g_hidden_ap_popup_data->popup != NULL) {
261                         evas_object_del(g_hidden_ap_popup_data->popup);
262                         g_hidden_ap_popup_data->popup = NULL;
263                 }
264                 g_free(g_hidden_ap_popup_data);
265         }
266
267         g_hidden_ap_popup_data = g_try_new0(hiddep_ap_popup_data_t, 1);
268         if (g_hidden_ap_popup_data == NULL) {
269                 INFO_LOG(UG_NAME_ERR, "Memory allocation error.");
270                 return;
271         }
272
273         /* Lets disable the scan updates so that the UI is not refreshed un necessarily */
274         wlan_manager_disable_scan_result_update();
275
276         memset(&popup_data, 0, sizeof(popup_data));
277         popup_data.title_txt = "IDS_WIFI_BUTTON_FIND_HIDDEN_NETWORK";
278         popup_data.btn1_cb = view_hidden_ap_popup_cancel_cb;
279         popup_data.btn1_data = NULL;
280         popup_data.btn1_txt = "IDS_WIFI_SK_CANCEL";
281         popup_data.btn2_cb = view_hidden_ap_popup_ok_cb;
282         popup_data.btn2_data = NULL;
283         popup_data.btn2_txt = "IDS_COM_BODY_FIND";
284
285         passpopup = common_utils_show_info_popup(win_main, &popup_data);
286         g_hidden_ap_popup_data->ok_btn = popup_data.btn;
287         elm_object_disabled_set(g_hidden_ap_popup_data->ok_btn, EINA_TRUE);
288
289         g_hidden_ap_popup_data->win = win_main;
290         g_hidden_ap_popup_data->str_pkg_name = str_pkg_name;
291         g_hidden_ap_popup_data->popup = passpopup;
292
293         genlist = elm_genlist_add(passpopup);
294         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
295         evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
296         elm_scroller_content_min_limit(genlist, EINA_FALSE, EINA_TRUE);
297
298         g_entry_itc.item_style = "entry";
299         g_entry_itc.func.text_get = NULL;
300         g_entry_itc.func.content_get = _gl_entry_item_content_get;
301         g_entry_itc.func.state_get = NULL;
302         g_entry_itc.func.del = NULL;
303
304         Elm_Object_Item * entry_item = elm_genlist_item_append(genlist,
305                         &g_entry_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE,
306                         NULL, NULL);
307
308         evas_object_smart_callback_add(passpopup, "show,finished",
309                         popup_animation_finish_cb, entry_item);
310
311         evas_object_show(genlist);
312         elm_object_content_set(passpopup, genlist);
313         evas_object_show(passpopup);
314
315         __COMMON_FUNC_EXIT__;
316 }