4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Contact: Hocheol Seo <hocheol.seo@samsung.com>
7 * Injun Yang <injun.yang@samsung.com>
8 * Seungyoun Ju <sy39.ju@samsung.com>
10 * Licensed under the Flora License, Version 1.1 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.tizenopensource.org/license
16 * Unless required by applicable law or agreed to in writing,
17 * software distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
25 #include "bt-connection-main.h"
26 #include "bt-connection-view.h"
27 #include "bt-connection-string.h"
28 #include "bt-connection-handler.h"
29 #include "bt-connection-ipc.h"
32 static void __bt_draw_popup(bt_app_data_t *ad,
33 const char *title, const char *msg, char *btn1_text,
34 char *btn2_text, void (*func) (void *data,
35 Evas_Object *obj, void *event_info))
39 Evas_Object *scroller;
45 ad->popup = elm_popup_add(ad->window);
46 evas_object_size_hint_weight_set(ad->popup, EVAS_HINT_EXPAND,
50 elm_object_part_text_set(ad->popup, "title,text", title);
53 scroller = elm_scroller_add(ad->popup);
54 elm_object_style_set(scroller, "effect");
55 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND,
57 elm_object_content_set(ad->popup, scroller);
58 evas_object_show(scroller);
60 label = elm_label_add(scroller);
61 elm_object_style_set(label, "popup/default");
62 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
64 txt = elm_entry_utf8_to_markup(msg);
65 elm_object_text_set(label, txt);
68 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND,
70 evas_object_size_hint_align_set(label, EVAS_HINT_FILL,
72 elm_object_content_set(scroller, label);
75 if ((btn1_text != NULL) && (btn2_text != NULL)) {
76 btn1 = elm_button_add(ad->popup);
77 elm_object_style_set(btn1, "popup");
78 elm_object_text_set(btn1, btn1_text);
79 elm_object_part_content_set(ad->popup, "button1", btn1);
80 evas_object_smart_callback_add(btn1, "clicked", func, ad);
82 btn2 = elm_button_add(ad->popup);
83 elm_object_style_set(btn2, "popup");
84 elm_object_text_set(btn2, btn2_text);
85 elm_object_part_content_set(ad->popup, "button2", btn2);
86 evas_object_smart_callback_add(btn2, "clicked", func, ad);
87 } else if (btn1_text != NULL) {
88 btn1 = elm_button_add(ad->popup);
89 elm_object_style_set(btn1, "popup");
90 elm_object_text_set(btn1, btn1_text);
91 elm_object_part_content_set(ad->popup, "button1", btn1);
92 evas_object_smart_callback_add(btn1, "clicked", func, ad);
95 evas_object_show(ad->popup);
96 evas_object_show(ad->window);
97 elm_object_focus_set(ad->popup, EINA_TRUE);
103 static void __bt_draw_connect_popup(bt_app_data_t *ad,
104 const char *msg, char *btn_text,
105 void (*func) (void *data,
106 Evas_Object *obj, void *event_info))
110 Evas_Object *scroller;
114 Evas_Object *default_ly;
115 Evas_Object *scroller_layout;
120 bg = elm_bg_add(ad->window);
121 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
122 elm_win_resize_object_add(ad->window, bg);
123 evas_object_show(bg);
125 default_ly = elm_layout_add(bg);
126 elm_layout_theme_set(default_ly, "layout", "application", "default");
127 evas_object_size_hint_weight_set(default_ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
128 elm_object_part_content_set(bg, "elm.swallow.content", default_ly);
129 evas_object_show(default_ly);
132 layout = elm_layout_add(default_ly);
134 elm_layout_file_set(layout, CUSTOM_POPUP_PATH, "connect_popup");
136 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
139 scroller = elm_scroller_add(layout);
140 elm_object_style_set(scroller, "effect");
141 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND,
143 evas_object_show(scroller);
145 scroller_layout = elm_layout_add(scroller);
146 elm_layout_file_set(scroller_layout, CUSTOM_POPUP_PATH, "connect_popup_scroller");
147 evas_object_size_hint_weight_set(scroller_layout, EVAS_HINT_EXPAND,
150 icon = elm_image_add(scroller_layout);
151 elm_image_file_set(icon, CUSTOM_POPUP_PATH, BT_IMAGE_WATCH);
152 elm_object_part_content_set(scroller_layout, "elm.swallow.img.watch", icon);
154 icon = elm_image_add(scroller_layout);
155 elm_image_file_set(icon, CUSTOM_POPUP_PATH, BT_IMAGE_PHONE);
156 elm_object_part_content_set(scroller_layout, "elm.swallow.img.phone", icon);
158 label = elm_label_add(scroller_layout);
159 elm_object_style_set(label, "popup/default");
160 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
162 txt = elm_entry_utf8_to_markup(msg);
163 elm_object_text_set(label, txt);
165 elm_object_part_content_set(scroller_layout, "elm.text.block", label);
167 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
168 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
169 elm_object_content_set(scroller, scroller_layout);
171 elm_object_part_content_set(layout, "scroller", scroller);
173 evas_object_show(layout);
175 if (btn_text != NULL) {
176 btn = elm_button_add(layout);
177 elm_object_text_set(btn, btn_text);
178 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
179 elm_object_part_content_set(layout, "btn", btn);
180 evas_object_smart_callback_add(btn, "clicked", func, ad);
183 elm_object_part_content_set(default_ly, "elm.swallow.content", layout);
184 elm_object_content_set(ad->window, bg);
186 evas_object_show(ad->window);
191 static void __bt_draw_connected_popup(bt_app_data_t *ad,
192 const char *msg, void (*func) (void *data,
193 Evas_Object *obj, void *event_info))
198 Evas_Object *scroller;
202 Evas_Object *default_ly;
203 Evas_Object *scroller_layout;
206 bg = elm_bg_add(ad->window);
207 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
208 elm_win_resize_object_add(ad->window, bg);
209 evas_object_show(bg);
211 default_ly = elm_layout_add(bg);
212 elm_layout_theme_set(default_ly, "layout", "application", "default");
213 evas_object_size_hint_weight_set(default_ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
214 elm_object_part_content_set(bg, "elm.swallow.content", default_ly);
215 evas_object_show(default_ly);
218 layout = elm_layout_add(default_ly);
220 elm_layout_file_set(layout, CUSTOM_POPUP_PATH, "connected_popup");
222 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
225 scroller = elm_scroller_add(layout);
226 elm_object_style_set(scroller, "effect");
227 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND,
229 evas_object_show(scroller);
231 scroller_layout = elm_layout_add(scroller);
232 elm_layout_file_set(scroller_layout, CUSTOM_POPUP_PATH, "connected_popup_scroller");
233 evas_object_size_hint_weight_set(scroller_layout, EVAS_HINT_EXPAND,
236 icon = elm_image_add(scroller_layout);
237 elm_image_file_set(icon, CUSTOM_POPUP_PATH, BT_IMAGE_WATCH);
238 elm_object_part_content_set(scroller_layout, "elm.swallow.img.watch", icon);
240 icon = elm_image_add(scroller_layout);
241 elm_image_file_set(icon, CUSTOM_POPUP_PATH, BT_IMAGE_PHONE);
242 elm_object_part_content_set(scroller_layout, "elm.swallow.img.phone", icon);
244 icon = elm_image_add(scroller_layout);
245 elm_image_file_set(icon, CUSTOM_POPUP_PATH, BT_IMAGE_ICON);
246 elm_object_part_content_set(scroller_layout, "elm.swallow.img.icon", icon);
248 icon = elm_image_add(scroller_layout);
249 elm_image_file_set(icon, CUSTOM_POPUP_PATH, BT_IMAGE_CONNECT);
250 elm_object_part_content_set(scroller_layout, "elm.swallow.img.dot1", icon);
252 icon = elm_image_add(scroller_layout);
253 elm_image_file_set(icon, CUSTOM_POPUP_PATH, BT_IMAGE_CONNECT);
254 elm_object_part_content_set(scroller_layout, "elm.swallow.img.dot2", icon);
256 label = elm_label_add(scroller_layout);
257 elm_object_style_set(label, "popup/default");
258 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
260 txt = elm_entry_utf8_to_markup(msg);
261 elm_object_text_set(label, txt);
263 elm_object_part_content_set(scroller_layout, "elm.text.block", label);
265 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
266 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
268 elm_object_content_set(scroller, scroller_layout);
270 elm_object_part_content_set(layout, "scroller", scroller);
272 evas_object_show(layout);
274 elm_object_part_content_set(default_ly, "elm.swallow.content", layout);
275 elm_object_content_set(ad->window, bg);
277 evas_object_show(ad->window);
282 static void __bt_connection_confirm_cb(void *data,
283 Evas_Object *obj, void *event_info)
285 if (obj == NULL || data == NULL)
288 bt_app_data_t *ad = (bt_app_data_t *)data;
289 const char *event = elm_object_text_get(obj);
291 if (!g_strcmp0(event, STR_OK)) {
297 evas_object_del(obj);
298 _bt_create_connecting_popup(ad);
300 if (ad->initialize == FALSE) {
301 ad->initialize = _bt_init(ad);
306 static void __bt_connection_timeout_cb(void *data,
307 Evas_Object *obj, void *event_info)
309 bt_app_data_t *ad = NULL;
310 ad = (bt_app_data_t *)data;
312 ERR("Invalid param");
317 ecore_timer_del(ad->timer);
321 _bt_create_connection_timeout_popup(ad);
324 static void __bt_connection_retry_cb(void *data,
325 Evas_Object *obj, void *event_info)
327 if (obj == NULL || data == NULL)
330 bt_app_data_t *ad = (bt_app_data_t *)data;
331 const char *event = elm_object_text_get(obj);
333 if (!g_strcmp0(event, STR_CANCEL)) {
339 evas_object_del(obj);
340 _bt_create_connecting_popup(ad);
342 if (ad->initialize == FALSE) {
343 ad->initialize = _bt_init(ad);
348 static void __bt_connecting_cancel_cb(void *data,
349 Evas_Object *obj, void *event_info)
351 if (obj == NULL || data == NULL)
354 bt_app_data_t *ad = (bt_app_data_t *)data;
355 const char *event = elm_object_text_get(obj);
357 if (!g_strcmp0(event, STR_CANCEL)) {
363 void _bt_create_connection_query_popup(bt_app_data_t *ad)
368 char *str = STR_UNABLE_REFRESH_APP_BT_DISCONNECTED;
371 ret = service_get_extra_data(ad->service, "msg", &value);
372 if (ret == SERVICE_ERROR_NONE) {
373 if (g_strcmp0(value, "refresh") == 0)
374 str = STR_UNABLE_REFRESH_APP_BT_DISCONNECTED;
375 else if (g_strcmp0(value, "perform") == 0) {
376 str = STR_UNABLE_PERFORM_ACTION_BT_DISCONNECTED;}
377 else if (g_strcmp0(value, "open") == 0)
378 str = STR_UNABLE_OPEN_APP_BT_DISCONNECTED;
383 _bt_destroy_popup(ad);
385 __bt_draw_popup(ad, STR_TITLE_ERROR,
386 str, STR_OK, STR_CONNECT,
387 __bt_connection_confirm_cb);
392 void _bt_create_connecting_popup(bt_app_data_t *ad)
396 _bt_destroy_popup(ad);
398 __bt_draw_connect_popup(ad, STR_CONNECTING_BT,
399 STR_CANCEL, __bt_connecting_cancel_cb);
401 ad->timer = ecore_timer_add(CONNECT_TIMEOUT,
402 (Ecore_Task_Cb) __bt_connection_timeout_cb, ad);
407 void _bt_create_connection_timeout_popup(bt_app_data_t *ad)
411 _bt_destroy_popup(ad);
413 __bt_draw_popup(ad, STR_TITLE_ERROR,
414 STR_CONNECTION_TIME_OUT_RETRY,
416 __bt_connection_retry_cb);
421 void _bt_create_connected_popup(bt_app_data_t *ad)
425 _bt_destroy_popup(ad);
427 __bt_draw_connected_popup(ad, STR_CONNECTED_BT, NULL);
432 void _bt_update_connect_status_popup(bt_app_data_t *ad)
440 layout = elm_object_content_get(ad->popup);
441 if (layout == NULL) {
442 ERR("Unable to get object");
445 elm_object_part_text_set(layout, "elm.text.subtext", STR_CONNECTED_BT);
447 button = elm_object_part_content_get(ad->popup, "button1");
449 evas_object_del(button);
452 evas_object_show(ad->popup);
453 evas_object_show(ad->window);
456 void _bt_destroy_popup(bt_app_data_t *ad)
464 evas_object_del(ad->popup);
469 void _bt_clean_app(bt_app_data_t *ad)
477 ecore_timer_del(ad->timer);
482 evas_object_del(ad->popup);
487 evas_object_del(ad->window);
492 void _bt_destroy_app(bt_app_data_t *ad)
494 DBG("Terminate app");
498 _bt_dbus_signal_deinit(ad);
499 _bt_unregister_vconf_handler();