4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Contact: Hocheol Seo <hocheol.seo@samsung.com>
7 * GirishAshok Joshi <girish.joshi@samsung.com>
8 * DoHyun Pyun <dh79.pyun@samsung.com>
10 * Licensed under the Flora License, Version 1.0 (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 <bluetooth.h>
26 #include <Elementary.h>
27 #include <Ecore_IMF.h>
28 #include <efl_extension.h>
29 #include <notification.h>
31 #include "bt-main-ug.h"
32 #include "bt-main-view.h"
34 #include "bt-widget.h"
35 #include "bt-type-define.h"
36 #include "bt-string-define.h"
37 #include "bt-profile-view.h"
38 #include "bt-ipc-handler.h"
40 #include "bt-net-connection.h"
41 #include "bluetooth_internal.h"
43 /**********************************************************************
44 * Static Functions declaration
45 ***********************************************************************/
46 int __bt_profile_disconnect_option(bt_ug_data *ugd, bt_dev_t *dev,
49 int __bt_profile_connect_option(bt_ug_data *ugd, bt_dev_t *dev,
52 /**********************************************************************
54 ***********************************************************************/
55 static void __bt_toast_popup_timeout_cb(void *data,
56 Evas_Object *obj, void *event_info)
58 bt_ug_data *ugd = (bt_ug_data *)data;
60 if (ugd->rename_entry)
61 elm_object_focus_set(ugd->rename_entry, EINA_TRUE);
64 void __bt_profile_input_panel_state_cb(void *data, Ecore_IMF_Context *ctx, int value)
70 bt_profile_view_data *vd;
72 dev = (bt_dev_t *)data;
74 ret_if(dev->ugd == NULL);
77 ret_if(ugd->profile_vd == NULL);
80 ret_if(vd->navi_it == NULL);
85 static char *__bt_profile_name_label_get(void *data, Evas_Object *obj, const char *part)
90 bt_dev_t *dev = (bt_dev_t *)data;
92 if (!strcmp("elm.text.sub", part))
93 return strdup(BT_STR_DEVICE_NAME);
94 else if (!strcmp("elm.text", part)) {
95 name = elm_entry_utf8_to_markup(dev->name);
99 return strdup(dev->name);
106 static void __bt_profile_rename_device_entry_changed_cb(void *data, Evas_Object *obj,
111 ret_if(data == NULL);
112 bt_ug_data *ugd = NULL;
114 ugd = (bt_ug_data *)data;
116 const char *entry_text = NULL;
117 char *input_str = NULL;
120 if (ugd->rename_entry != obj)
121 ugd->rename_entry = obj;
123 entry_text = elm_entry_entry_get(obj);
124 input_str = elm_entry_markup_to_utf8(entry_text);
126 if (input_str == NULL || strlen(input_str) == 0 ||
127 _bt_util_is_space_str(input_str)) {
128 elm_object_disabled_set(ugd->rename_button, EINA_TRUE);
129 elm_entry_input_panel_return_key_disabled_set(obj,
132 if (elm_object_disabled_get(ugd->rename_button))
133 elm_object_disabled_set(ugd->rename_button, EINA_FALSE);
134 if (elm_entry_input_panel_return_key_disabled_get(obj))
135 elm_entry_input_panel_return_key_disabled_set(
139 if(input_str != NULL) {
147 static void __bt_profile_rename_device_cancel_cb(void *data, Evas_Object *obj,
151 bt_ug_data *ugd = NULL;
153 ret_if(data == NULL);
154 ugd = (bt_ug_data *)data;
156 if (ugd->rename_entry) {
157 elm_entry_input_panel_hide(ugd->rename_entry);
158 elm_object_focus_set(ugd->rename_entry, EINA_FALSE);
161 if (ugd->rename_popup != NULL) {
162 evas_object_del(ugd->rename_popup);
163 ugd->rename_popup = NULL;
164 ugd->rename_entry = NULL;
170 static void __bt_profile_rename_device_ok_cb(void *data, Evas_Object *obj,
174 bt_dev_t *dev = (bt_dev_t *)data;
176 bt_ug_data *ugd = (bt_ug_data *)dev->ugd;
179 bt_dev_t *temp = NULL;
182 char msg[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
183 Evas_Object *popup = NULL;
185 const char *entry_str = elm_entry_entry_get(ugd->rename_entry);
186 char *device_name_str = NULL;
188 if (ugd->rename_entry) {
189 elm_entry_input_panel_hide(ugd->rename_entry);
190 elm_object_focus_set(ugd->rename_entry, EINA_FALSE);
193 device_name_str = elm_entry_markup_to_utf8(entry_str);
194 ret_if(!device_name_str);
196 EINA_LIST_FOREACH(ugd->paired_device, l, temp) {
198 if (g_strcmp0(temp->name, device_name_str) == 0) {
199 if(g_strcmp0(dev->name, device_name_str) != 0) {
207 EINA_LIST_FOREACH(ugd->searched_device, l, temp) {
209 if (g_strcmp0(temp->name, device_name_str) == 0) {
217 snprintf(msg, sizeof(msg), BT_STR_NAME_IN_USE);
219 popup = elm_popup_add(ugd->win_main);
220 elm_object_style_set(popup, "toast");
221 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
222 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
223 elm_object_text_set(popup, msg);
224 elm_popup_timeout_set(popup, 2.0);
225 evas_object_smart_callback_add(popup, "timeout",
226 __bt_toast_popup_timeout_cb, ugd);
228 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
229 evas_object_show(popup);
231 BT_DBG("Device name:[%s]", device_name_str);
233 str = g_strndup(device_name_str, DEVICE_NAME_MAX_LEN);
234 if (BT_ERROR_NONE == bt_device_set_alias(dev->addr_str, str)) {
235 memset(dev->name, 0, DEVICE_NAME_MAX_LEN + 1);
236 g_strlcpy(dev->name, str, DEVICE_NAME_MAX_LEN + 1);
240 _bt_update_genlist_item((Elm_Object_Item *)ugd->profile_vd->name_item);
241 _bt_update_genlist_item((Elm_Object_Item *)dev->genlist_item);
244 evas_object_del(ugd->rename_popup);
245 ugd->rename_popup = NULL;
246 ugd->rename_entry = NULL;
248 g_free(device_name_str);
252 static void __bt_profile_rename_entry_changed_cb(void *data, Evas_Object *obj,
255 if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
256 if (elm_object_focus_get(obj)) {
257 if (elm_entry_is_empty(obj))
258 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
260 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
263 __bt_profile_rename_device_entry_changed_cb(data, obj, event_info);
266 static void __bt_profile_entry_edit_mode_show_cb(void *data, Evas *e, Evas_Object *obj,
269 evas_object_event_callback_del(obj, EVAS_CALLBACK_SHOW,
270 __bt_profile_entry_edit_mode_show_cb);
272 elm_object_focus_set(obj, EINA_TRUE);
273 elm_entry_cursor_end_set(obj);
276 static void __bt_profile_popup_entry_activated_cb(void *data, Evas_Object *obj, void *event_info)
281 elm_object_focus_set(obj, EINA_FALSE);
284 static Evas_Object *__bt_profile_rename_entry_icon_get(
285 void *data, Evas_Object *obj, const char *part)
288 retv_if (obj == NULL || data == NULL, NULL);
290 bt_dev_t *dev = data;
291 Evas_Object *entry = NULL;
292 char *name_value = NULL;
294 bt_profile_view_data *vd;
295 static Elm_Entry_Filter_Limit_Size limit_filter_data;
297 dev = (bt_dev_t *)data;
298 retv_if(dev == NULL, NULL);
300 ugd = (bt_ug_data *)dev->ugd;
301 retv_if(ugd == NULL, NULL);
303 vd = ugd->profile_vd;
304 retv_if(vd == NULL, NULL);
306 if (!strcmp(part, "elm.swallow.content")) {
307 Evas_Object *layout = NULL;
309 layout = elm_layout_add(obj);
310 elm_layout_theme_set(layout, "layout", "editfield", "singleline");
311 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 0.0);
312 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0.0);
314 name_value = elm_entry_utf8_to_markup(dev->name);
316 entry = elm_entry_add(layout);
317 elm_entry_single_line_set(entry, EINA_TRUE);
318 elm_entry_scrollable_set(entry, EINA_TRUE);
320 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
321 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0.0);
323 eext_entry_selection_back_event_allow_set(entry, EINA_TRUE);
324 elm_object_signal_emit(entry, "elm,action,hide,search_icon", "");
325 elm_object_part_text_set(entry, "guide", BT_STR_DEVICE_NAME);
326 elm_object_text_set(entry, name_value);
327 elm_entry_input_panel_imdata_set(entry, "action=disable_emoticons", 24);
329 elm_entry_input_panel_return_key_type_set(entry, ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
330 limit_filter_data.max_char_count = DEVICE_NAME_MAX_CHARACTER;
331 elm_entry_markup_filter_append(entry,
332 elm_entry_filter_limit_size, &limit_filter_data);
334 elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
336 evas_object_smart_callback_add(entry, "maxlength,reached",
337 _bt_util_max_len_reached_cb, ugd);
338 evas_object_smart_callback_add(entry, "changed",
339 __bt_profile_rename_entry_changed_cb, ugd);
340 evas_object_smart_callback_add(entry, "preedit,changed",
341 __bt_profile_rename_entry_changed_cb, ugd);
342 evas_object_smart_callback_add(entry, "activated",
343 __bt_profile_popup_entry_activated_cb, NULL);
345 evas_object_event_callback_add(entry, EVAS_CALLBACK_SHOW,
346 __bt_profile_entry_edit_mode_show_cb, ugd);
348 elm_entry_input_panel_show(entry);
349 elm_object_part_content_set(layout, "elm.swallow.content", entry);
351 ugd->rename_entry = entry;
362 static void __bt_profile_name_item_sel(void *data, Evas_Object *obj,
367 bt_profile_view_data *vd;
370 elm_genlist_item_selected_set((Elm_Object_Item *)event_info,
372 bt_ug_data *ugd = (bt_ug_data *)data;
375 vd = ugd->profile_vd;
378 bt_dev_t *dev = elm_object_item_data_get((Elm_Object_Item *)event_info);
380 Evas_Object *popup = NULL;
381 Evas_Object *button = NULL;
382 Evas_Object *genlist = NULL;
385 char *name_value = NULL;
387 name_value = elm_entry_utf8_to_markup(dev->name);
389 popup = elm_popup_add(ugd->base);
390 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
391 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
392 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
394 layout = elm_layout_add(popup);
396 elm_layout_file_set(layout, BT_GENLIST_EDJ, "profile_rename_device_ly");
397 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
399 elm_object_domain_translatable_part_text_set(popup,
402 "IDS_ST_HEADER_RENAME_DEVICE");
404 genlist = elm_genlist_add(popup);
405 evas_object_size_hint_weight_set(genlist,
406 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
407 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
408 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
409 elm_scroller_content_min_limit(genlist, EINA_FALSE, EINA_TRUE);
411 /* Entry genlist item */
412 vd->rename_entry_itc = elm_genlist_item_class_new();
413 if (vd->rename_entry_itc) {
414 vd->rename_entry_itc->item_style = BT_GENLIST_FULL_CONTENT_STYLE;
415 vd->rename_entry_itc->func.text_get = NULL;
416 vd->rename_entry_itc->func.content_get = __bt_profile_rename_entry_icon_get;
417 vd->rename_entry_itc->func.state_get = NULL;
418 vd->rename_entry_itc->func.del = NULL;
420 vd->rename_entry_item = elm_genlist_item_append(genlist,
421 vd->rename_entry_itc, dev,
422 NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
425 entry = elm_entry_add(obj);
426 elm_entry_single_line_set(entry, EINA_TRUE);
427 elm_entry_scrollable_set(entry, EINA_TRUE);
429 eext_entry_selection_back_event_allow_set(entry, EINA_TRUE);
430 elm_entry_scrollable_set(entry, EINA_TRUE);
431 elm_object_signal_emit(entry, "elm,action,hide,search_icon", "");
432 elm_object_part_text_set(entry, "elm.guide", BT_STR_DEVICE_NAME);
433 elm_entry_input_panel_imdata_set(entry, "action=disable_emoticons", 24);
435 limit_filter.max_char_count = DEVICE_NAME_MAX_CHARACTER;
436 elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size,
439 elm_entry_input_panel_return_key_type_set(entry,
440 ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
443 elm_entry_entry_set(entry, name_value);
445 elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
447 evas_object_smart_callback_add(entry, "maxlength,reached",
448 _bt_util_max_len_reached_cb, ugd);
449 evas_object_smart_callback_add(entry, "changed",
450 __bt_profile_rename_entry_changed_cb, ugd);
451 evas_object_smart_callback_add(entry, "preedit,changed",
452 __bt_profile_rename_entry_changed_cb, ugd);
453 evas_object_smart_callback_add(entry, "focused",
454 __bt_profile_rename_entry_focused_cb, NULL);
455 evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN,
456 __bt_profile_rename_entry_keydown_cb, ugd);
458 evas_object_show(entry);
459 elm_object_part_content_set(layout, "elm.swallow.layout", entry);
461 elm_object_content_set(popup, layout);
463 button = elm_button_add(popup);
464 elm_object_style_set(button, "popup");
465 elm_object_domain_translatable_text_set(button,
468 elm_object_part_content_set(popup, "button1", button);
469 evas_object_smart_callback_add(button, "clicked",
470 __bt_profile_rename_device_cancel_cb, ugd);
472 button = elm_button_add(popup);
473 ugd->rename_button = button;
474 elm_object_style_set(button, "popup");
475 elm_object_domain_translatable_text_set(button,
477 "IDS_BT_OPT_RENAME");
478 elm_object_part_content_set(popup, "button2", button);
479 evas_object_smart_callback_add(button, "clicked",
480 __bt_profile_rename_device_ok_cb, dev);
482 evas_object_show(genlist);
484 elm_object_content_set(popup, genlist);
485 evas_object_show(popup);
487 if (ugd->rename_entry)
488 elm_object_focus_set(ugd->rename_entry, EINA_TRUE);
490 ugd->rename_popup = popup;
495 static void __bt_profile_unpair_item_sel(void *data, Evas_Object *obj,
499 bt_dev_t *dev = NULL;
502 ret_if(NULL == data);
504 dev = (bt_dev_t *)data;
510 elm_genlist_item_selected_set((Elm_Object_Item *)event_info,
513 /* If rename entry is focused, then unfocus and return */
514 if (ugd->rename_entry && elm_object_focus_get(ugd->rename_entry)) {
515 BT_DBG("Unfocus Rename Entry");
516 elm_object_focus_set(ugd->rename_entry, EINA_FALSE);
520 if (dev->status == BT_DEV_UNPAIRING)
523 dev->status = BT_DEV_UNPAIRING;
524 if (bt_device_destroy_bond(dev->addr_str) != BT_ERROR_NONE) {
525 BT_ERR("Fail to unpair");
526 dev->status = BT_IDLE;
534 static char *__bt_profile_unpair_label_get(void *data, Evas_Object *obj,
539 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
541 if (!strcmp("elm.text", part)) {
542 g_strlcpy(buf, BT_STR_UNPAIR, BT_GLOBALIZATION_STR_LENGTH);
544 BT_ERR("empty text for label");
552 static char *__bt_proflie_title_label_get(void *data, Evas_Object *obj,
557 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
559 if (!strcmp("elm.text", part)) {
561 g_strlcpy(buf, BT_STR_CONNECTION_OPTIONS,
562 BT_GLOBALIZATION_STR_LENGTH);
564 BT_ERR("This part name is not exist in style");
572 #ifndef TELEPHONY_DISABLED
573 static char *__bt_proflie_call_option_label_get(void *data, Evas_Object *obj,
578 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
579 #ifdef KIRAN_ACCESSIBILITY
580 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
583 bt_dev_t *dev_info = NULL;
584 bt_ug_data *ugd = NULL;
586 retv_if(NULL == data, NULL);
587 dev_info = (bt_dev_t *)data;
589 ugd = (bt_ug_data *)(dev_info->ugd);
590 retv_if(NULL == ugd, NULL);
592 if (!strcmp("elm.text", part)) {
593 g_strlcpy(buf, BT_STR_CALL_AUDIO,
594 BT_GLOBALIZATION_STR_LENGTH);
596 BT_ERR("This part name is not exist in style");
600 #ifdef KIRAN_ACCESSIBILITY
601 if (ugd->profile_vd && ugd->profile_vd->call_item) {
602 ao = elm_object_item_access_object_get(
603 ugd->profile_vd->call_item);
604 if (dev_info->status == BT_IDLE) {
605 if (dev_info->call_checked)
606 snprintf(str, sizeof(str), "%s, %s, %s",
609 BT_STR_RADIO_SELECTED);
611 snprintf(str, sizeof(str), "%s, %s, %s",
614 BT_STR_RADIO_UNSELECTED);
616 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
624 static char *__bt_proflie_media_option_label_get(void *data, Evas_Object *obj,
629 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
630 #ifdef KIRAN_ACCESSIBILITY
631 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
634 bt_dev_t *dev_info = NULL;
635 bt_ug_data *ugd = NULL;
637 retv_if(NULL == data, NULL);
638 dev_info = (bt_dev_t *)data;
640 ugd = (bt_ug_data *)(dev_info->ugd);
641 retv_if(NULL == ugd, NULL);
643 if (!strcmp("elm.text", part)) {
644 g_strlcpy(buf, BT_STR_MEDIA_AUDIO,
645 BT_GLOBALIZATION_STR_LENGTH);
647 BT_ERR("This part name is not exist in style");
651 #ifdef KIRAN_ACCESSIBILITY
652 if (ugd->profile_vd && ugd->profile_vd->media_item) {
653 ao = elm_object_item_access_object_get(
654 ugd->profile_vd->media_item);
655 if (dev_info->status == BT_IDLE) {
656 if (dev_info->media_checked)
657 snprintf(str, sizeof(str), "%s, %s, %s",
660 BT_STR_RADIO_SELECTED);
662 snprintf(str, sizeof(str), "%s, %s, %s",
665 BT_STR_RADIO_UNSELECTED);
667 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
674 static char *__bt_proflie_hid_option_label_get(void *data, Evas_Object *obj,
679 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
680 #ifdef KIRAN_ACCESSIBILITY
681 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
684 bt_dev_t *dev_info = NULL;
685 bt_ug_data *ugd = NULL;
687 retv_if(NULL == data, NULL);
688 dev_info = (bt_dev_t *)data;
690 ugd = (bt_ug_data *)(dev_info->ugd);
691 retv_if(NULL == ugd, NULL);
693 if (!strcmp("elm.text", part)) {
694 g_strlcpy(buf, BT_STR_INPUT_DEVICE,
695 BT_GLOBALIZATION_STR_LENGTH);
697 BT_ERR("This part name is not exist in style");
700 #ifdef KIRAN_ACCESSIBILITY
701 if (ugd->profile_vd && ugd->profile_vd->hid_item) {
702 ao = elm_object_item_access_object_get(
703 ugd->profile_vd->hid_item);
704 if (dev_info->status == BT_IDLE) {
705 if (dev_info->hid_checked)
706 snprintf(str, sizeof(str), "%s, %s, %s",
709 BT_STR_RADIO_SELECTED);
711 snprintf(str, sizeof(str), "%s, %s, %s",
714 BT_STR_RADIO_UNSELECTED);
716 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
723 static char *__bt_proflie_nap_option_label_get(void *data, Evas_Object *obj,
728 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
729 #ifdef KIRAN_ACCESSIBILITY
730 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
733 bt_dev_t *dev_info = NULL;
734 bt_ug_data *ugd = NULL;
736 retv_if(NULL == data, NULL);
737 dev_info = (bt_dev_t *)data;
739 ugd = (bt_ug_data *)(dev_info->ugd);
740 retv_if(NULL == ugd, NULL);
742 if (!strcmp("elm.text", part)) {
743 g_strlcpy(buf, BT_STR_INTERNET_ACCESS,
744 BT_GLOBALIZATION_STR_LENGTH);
746 BT_ERR("This part name is not exist in style");
750 #ifdef KIRAN_ACCESSIBILITY
751 if (ugd->profile_vd && ugd->profile_vd->network_item) {
752 ao = elm_object_item_access_object_get(
753 ugd->profile_vd->network_item);
754 if (dev_info->status == BT_IDLE) {
755 if (dev_info->network_checked)
756 snprintf(str, sizeof(str), "%s, %s, %s",
757 BT_STR_INTERNET_ACCESS,
759 BT_STR_RADIO_SELECTED);
761 snprintf(str, sizeof(str), "%s, %s, %s",
762 BT_STR_INTERNET_ACCESS,
764 BT_STR_RADIO_UNSELECTED);
766 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
773 #ifndef TELEPHONY_DISABLED
774 static void __bt_profile_call_option_checkbox_sel(void *data, Evas_Object *obj,
778 bt_dev_t *dev = NULL;
781 dev = (bt_dev_t *)data;
782 ret_if(dev->ugd == NULL);
784 if (dev->status == BT_DEV_UNPAIRING)
787 if (dev->connected_mask & BT_HEADSET_CONNECTED) {
788 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
789 dev, BT_HEADSET_DEVICE);
791 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
792 dev, BT_HEADSET_DEVICE);
795 if (ret == BT_UG_FAIL)
796 elm_check_state_set(obj, dev->call_checked);
802 static void __bt_profile_media_option_checkbox_sel(void *data, Evas_Object *obj,
806 bt_dev_t *dev = NULL;
809 dev = (bt_dev_t *)data;
810 ret_if(dev->ugd == NULL);
812 if (dev->status == BT_DEV_UNPAIRING)
815 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
816 if (dev->connected_mask & BT_MUSIC_PLAYER_CONNECTED) {
817 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
818 dev, BT_MUSIC_PLAYER_DEVICE);
820 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
821 dev, BT_MUSIC_PLAYER_DEVICE);
824 if (dev->connected_mask & BT_STEREO_HEADSET_CONNECTED) {
825 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
826 dev, BT_STEREO_HEADSET_DEVICE);
828 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
829 dev, BT_STEREO_HEADSET_DEVICE);
833 if (ret == BT_UG_FAIL)
834 elm_check_state_set(obj, dev->media_checked);
840 static void __bt_profile_hid_option_checkbox_sel(void *data, Evas_Object *obj,
844 bt_dev_t *dev = NULL;
847 dev = (bt_dev_t *)data;
848 ret_if(dev->ugd == NULL);
850 if (dev->status == BT_DEV_UNPAIRING)
853 if (dev->connected_mask & BT_HID_CONNECTED) {
854 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
857 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
861 if (ret == BT_UG_FAIL)
862 elm_check_state_set(obj, dev->hid_checked);
867 static void __bt_profile_nap_option_checkbox_sel(void *data, Evas_Object *obj,
871 bt_dev_t *dev = NULL;
874 dev = (bt_dev_t *)data;
875 ret_if(dev->ugd == NULL);
877 if (dev->status == BT_DEV_UNPAIRING)
880 if (dev->connected_mask & BT_NETWORK_CONNECTED) {
881 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
882 dev, BT_NETWORK_DEVICE);
884 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
885 dev, BT_NETWORK_DEVICE);
888 if (ret == BT_UG_FAIL)
889 elm_check_state_set(obj, dev->network_checked);
895 #ifndef TELEPHONY_DISABLED
896 static Evas_Object *__bt_profile_call_option_icon_get(void *data, Evas_Object *obj,
901 Evas_Object *check = NULL;
902 bt_dev_t *dev = NULL;
904 retv_if(NULL == data, NULL);
906 dev = (bt_dev_t *)data;
908 if (!strcmp("elm.swallow.end", part)) {
909 check = elm_check_add(obj);
910 elm_object_style_set(check, "on&off");
912 dev->call_checked = dev->connected_mask & \
913 BT_HEADSET_CONNECTED;
914 elm_check_state_set(check, dev->call_checked);
916 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
918 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
921 evas_object_smart_callback_add(check, "changed", __bt_profile_call_option_checkbox_sel, dev);
923 evas_object_propagate_events_set(check, EINA_FALSE);
924 evas_object_show(check);
931 static Evas_Object *__bt_profile_media_option_icon_get(void *data, Evas_Object *obj,
936 Evas_Object *check = NULL;
937 bt_dev_t *dev = NULL;
939 retv_if(NULL == data, NULL);
941 dev = (bt_dev_t *)data;
943 if (!strcmp("elm.swallow.end", part)) {
944 check = elm_check_add(obj);
945 elm_object_style_set(check, "on&off");
946 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
947 dev->media_checked = dev->connected_mask & \
948 BT_MUSIC_PLAYER_CONNECTED;
950 dev->media_checked = dev->connected_mask & \
951 BT_STEREO_HEADSET_CONNECTED;
953 elm_check_state_set(check, dev->media_checked);
955 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
957 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
960 evas_object_smart_callback_add(check, "changed", __bt_profile_media_option_checkbox_sel, dev);
962 evas_object_propagate_events_set(check, EINA_FALSE);
963 evas_object_show(check);
969 static Evas_Object *__bt_profile_hid_option_icon_get(void *data, Evas_Object *obj,
974 Evas_Object *check = NULL;
975 bt_dev_t *dev = NULL;
977 retv_if(NULL == data, NULL);
979 dev = (bt_dev_t *)data;
981 if (!strcmp("elm.swallow.end", part)) {
982 check = elm_check_add(obj);
983 elm_object_style_set(check, "on&off");
985 dev->hid_checked = dev->connected_mask & \
987 elm_check_state_set(check, dev->hid_checked);
989 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
991 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
994 evas_object_smart_callback_add(check, "changed", __bt_profile_hid_option_checkbox_sel, dev);
996 evas_object_propagate_events_set(check, EINA_FALSE);
997 evas_object_show(check);
1003 static Evas_Object *__bt_profile_nap_option_icon_get(void *data, Evas_Object *obj,
1008 Evas_Object *check = NULL;
1009 bt_dev_t *dev = NULL;
1011 retv_if(NULL == data, NULL);
1013 dev = (bt_dev_t *)data;
1015 if (!strcmp("elm.swallow.end", part)) {
1016 check = elm_check_add(obj);
1017 elm_object_style_set(check, "on&off");
1019 dev->network_checked = dev->connected_mask & \
1020 BT_NETWORK_CONNECTED;
1021 elm_check_state_set(check, dev->network_checked);
1023 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
1025 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
1028 evas_object_smart_callback_add(check, "changed", __bt_profile_nap_option_checkbox_sel, dev);
1030 evas_object_propagate_events_set(check, EINA_FALSE);
1031 evas_object_show(check);
1037 int __bt_profile_connect_option(bt_ug_data *ugd, bt_dev_t *dev,
1038 bt_device_type type)
1044 retv_if(ugd == NULL, BT_UG_FAIL);
1045 retv_if(dev == NULL, BT_UG_FAIL);
1047 if (type == BT_HEADSET_DEVICE || type == BT_STEREO_HEADSET_DEVICE ||
1048 type == BT_MUSIC_PLAYER_DEVICE) {
1049 if (type == BT_STEREO_HEADSET_DEVICE)
1050 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP;
1051 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1052 else if (type == BT_MUSIC_PLAYER_DEVICE)
1053 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP_SINK;
1056 audio_profile = BT_AUDIO_PROFILE_TYPE_HSP_HFP;
1058 if (bt_audio_connect(dev->addr_str,
1059 audio_profile) != BT_ERROR_NONE) {
1060 BT_ERR("Fail to connect Headset device");
1063 } else if (type == BT_HID_DEVICE) {
1066 BT_DBG("HID connect request");
1068 if (bt_hid_host_connect(dev->addr_str) != BT_ERROR_NONE) {
1072 } else if (type == BT_NETWORK_DEVICE){
1073 BT_DBG("Network connect request");
1077 if (dev->net_profile) {
1078 if (_bt_connect_net_profile(ugd->connection,
1080 dev) != BT_UG_ERROR_NONE) {
1081 BT_ERR("Fail to connect the net profile");
1086 _bt_get_registered_net_profile(ugd->connection,
1089 _bt_set_profile_state_changed_cb(net_profile, dev);
1091 if (_bt_connect_net_profile(ugd->connection,
1093 dev) != BT_UG_ERROR_NONE) {
1094 BT_ERR("Fail to connect the net profile");
1098 BT_ERR("No registered net profile");
1103 BT_ERR("Unknown type");
1107 ugd->connect_req = TRUE;
1108 dev->status = BT_CONNECTING;
1109 _bt_update_genlist_item((Elm_Object_Item *)dev->genlist_item);
1111 retv_if(ugd->profile_vd == NULL, BT_UG_FAIL);
1113 if (ugd->profile_vd->genlist) {
1114 _bt_util_set_list_disabled(ugd->profile_vd->genlist,
1119 return BT_UG_ERROR_NONE;
1122 int __bt_profile_disconnect_option(bt_ug_data *ugd, bt_dev_t *dev,
1123 bt_device_type type)
1128 bt_ug_ipc_param_t param;
1129 gboolean connected = FALSE;
1130 gboolean connected_nap_profile = FALSE;
1132 retv_if(ugd == NULL, BT_UG_FAIL);
1133 retv_if(dev == NULL, BT_UG_FAIL);
1135 memset(¶m, 0x00, sizeof(bt_ug_ipc_param_t));
1136 memcpy(param.param2, dev->bd_addr, BT_ADDRESS_LENGTH_MAX);
1138 if (type == BT_HEADSET_DEVICE) {
1139 connected = _bt_util_is_profile_connected(BT_HEADSET_CONNECTED,
1141 } else if (type == BT_STEREO_HEADSET_DEVICE) {
1142 connected = _bt_util_is_profile_connected(BT_STEREO_HEADSET_CONNECTED,
1144 } else if (type == BT_MUSIC_PLAYER_DEVICE) {
1145 connected = _bt_util_is_profile_connected(BT_MUSIC_PLAYER_CONNECTED,
1147 } else if (type == BT_HID_DEVICE) {
1148 connected = _bt_util_is_profile_connected(BT_HID_CONNECTED,
1150 } else if (type == BT_NETWORK_DEVICE) {
1151 connected = _bt_util_is_profile_connected(BT_NETWORK_CONNECTED,
1155 connected = _bt_util_is_profile_connected(BT_NETWORK_SERVER_CONNECTED,
1157 connected_nap_profile = connected;
1161 if (connected == FALSE) {
1162 BT_ERR("Not connected");
1166 if (type == BT_HEADSET_DEVICE || type == BT_STEREO_HEADSET_DEVICE ||
1167 type == BT_MUSIC_PLAYER_DEVICE) {
1168 if (type == BT_STEREO_HEADSET_DEVICE)
1169 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP;
1170 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1171 else if (type == BT_MUSIC_PLAYER_DEVICE)
1172 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP_SINK;
1175 audio_profile = BT_AUDIO_PROFILE_TYPE_HSP_HFP;
1177 if (bt_audio_disconnect(dev->addr_str,
1178 audio_profile) != BT_ERROR_NONE) {
1179 BT_ERR("Fail to connect Headset device");
1182 } else if (type == BT_HID_DEVICE) {
1183 BT_DBG("Disconnecting HID service!!");
1185 if (bt_hid_host_disconnect(dev->addr_str) != BT_ERROR_NONE) {
1186 BT_ERR("Fail to disconnect HID device");
1189 } else if (type == BT_NETWORK_DEVICE) {
1193 if (connected_nap_profile == FALSE) {
1194 BT_DBG("Disconnecting network service!! [PANU]");
1195 if (dev->net_profile) {
1196 if (_bt_disconnect_net_profile(ugd->connection,
1198 dev) != BT_UG_ERROR_NONE) {
1199 BT_ERR("Fail to disconnect the net profile");
1204 _bt_get_registered_net_profile(ugd->connection,
1207 _bt_set_profile_state_changed_cb(net_profile, dev);
1208 if (_bt_disconnect_net_profile(ugd->connection,
1210 dev) != BT_UG_ERROR_NONE) {
1211 BT_ERR("Fail to disconnect the net profile");
1215 BT_ERR("No registered net profile");
1220 BT_DBG("Disconnecting network service!! [NAP]");
1221 if (bt_nap_disconnect(dev->addr_str) == BT_UG_ERROR_NONE)
1222 BT_ERR("Failed to disconnect pan server");
1226 BT_ERR("Unknown type");
1230 ugd->connect_req = TRUE;
1231 dev->status = BT_DISCONNECTING;
1232 _bt_update_genlist_item((Elm_Object_Item *)dev->genlist_item);
1234 if (ugd->profile_vd->genlist) {
1235 _bt_util_set_list_disabled(ugd->profile_vd->genlist,
1240 return BT_UG_ERROR_NONE;
1243 #ifndef TELEPHONY_DISABLED
1244 static void __bt_profile_call_option_item_sel(void *data, Evas_Object *obj,
1249 bt_dev_t *dev = NULL;
1250 Elm_Object_Item *item = NULL;
1252 ret_if(event_info == NULL);
1255 item = (Elm_Object_Item *)event_info;
1256 elm_genlist_item_selected_set(item, EINA_FALSE);
1259 ret_if(data == NULL);
1261 dev = (bt_dev_t *)data;
1262 ret_if(dev->ugd == NULL);
1264 if (dev->status == BT_DEV_UNPAIRING)
1267 if (dev->connected_mask & BT_HEADSET_CONNECTED) {
1268 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1269 dev, BT_HEADSET_DEVICE);
1271 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1272 dev, BT_HEADSET_DEVICE);
1274 _bt_update_genlist_item(item);
1280 static void __bt_profile_media_option_item_sel(void *data, Evas_Object *obj,
1285 bt_dev_t *dev = NULL;
1286 Elm_Object_Item *item = NULL;
1288 ret_if(event_info == NULL);
1291 item = (Elm_Object_Item *)event_info;
1292 elm_genlist_item_selected_set(item, EINA_FALSE);
1295 ret_if(data == NULL);
1297 dev = (bt_dev_t *)data;
1298 ret_if(dev->ugd == NULL);
1300 if (dev->status == BT_DEV_UNPAIRING)
1302 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1303 if (dev->connected_mask & BT_MUSIC_PLAYER_CONNECTED) {
1304 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1305 dev, BT_MUSIC_PLAYER_DEVICE);
1307 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1308 dev, BT_MUSIC_PLAYER_DEVICE);
1311 if (dev->connected_mask & BT_STEREO_HEADSET_CONNECTED) {
1312 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1313 dev, BT_STEREO_HEADSET_DEVICE);
1315 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1316 dev, BT_STEREO_HEADSET_DEVICE);
1320 _bt_update_genlist_item(item);
1326 static void __bt_profile_hid_option_item_sel(void *data, Evas_Object *obj,
1331 bt_dev_t *dev = NULL;
1332 Elm_Object_Item *item = NULL;
1334 ret_if(event_info == NULL);
1337 item = (Elm_Object_Item *)event_info;
1338 elm_genlist_item_selected_set(item, EINA_FALSE);
1341 ret_if(data == NULL);
1343 dev = (bt_dev_t *)data;
1344 ret_if(dev->ugd == NULL);
1346 if (dev->status == BT_DEV_UNPAIRING)
1349 if (dev->connected_mask & BT_HID_CONNECTED) {
1350 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1351 dev, BT_HID_DEVICE);
1353 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1354 dev, BT_HID_DEVICE);
1356 _bt_update_genlist_item(item);
1362 static void __bt_profile_nap_option_item_sel(void *data, Evas_Object *obj,
1367 bt_dev_t *dev = NULL;
1368 Elm_Object_Item *item = NULL;
1370 ret_if(event_info == NULL);
1373 item = (Elm_Object_Item *)event_info;
1374 elm_genlist_item_selected_set(item, EINA_FALSE);
1377 ret_if(data == NULL);
1379 dev = (bt_dev_t *)data;
1380 ret_if(dev->ugd == NULL);
1382 if (dev->status == BT_DEV_UNPAIRING)
1385 if (dev->connected_mask & BT_NETWORK_CONNECTED) {
1386 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1387 dev, BT_NETWORK_DEVICE);
1389 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1390 dev, BT_NETWORK_DEVICE);
1393 _bt_update_genlist_item(item);
1398 void _bt_update_detail_item_style(bt_profile_view_data *vd)
1404 Elm_Object_Item *item = NULL;
1407 ret_if(vd->genlist == NULL);
1409 item_count = elm_genlist_items_count(vd->genlist);
1411 BT_INFO("item_count %d", item_count);
1413 if (vd->title_item == NULL || item_count < 4)
1415 /* Do not need to take care first 4 items as they are fixed */
1416 item_count = item_count - 5;
1418 item = elm_genlist_item_next_get(vd->title_item);
1420 while (item != NULL) {
1421 if (item_count == 1) {
1422 elm_object_item_signal_emit(item, "elm,state,normal", "");
1424 } else if (i == 1) {
1425 elm_object_item_signal_emit(item, "elm,state,top", "");
1427 } else if (item_count == i) {
1428 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1431 elm_object_item_signal_emit(item, "elm,state,center", "");
1435 item = elm_genlist_item_next_get(item);
1441 static int __bt_profile_get_item_type(bt_profile_view_data *vd, Elm_Object_Item *item)
1443 retv_if(vd == NULL, BT_ITEM_NONE);
1444 retv_if(item == NULL, BT_ITEM_NONE);
1446 if (item == vd->name_item) {
1447 return BT_ITEM_NAME;
1448 } else if (item == vd->unpair_item) {
1449 return BT_ITEM_UNPAIR;
1450 #ifndef TELEPHONY_DISABLED
1451 } else if (item == vd->call_item) {
1452 return BT_ITEM_CALL;
1454 } else if (item == vd->media_item) {
1455 return BT_ITEM_MEDIA;
1456 } else if (item == vd->hid_item) {
1458 } else if (item == vd->network_item) {
1459 return BT_ITEM_NETWORK;
1462 return BT_ITEM_NONE;
1465 static void __bt_profile_gl_realized(void *data, Evas_Object *obj, void *event_info)
1471 bt_profile_view_data *vd;
1472 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
1473 #ifdef KIRAN_ACCESSIBILITY
1475 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
1479 ret_if(data == NULL);
1480 ret_if(item == NULL);
1482 ugd = (bt_ug_data *)data;
1484 vd = ugd->profile_vd;
1487 item_type = __bt_profile_get_item_type(vd, item);
1489 BT_INFO("type: %d", item_type);
1490 #ifdef KIRAN_ACCESSIBILITY
1491 dev_info = (bt_dev_t *)elm_object_item_data_get(item);
1492 ao = elm_object_item_access_object_get(item);
1494 switch (item_type) {
1496 elm_object_item_signal_emit(item, "elm,state,top", "");
1498 #ifdef KIRAN_ACCESSIBILITY
1499 if (dev_info != NULL)
1500 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_DEVICE_NAME,
1501 dev_info->name, BT_STR_DOUBLE_TAP_RENAME);
1503 snprintf(str, sizeof(str), "%s, %s", BT_STR_DEVICE_NAME,
1504 BT_STR_DOUBLE_TAP_RENAME);
1506 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1509 case BT_ITEM_UNPAIR:
1510 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1512 #ifdef KIRAN_ACCESSIBILITY
1513 snprintf(str, sizeof(str), "%s, %s", BT_STR_UNPAIR,
1514 BT_STR_DOUBLE_TAP_UNPAIR);
1515 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1519 #ifndef TELEPHONY_DISABLED
1521 #ifdef KIRAN_ACCESSIBILITY
1522 if (dev_info->call_checked)
1523 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_CALL_AUDIO,
1524 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1526 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_CALL_AUDIO,
1527 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1528 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1533 #ifdef KIRAN_ACCESSIBILITY
1534 if (dev_info->media_checked)
1535 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_MEDIA_AUDIO,
1536 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1538 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_MEDIA_AUDIO,
1539 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1540 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1545 #ifdef KIRAN_ACCESSIBILITY
1546 if (dev_info->hid_checked)
1547 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INPUT_DEVICE,
1548 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1550 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INPUT_DEVICE,
1551 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1552 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1556 case BT_ITEM_NETWORK:
1557 #ifdef KIRAN_ACCESSIBILITY
1558 if (dev_info->network_checked)
1559 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INTERNET_ACCESS,
1560 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1562 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INTERNET_ACCESS,
1563 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1564 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1573 _bt_update_detail_item_style(vd);
1577 /* Create genlist and append items */
1578 static Evas_Object *__bt_profile_draw_genlist(bt_ug_data *ugd, bt_dev_t *dev_info)
1582 bt_profile_view_data *vd = NULL;
1583 Evas_Object *genlist = NULL;
1584 Elm_Object_Item *git = NULL;
1586 retv_if(ugd == NULL, NULL);
1587 retv_if(ugd->profile_vd == NULL, NULL);
1589 vd = ugd->profile_vd;
1591 /* Set item class for dialogue normal items */
1592 vd->name_itc = elm_genlist_item_class_new();
1593 retv_if (vd->name_itc == NULL, NULL);
1594 vd->name_itc->item_style = BT_GENLIST_2LINE_BOTTOM_TEXT_STYLE;
1595 vd->name_itc->func.text_get = __bt_profile_name_label_get;
1596 vd->name_itc->func.content_get = NULL;
1597 vd->name_itc->func.state_get = NULL;
1598 vd->name_itc->func.del = NULL;
1600 vd->unpair_itc = elm_genlist_item_class_new();
1601 retv_if (vd->unpair_itc == NULL, NULL);
1603 vd->unpair_itc->item_style = BT_GENLIST_1LINE_TEXT_STYLE;
1604 vd->unpair_itc->func.text_get = __bt_profile_unpair_label_get;
1605 vd->unpair_itc->func.content_get = NULL;
1606 vd->unpair_itc->func.state_get = NULL;
1607 vd->unpair_itc->func.del = NULL;
1609 /* Create genlist */
1610 genlist = elm_genlist_add(ugd->navi_bar);
1611 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1612 elm_genlist_homogeneous_set(genlist, EINA_FALSE);
1613 elm_genlist_block_count_set(genlist, 3);
1615 evas_object_smart_callback_add(genlist, "realized",
1616 __bt_profile_gl_realized, ugd);
1618 /* device name item */
1619 git = elm_genlist_item_append(genlist, vd->name_itc, dev_info, NULL,
1620 ELM_GENLIST_ITEM_NONE,
1621 __bt_profile_name_item_sel, ugd);
1622 vd->name_item = git;
1625 git = elm_genlist_item_append(genlist, vd->unpair_itc, NULL, NULL,
1626 ELM_GENLIST_ITEM_NONE,
1627 __bt_profile_unpair_item_sel, dev_info);
1628 vd->unpair_item = git;
1630 /* If the device has no headset profile, exit this function */
1631 if (!(dev_info->service_list & BT_SC_HFP_SERVICE_MASK) &&
1632 !(dev_info->service_list & BT_SC_HSP_SERVICE_MASK) &&
1633 !(dev_info->service_list & BT_SC_A2DP_SERVICE_MASK) &&
1634 !(dev_info->service_list & BT_SC_A2DP_SOURCE_SERVICE_MASK) &&
1635 !(dev_info->service_list & BT_SC_HID_SERVICE_MASK) &&
1636 !(dev_info->service_list & BT_SC_NAP_SERVICE_MASK)) {
1640 vd->title_itc = elm_genlist_item_class_new();
1641 retv_if (vd->title_itc == NULL, NULL);
1643 vd->title_itc->item_style = BT_GENLIST_GROUP_INDEX_STYLE;
1644 vd->title_itc->func.text_get = __bt_proflie_title_label_get;
1645 vd->title_itc->func.content_get = NULL;
1646 vd->title_itc->func.state_get = NULL;
1647 vd->title_itc->func.del = NULL;
1649 #ifndef TELEPHONY_DISABLED
1650 vd->call_itc = elm_genlist_item_class_new();
1651 retv_if (vd->call_itc == NULL, NULL);
1653 vd->call_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
1654 vd->call_itc->func.text_get = __bt_proflie_call_option_label_get;
1655 vd->call_itc->func.content_get = __bt_profile_call_option_icon_get;
1656 vd->call_itc->func.state_get = NULL;
1657 vd->call_itc->func.del = NULL;
1659 vd->media_itc = elm_genlist_item_class_new();
1660 retv_if (vd->media_itc == NULL, NULL);
1662 vd->media_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
1663 vd->media_itc->func.text_get = __bt_proflie_media_option_label_get;
1664 vd->media_itc->func.content_get = __bt_profile_media_option_icon_get;
1665 vd->media_itc->func.state_get = NULL;
1666 vd->media_itc->func.del = NULL;
1668 vd->hid_itc = elm_genlist_item_class_new();
1669 retv_if (vd->hid_itc == NULL, NULL);
1671 vd->hid_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
1672 vd->hid_itc->func.text_get = __bt_proflie_hid_option_label_get;
1673 vd->hid_itc->func.content_get = __bt_profile_hid_option_icon_get;
1674 vd->hid_itc->func.state_get = NULL;
1675 vd->hid_itc->func.del = NULL;
1677 #ifndef TIZEN_BT_A2DP_SINK_ENABLE
1678 vd->network_itc = elm_genlist_item_class_new();
1679 retv_if (vd->network_itc == NULL, NULL);
1681 vd->network_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
1682 vd->network_itc->func.text_get = __bt_proflie_nap_option_label_get;
1683 vd->network_itc->func.content_get = __bt_profile_nap_option_icon_get;
1684 vd->network_itc->func.state_get = NULL;
1685 vd->network_itc->func.del = NULL;
1687 /* Connection options title */
1688 git = elm_genlist_item_append(genlist, vd->title_itc, NULL, NULL,
1689 ELM_GENLIST_ITEM_NONE,
1692 elm_genlist_item_select_mode_set(git,
1693 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1695 vd->title_item = git;
1697 #ifndef TELEPHONY_DISABLED
1698 if (dev_info->service_list & BT_SC_HFP_SERVICE_MASK ||
1699 dev_info->service_list & BT_SC_HSP_SERVICE_MASK) {
1701 git = elm_genlist_item_append(genlist, vd->call_itc,
1703 ELM_GENLIST_ITEM_NONE,
1704 __bt_profile_call_option_item_sel,
1706 vd->call_item = git;
1709 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1710 if (dev_info->service_list & BT_SC_A2DP_SOURCE_SERVICE_MASK) {
1712 if (dev_info->service_list & BT_SC_A2DP_SERVICE_MASK) {
1715 git = elm_genlist_item_append(genlist, vd->media_itc,
1717 ELM_GENLIST_ITEM_NONE,
1718 __bt_profile_media_option_item_sel,
1721 vd->media_item = git;
1723 BT_INFO("service list: %x", dev_info->service_list);
1724 BT_INFO("is hid: %d", dev_info->service_list & BT_SC_HID_SERVICE_MASK);
1726 if (dev_info->service_list & BT_SC_HID_SERVICE_MASK) {
1729 git = elm_genlist_item_append(genlist, vd->hid_itc,
1731 ELM_GENLIST_ITEM_NONE,
1732 __bt_profile_hid_option_item_sel,
1737 BT_INFO("HID options is disabled");
1738 git = elm_genlist_item_append(genlist, vd->hid_itc,
1740 ELM_GENLIST_ITEM_NONE,
1744 BT_INFO("HID item disabled");
1745 elm_object_item_disabled_set (vd->hid_item, EINA_TRUE);
1749 #ifndef TIZEN_BT_A2DP_SINK_ENABLE
1750 if (dev_info->service_list & BT_SC_NAP_SERVICE_MASK) {
1752 git = elm_genlist_item_append(genlist, vd->network_itc,
1754 ELM_GENLIST_ITEM_NONE,
1755 __bt_profile_nap_option_item_sel,
1757 vd->network_item = git;
1765 void _bt_profile_destroy_profile_view(void *data)
1769 bt_ug_data *ugd = (bt_ug_data *)data;
1770 bt_profile_view_data *vd = NULL;
1772 ret_if(ugd == NULL);
1773 ret_if(ugd->profile_vd == NULL);
1775 vd = ugd->profile_vd;
1778 elm_genlist_item_class_free(vd->name_itc);
1779 vd->name_itc = NULL;
1782 if (vd->unpair_itc) {
1783 elm_genlist_item_class_free(vd->unpair_itc);
1784 vd->unpair_itc = NULL;
1787 if (vd->title_itc) {
1788 elm_genlist_item_class_free(vd->title_itc);
1789 vd->title_itc = NULL;
1792 #ifndef TELEPHONY_DISABLED
1794 elm_genlist_item_class_free(vd->call_itc);
1795 vd->call_itc = NULL;
1799 if (vd->media_itc) {
1800 elm_genlist_item_class_free(vd->media_itc);
1801 vd->media_itc = NULL;
1805 elm_genlist_item_class_free(vd->hid_itc);
1808 #ifndef TIZEN_BT_A2DP_SINK_ENABLE
1809 if (vd->network_itc) {
1810 elm_genlist_item_class_free(vd->network_itc);
1811 vd->network_itc = NULL;
1814 vd->save_btn = NULL;
1816 /* unregister callback functions */
1817 if (vd->imf_context) {
1818 ecore_imf_context_input_panel_event_callback_del(vd->imf_context,
1819 ECORE_IMF_INPUT_PANEL_STATE_EVENT,
1820 __bt_profile_input_panel_state_cb);
1821 vd->imf_context = NULL;
1825 ugd->profile_vd = NULL;
1830 static Eina_Bool __bt_profile_back_clicked_cb(void *data, Elm_Object_Item *it)
1833 retv_if(!data, EINA_TRUE);
1835 bt_ug_data *ugd = (bt_ug_data *)data;
1836 ugd->profile_vd = NULL;
1838 if (ugd->popup != NULL){
1839 evas_object_del(ugd->popup);
1841 ugd->is_popup_exist = 0;
1848 static void __bt_profile_back_cb(void *data, Evas_Object *obj, void *event_info)
1850 _bt_profile_delete_view(data);
1853 /**********************************************************************
1855 ***********************************************************************/
1857 void _bt_profile_create_view(bt_dev_t *dev_info)
1861 bt_profile_view_data *vd;
1863 Evas_Object *genlist;
1864 Elm_Object_Item *navi_it;
1865 Evas_Object *back_button = NULL;
1868 ret_if(dev_info == NULL);
1869 ret_if(dev_info->ugd == NULL);
1871 ugd = dev_info->ugd;
1873 vd = calloc(1, sizeof(bt_profile_view_data));
1876 ugd->profile_vd = vd;
1877 vd->win_main = ugd->win_main;
1878 vd->navi_bar = ugd->navi_bar;
1881 if (dev_info->service_list & BT_SC_HFP_SERVICE_MASK ||
1882 dev_info->service_list & BT_SC_HSP_SERVICE_MASK ||
1883 dev_info->service_list & BT_SC_A2DP_SERVICE_MASK) {
1884 connected = _bt_util_is_profile_connected(BT_HEADSET_CONNECTED,
1886 dev_info->connected_mask |= connected ? BT_HEADSET_CONNECTED : 0x00;
1889 _bt_util_is_profile_connected(BT_STEREO_HEADSET_CONNECTED,
1891 dev_info->connected_mask |=
1892 connected ? BT_STEREO_HEADSET_CONNECTED : 0x00;
1893 } else if (dev_info->service_list & BT_SC_A2DP_SOURCE_SERVICE_MASK ) {
1894 connected = _bt_util_is_profile_connected(BT_MUSIC_PLAYER_CONNECTED,
1896 dev_info->connected_mask |=
1897 connected ? BT_MUSIC_PLAYER_CONNECTED : 0x00;
1898 } else if (dev_info->service_list & BT_SC_HID_SERVICE_MASK) {
1899 connected = _bt_util_is_profile_connected(BT_HID_CONNECTED,
1901 dev_info->connected_mask |= connected ? BT_HID_CONNECTED : 0x00;
1903 connected = _bt_util_is_profile_connected(BT_NETWORK_CONNECTED,
1906 connected = _bt_util_is_profile_connected(
1907 BT_NETWORK_SERVER_CONNECTED,
1909 dev_info->connected_mask |= connected ? BT_NETWORK_CONNECTED : 0x00;
1912 genlist = __bt_profile_draw_genlist(ugd, dev_info);
1913 vd->genlist = genlist;
1915 /* Set ugd as genlist object data. */
1916 /* We can get this data from genlist object anytime. */
1917 evas_object_data_set(genlist, "view_data", vd);
1919 back_button = elm_button_add(vd->navi_bar);
1920 elm_object_style_set(back_button, "naviframe/end_btn/default");
1922 navi_it = elm_naviframe_item_push(vd->navi_bar, BT_STR_DETAILS,
1923 back_button, NULL, genlist, NULL);
1925 vd->navi_it = navi_it;
1927 evas_object_smart_callback_add(back_button, "clicked", __bt_profile_back_cb, ugd);
1929 elm_naviframe_prev_btn_auto_pushed_set(vd->navi_bar, EINA_FALSE);
1931 elm_naviframe_item_pop_cb_set(navi_it, __bt_profile_back_clicked_cb,
1940 void _bt_profile_delete_view(void *data)
1946 ret_if(data == NULL);
1948 ugd = (bt_ug_data *)data;
1950 _bt_profile_destroy_profile_view(ugd);
1952 elm_naviframe_item_pop(ugd->navi_bar);
1954 if (ugd->rename_popup != NULL) {
1955 BT_INFO("Destorying rename_popup");
1956 evas_object_del(ugd->rename_popup);
1957 ugd->rename_popup = NULL;
1958 ugd->rename_entry = NULL;