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_assist.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"
42 /**********************************************************************
43 * Static Functions declaration
44 ***********************************************************************/
45 int __bt_profile_disconnect_option(bt_ug_data *ugd, bt_dev_t *dev,
48 int __bt_profile_connect_option(bt_ug_data *ugd, bt_dev_t *dev,
51 /**********************************************************************
53 ***********************************************************************/
54 static void __bt_toast_popup_timeout_cb(void *data,
55 Evas_Object *obj, void *event_info)
57 bt_ug_data *ugd = (bt_ug_data *)data;
59 if (ugd->rename_entry)
60 elm_object_focus_set(ugd->rename_entry, EINA_TRUE);
63 void __bt_profile_input_panel_state_cb(void *data, Ecore_IMF_Context *ctx, int value)
69 bt_profile_view_data *vd;
71 dev = (bt_dev_t *)data;
73 ret_if(dev->ugd == NULL);
76 ret_if(ugd->profile_vd == NULL);
79 ret_if(vd->navi_it == NULL);
84 static char *__bt_profile_name_label_get(void *data, Evas_Object *obj, const char *part)
89 bt_dev_t *dev = (bt_dev_t *)data;
90 if (!strcmp(part, "elm.text.sub.left.top"))
91 return strdup(BT_STR_DEVICE_NAME);
92 else if (!strcmp(part, "elm.text.main.left.bottom")) {
93 name = elm_entry_utf8_to_markup(dev->name);
97 return strdup(dev->name);
104 static void __bt_profile_rename_device_entry_changed_cb(void *data, Evas_Object *obj,
109 ret_if(data == NULL);
110 bt_ug_data *ugd = NULL;
112 ugd = (bt_ug_data *)data;
114 const char *entry_text = NULL;
115 char *input_str = NULL;
118 if (ugd->rename_entry != obj)
119 ugd->rename_entry = obj;
121 entry_text = elm_entry_entry_get(obj);
122 input_str = elm_entry_markup_to_utf8(entry_text);
124 if (input_str == NULL || strlen(input_str) == 0 ||
125 _bt_util_is_space_str(input_str)) {
126 elm_object_disabled_set(ugd->rename_button, EINA_TRUE);
127 elm_entry_input_panel_return_key_disabled_set(obj,
130 if (elm_object_disabled_get(ugd->rename_button))
131 elm_object_disabled_set(ugd->rename_button, EINA_FALSE);
132 if (elm_entry_input_panel_return_key_disabled_get(obj))
133 elm_entry_input_panel_return_key_disabled_set(
137 if(input_str != NULL) {
145 static void __bt_profile_rename_device_cancel_cb(void *data, Evas_Object *obj,
149 bt_ug_data *ugd = NULL;
151 ret_if(data == NULL);
152 ugd = (bt_ug_data *)data;
154 if (ugd->rename_popup != NULL) {
155 evas_object_del(ugd->rename_popup);
156 ugd->rename_popup = NULL;
157 ugd->rename_entry = NULL;
163 static void __bt_profile_rename_device_ok_cb(void *data, Evas_Object *obj,
167 bt_dev_t *dev = (bt_dev_t *)data;
169 bt_ug_data *ugd = (bt_ug_data *)dev->ugd;
172 bt_dev_t *temp = NULL;
175 char msg[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
176 Evas_Object *popup = NULL;
178 const char *entry_str = elm_entry_entry_get(ugd->rename_entry);
179 char *device_name_str = NULL;
180 device_name_str = elm_entry_markup_to_utf8(entry_str);
181 ret_if(!device_name_str);
183 EINA_LIST_FOREACH(ugd->paired_device, l, temp) {
185 if (g_strcmp0(temp->name, device_name_str) == 0) {
186 if(g_strcmp0(dev->name, device_name_str) != 0) {
194 EINA_LIST_FOREACH(ugd->searched_device, l, temp) {
196 if (g_strcmp0(temp->name, device_name_str) == 0) {
204 snprintf(msg, sizeof(msg), BT_STR_NAME_IN_USE);
206 popup = elm_popup_add(ugd->win_main);
207 elm_object_style_set(popup, "toast");
208 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
209 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
210 elm_object_text_set(popup, msg);
211 elm_popup_timeout_set(popup, 2.0);
212 evas_object_smart_callback_add(popup, "timeout",
213 __bt_toast_popup_timeout_cb, ugd);
215 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
216 evas_object_show(popup);
218 BT_DBG("Device name:[%s]", device_name_str);
220 str = g_strndup(device_name_str, DEVICE_NAME_MAX_LEN);
221 if (BT_ERROR_NONE == bt_device_set_alias(dev->addr_str, str)) {
222 memset(dev->name, 0, DEVICE_NAME_MAX_LEN + 1);
223 g_strlcpy(dev->name, str, DEVICE_NAME_MAX_LEN + 1);
227 _bt_update_genlist_item((Elm_Object_Item *)ugd->profile_vd->name_item);
228 _bt_update_genlist_item((Elm_Object_Item *)dev->genlist_item);
231 evas_object_del(ugd->rename_popup);
232 ugd->rename_popup = NULL;
233 ugd->rename_entry = NULL;
235 g_free(device_name_str);
239 static void __bt_profile_rename_entry_changed_cb(void *data, Evas_Object *obj,
242 if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
243 if (elm_object_focus_get(obj)) {
244 if (elm_entry_is_empty(obj))
245 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
247 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
250 __bt_profile_rename_device_entry_changed_cb(data, obj, event_info);
253 static void __bt_profile_rename_entry_focused_cb(void *data, Evas_Object *obj,
256 if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
257 if (!elm_entry_is_empty(obj))
258 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
260 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
262 elm_object_signal_emit(obj, "elm,state,focus,on", "");
265 static void __bt_profile_rename_entry_keydown_cb(void *data, Evas *e, Evas_Object *obj,
268 Evas_Event_Key_Down *ev;
269 Evas_Object *entry = obj;
271 ret_if(data == NULL);
272 ret_if(event_info == NULL);
273 ret_if(entry == NULL);
275 ev = (Evas_Event_Key_Down *)event_info;
276 BT_INFO("ENTER ev->key:%s", ev->key);
278 if (g_strcmp0(ev->key, "KP_Enter") == 0 ||
279 g_strcmp0(ev->key, "Return") == 0) {
281 Ecore_IMF_Context *imf_context = NULL;
284 (Ecore_IMF_Context*)elm_entry_imf_context_get(entry);
286 ecore_imf_context_input_panel_hide(imf_context);
288 elm_object_focus_set(entry, EINA_FALSE);
292 static void __bt_profile_name_item_sel(void *data, Evas_Object *obj,
298 elm_genlist_item_selected_set((Elm_Object_Item *)event_info,
300 bt_ug_data *ugd = (bt_ug_data *)data;
302 Elm_Entry_Filter_Limit_Size limit_filter;
304 bt_dev_t *dev = elm_object_item_data_get((Elm_Object_Item *)event_info);
306 Evas_Object *popup = NULL;
307 Evas_Object *layout = NULL;
308 Evas_Object *entry = NULL;
309 Evas_Object *button = NULL;
310 char *name_value = NULL;
312 name_value = elm_entry_utf8_to_markup(dev->name);
314 popup = elm_popup_add(ugd->base);
315 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
316 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
317 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
319 layout = elm_layout_add(popup);
321 elm_layout_file_set(layout, BT_GENLIST_EDJ, "profile_rename_device_ly");
322 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
323 elm_object_domain_translatable_part_text_set(popup,
326 "IDS_ST_HEADER_RENAME_DEVICE");
328 entry = ea_editfield_add(layout, EA_EDITFIELD_SCROLL_SINGLELINE);
329 ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
330 elm_entry_scrollable_set(entry, EINA_TRUE);
331 elm_object_signal_emit(entry, "elm,action,hide,search_icon", "");
332 elm_object_part_text_set(entry, "elm.guide", BT_STR_DEVICE_NAME);
333 elm_entry_input_panel_imdata_set(entry, "action=disable_emoticons", 24);
335 limit_filter.max_char_count = DEVICE_NAME_MAX_CHARACTER;
336 elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size,
339 elm_entry_input_panel_return_key_type_set(entry,
340 ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
343 elm_entry_entry_set(entry, name_value);
345 elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
347 evas_object_smart_callback_add(entry, "maxlength,reached",
348 _bt_util_max_len_reached_cb, ugd);
349 evas_object_smart_callback_add(entry, "changed",
350 __bt_profile_rename_entry_changed_cb, ugd);
351 evas_object_smart_callback_add(entry, "preedit,changed",
352 __bt_profile_rename_entry_changed_cb, ugd);
353 evas_object_smart_callback_add(entry, "focused",
354 __bt_profile_rename_entry_focused_cb, NULL);
355 evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_DOWN,
356 __bt_profile_rename_entry_keydown_cb, ugd);
358 evas_object_show(entry);
359 elm_object_part_content_set(layout, "elm.swallow.layout", entry);
361 elm_object_content_set(popup, layout);
363 button = elm_button_add(popup);
364 elm_object_style_set(button, "popup");
365 elm_object_domain_translatable_text_set(button,
368 elm_object_part_content_set(popup, "button1", button);
369 evas_object_smart_callback_add(button, "clicked",
370 __bt_profile_rename_device_cancel_cb, ugd);
372 button = elm_button_add(popup);
373 ugd->rename_button = button;
374 elm_object_style_set(button, "popup");
375 elm_object_domain_translatable_text_set(button,
377 "IDS_BT_OPT_RENAME");
378 elm_object_part_content_set(popup, "button2", button);
379 evas_object_smart_callback_add(button, "clicked",
380 __bt_profile_rename_device_ok_cb, dev);
382 elm_object_focus_set(entry, EINA_TRUE);
383 ugd->rename_entry = entry;
384 BT_DBG("entry : %p", entry);
386 evas_object_show(popup);
387 ugd->rename_popup = popup;
389 elm_entry_cursor_end_set(entry);
397 static void __bt_profile_unpair_item_sel(void *data, Evas_Object *obj,
401 bt_dev_t *dev = NULL;
404 ret_if(NULL == data);
406 dev = (bt_dev_t *)data;
412 elm_genlist_item_selected_set((Elm_Object_Item *)event_info,
415 /* If rename entry is focused, then unfocus and return */
416 if (ugd->rename_entry && elm_object_focus_get(ugd->rename_entry)) {
417 BT_DBG("Unfocus Rename Entry");
418 elm_object_focus_set(ugd->rename_entry, EINA_FALSE);
422 if (dev->status == BT_DEV_UNPAIRING)
425 dev->status = BT_DEV_UNPAIRING;
426 if (bt_device_destroy_bond(dev->addr_str) != BT_ERROR_NONE) {
427 BT_ERR("Fail to unpair");
428 dev->status = BT_IDLE;
436 static char *__bt_profile_unpair_label_get(void *data, Evas_Object *obj,
441 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
443 if (!strcmp(part, "elm.text.main.left")) {
444 g_strlcpy(buf, BT_STR_UNPAIR, BT_GLOBALIZATION_STR_LENGTH);
446 BT_ERR("empty text for label");
454 static char *__bt_proflie_title_label_get(void *data, Evas_Object *obj,
459 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
461 if (!strcmp(part, "elm.text.main")) {
463 g_strlcpy(buf, BT_STR_CONNECTION_OPTIONS,
464 BT_GLOBALIZATION_STR_LENGTH);
466 BT_ERR("This part name is not exist in style");
474 #ifndef TELEPHONY_DISABLED
475 static char *__bt_proflie_call_option_label_get(void *data, Evas_Object *obj,
480 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
481 #ifdef KIRAN_ACCESSIBILITY
482 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
485 bt_dev_t *dev_info = NULL;
486 bt_ug_data *ugd = NULL;
488 retv_if(NULL == data, NULL);
489 dev_info = (bt_dev_t *)data;
491 ugd = (bt_ug_data *)(dev_info->ugd);
492 retv_if(NULL == ugd, NULL);
494 if (!strcmp(part, "elm.text.main.left")) {
495 g_strlcpy(buf, BT_STR_CALL_AUDIO,
496 BT_GLOBALIZATION_STR_LENGTH);
498 BT_ERR("This part name is not exist in style");
502 #ifdef KIRAN_ACCESSIBILITY
503 if (ugd->profile_vd && ugd->profile_vd->call_item) {
504 ao = elm_object_item_access_object_get(
505 ugd->profile_vd->call_item);
506 if (dev_info->status == BT_IDLE) {
507 if (dev_info->call_checked)
508 snprintf(str, sizeof(str), "%s, %s, %s",
511 BT_STR_RADIO_SELECTED);
513 snprintf(str, sizeof(str), "%s, %s, %s",
516 BT_STR_RADIO_UNSELECTED);
518 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
526 static char *__bt_proflie_media_option_label_get(void *data, Evas_Object *obj,
531 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
532 #ifdef KIRAN_ACCESSIBILITY
533 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
536 bt_dev_t *dev_info = NULL;
537 bt_ug_data *ugd = NULL;
539 retv_if(NULL == data, NULL);
540 dev_info = (bt_dev_t *)data;
542 ugd = (bt_ug_data *)(dev_info->ugd);
543 retv_if(NULL == ugd, NULL);
545 if (!strcmp(part, "elm.text.main.left")) {
546 g_strlcpy(buf, BT_STR_MEDIA_AUDIO,
547 BT_GLOBALIZATION_STR_LENGTH);
549 BT_ERR("This part name is not exist in style");
553 #ifdef KIRAN_ACCESSIBILITY
554 if (ugd->profile_vd && ugd->profile_vd->media_item) {
555 ao = elm_object_item_access_object_get(
556 ugd->profile_vd->media_item);
557 if (dev_info->status == BT_IDLE) {
558 if (dev_info->media_checked)
559 snprintf(str, sizeof(str), "%s, %s, %s",
562 BT_STR_RADIO_SELECTED);
564 snprintf(str, sizeof(str), "%s, %s, %s",
567 BT_STR_RADIO_UNSELECTED);
569 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
576 static char *__bt_proflie_hid_option_label_get(void *data, Evas_Object *obj,
581 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
582 #ifdef KIRAN_ACCESSIBILITY
583 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
586 bt_dev_t *dev_info = NULL;
587 bt_ug_data *ugd = NULL;
589 retv_if(NULL == data, NULL);
590 dev_info = (bt_dev_t *)data;
592 ugd = (bt_ug_data *)(dev_info->ugd);
593 retv_if(NULL == ugd, NULL);
595 if (!strcmp(part, "elm.text.main.left")) {
596 g_strlcpy(buf, BT_STR_INPUT_DEVICE,
597 BT_GLOBALIZATION_STR_LENGTH);
599 BT_ERR("This part name is not exist in style");
602 #ifdef KIRAN_ACCESSIBILITY
603 if (ugd->profile_vd && ugd->profile_vd->hid_item) {
604 ao = elm_object_item_access_object_get(
605 ugd->profile_vd->hid_item);
606 if (dev_info->status == BT_IDLE) {
607 if (dev_info->hid_checked)
608 snprintf(str, sizeof(str), "%s, %s, %s",
611 BT_STR_RADIO_SELECTED);
613 snprintf(str, sizeof(str), "%s, %s, %s",
616 BT_STR_RADIO_UNSELECTED);
618 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
625 static char *__bt_proflie_nap_option_label_get(void *data, Evas_Object *obj,
630 char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
631 #ifdef KIRAN_ACCESSIBILITY
632 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
635 bt_dev_t *dev_info = NULL;
636 bt_ug_data *ugd = NULL;
638 retv_if(NULL == data, NULL);
639 dev_info = (bt_dev_t *)data;
641 ugd = (bt_ug_data *)(dev_info->ugd);
642 retv_if(NULL == ugd, NULL);
644 if (!strcmp(part, "elm.text.main.left")) {
645 g_strlcpy(buf, BT_STR_INTERNET_ACCESS,
646 BT_GLOBALIZATION_STR_LENGTH);
648 BT_ERR("This part name is not exist in style");
652 #ifdef KIRAN_ACCESSIBILITY
653 if (ugd->profile_vd && ugd->profile_vd->network_item) {
654 ao = elm_object_item_access_object_get(
655 ugd->profile_vd->network_item);
656 if (dev_info->status == BT_IDLE) {
657 if (dev_info->network_checked)
658 snprintf(str, sizeof(str), "%s, %s, %s",
659 BT_STR_INTERNET_ACCESS,
661 BT_STR_RADIO_SELECTED);
663 snprintf(str, sizeof(str), "%s, %s, %s",
664 BT_STR_INTERNET_ACCESS,
666 BT_STR_RADIO_UNSELECTED);
668 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
675 #ifndef TELEPHONY_DISABLED
676 static void __bt_profile_call_option_checkbox_sel(void *data, Evas_Object *obj,
680 bt_dev_t *dev = NULL;
683 dev = (bt_dev_t *)data;
684 ret_if(dev->ugd == NULL);
686 if (dev->status == BT_DEV_UNPAIRING)
689 if (dev->connected_mask & BT_HEADSET_CONNECTED) {
690 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
691 dev, BT_HEADSET_DEVICE);
693 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
694 dev, BT_HEADSET_DEVICE);
697 if (ret == BT_UG_FAIL)
698 elm_check_state_set(obj, dev->call_checked);
704 static void __bt_profile_media_option_checkbox_sel(void *data, Evas_Object *obj,
708 bt_dev_t *dev = NULL;
711 dev = (bt_dev_t *)data;
712 ret_if(dev->ugd == NULL);
714 if (dev->status == BT_DEV_UNPAIRING)
717 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
718 if (dev->connected_mask & BT_MUSIC_PLAYER_CONNECTED) {
719 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
720 dev, BT_MUSIC_PLAYER_DEVICE);
722 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
723 dev, BT_MUSIC_PLAYER_DEVICE);
726 if (dev->connected_mask & BT_STEREO_HEADSET_CONNECTED) {
727 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
728 dev, BT_STEREO_HEADSET_DEVICE);
730 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
731 dev, BT_STEREO_HEADSET_DEVICE);
735 if (ret == BT_UG_FAIL)
736 elm_check_state_set(obj, dev->media_checked);
742 static void __bt_profile_hid_option_checkbox_sel(void *data, Evas_Object *obj,
746 bt_dev_t *dev = NULL;
749 dev = (bt_dev_t *)data;
750 ret_if(dev->ugd == NULL);
752 if (dev->status == BT_DEV_UNPAIRING)
755 if (dev->connected_mask & BT_HID_CONNECTED) {
756 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
759 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
763 if (ret == BT_UG_FAIL)
764 elm_check_state_set(obj, dev->hid_checked);
769 static void __bt_profile_nap_option_checkbox_sel(void *data, Evas_Object *obj,
773 bt_dev_t *dev = NULL;
776 dev = (bt_dev_t *)data;
777 ret_if(dev->ugd == NULL);
779 if (dev->status == BT_DEV_UNPAIRING)
782 if (dev->connected_mask & BT_NETWORK_CONNECTED) {
783 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
784 dev, BT_NETWORK_DEVICE);
786 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
787 dev, BT_NETWORK_DEVICE);
790 if (ret == BT_UG_FAIL)
791 elm_check_state_set(obj, dev->network_checked);
797 #ifndef TELEPHONY_DISABLED
798 static Evas_Object *__bt_profile_call_option_icon_get(void *data, Evas_Object *obj,
803 Evas_Object *ic = NULL;
804 Evas_Object *check = NULL;
805 bt_dev_t *dev = NULL;
807 retv_if(NULL == data, NULL);
809 dev = (bt_dev_t *)data;
811 if (!strcmp(part, "elm.icon.2")) {
812 ic = elm_layout_add(obj);
813 elm_layout_theme_set(ic, "layout", "list/C/type.3", "default");
814 check = elm_check_add(obj);
815 elm_object_style_set(check, "on&off");
817 dev->call_checked = dev->connected_mask & \
818 BT_HEADSET_CONNECTED;
819 elm_check_state_set(check, dev->call_checked);
821 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
824 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
826 evas_object_smart_callback_add(check, "changed", __bt_profile_call_option_checkbox_sel, dev);
828 evas_object_propagate_events_set(check, EINA_FALSE);
829 evas_object_show(check);
832 elm_layout_content_set(ic, "elm.swallow.content", check);
837 static Evas_Object *__bt_profile_media_option_icon_get(void *data, Evas_Object *obj,
842 Evas_Object *ic = NULL;
843 Evas_Object *check = NULL;
844 bt_dev_t *dev = NULL;
846 retv_if(NULL == data, NULL);
848 dev = (bt_dev_t *)data;
850 if (!strcmp(part, "elm.icon.2")) {
851 ic = elm_layout_add(obj);
852 elm_layout_theme_set(ic, "layout", "list/C/type.3", "default");
853 check = elm_check_add(obj);
854 elm_object_style_set(check, "on&off");
855 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
856 dev->media_checked = dev->connected_mask & \
857 BT_MUSIC_PLAYER_CONNECTED;
859 dev->media_checked = dev->connected_mask & \
860 BT_STEREO_HEADSET_CONNECTED;
862 elm_check_state_set(check, dev->media_checked);
864 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
867 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
869 evas_object_propagate_events_set(check, EINA_FALSE);
870 evas_object_smart_callback_add(check, "changed", __bt_profile_media_option_checkbox_sel, dev);
871 evas_object_show(check);
874 elm_layout_content_set(ic, "elm.swallow.content", check);
878 static Evas_Object *__bt_profile_hid_option_icon_get(void *data, Evas_Object *obj,
883 Evas_Object *ic = NULL;
884 Evas_Object *check = NULL;
885 bt_dev_t *dev = NULL;
887 retv_if(NULL == data, NULL);
889 dev = (bt_dev_t *)data;
891 if (!strcmp(part, "elm.icon.2")) {
892 ic = elm_layout_add(obj);
893 elm_layout_theme_set(ic, "layout", "list/C/type.3", "default");
894 check = elm_check_add(obj);
895 elm_object_style_set(check, "on&off");
897 dev->hid_checked = dev->connected_mask & \
899 elm_check_state_set(check, dev->hid_checked);
901 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
904 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
906 evas_object_smart_callback_add(check, "changed", __bt_profile_hid_option_checkbox_sel, dev);
908 evas_object_propagate_events_set(check, EINA_FALSE);
910 evas_object_show(check);
913 elm_layout_content_set(ic, "elm.swallow.content", check);
917 static Evas_Object *__bt_profile_nap_option_icon_get(void *data, Evas_Object *obj,
922 Evas_Object *check = NULL;
923 Evas_Object *ic = NULL;
924 bt_dev_t *dev = NULL;
926 retv_if(NULL == data, NULL);
928 dev = (bt_dev_t *)data;
930 if (!strcmp(part, "elm.icon.2")) {
931 ic = elm_layout_add(obj);
932 elm_layout_theme_set(ic, "layout", "list/C/type.3", "default");
933 check = elm_check_add(obj);
934 elm_object_style_set(check, "on&off");
936 dev->network_checked = dev->connected_mask & \
937 BT_NETWORK_CONNECTED;
938 elm_check_state_set(check, dev->network_checked);
940 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
943 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
945 evas_object_propagate_events_set(check, EINA_FALSE);
946 evas_object_smart_callback_add(check, "changed", __bt_profile_nap_option_checkbox_sel, dev);
947 evas_object_show(check);
951 elm_layout_content_set(ic, "elm.swallow.content", check);
955 int __bt_profile_connect_option(bt_ug_data *ugd, bt_dev_t *dev,
962 retv_if(ugd == NULL, BT_UG_FAIL);
963 retv_if(dev == NULL, BT_UG_FAIL);
965 if (type == BT_HEADSET_DEVICE || type == BT_STEREO_HEADSET_DEVICE ||
966 type == BT_MUSIC_PLAYER_DEVICE) {
967 if (type == BT_STEREO_HEADSET_DEVICE)
968 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP;
969 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
970 else if (type == BT_MUSIC_PLAYER_DEVICE)
971 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP_SINK;
974 audio_profile = BT_AUDIO_PROFILE_TYPE_HSP_HFP;
976 if (bt_audio_connect(dev->addr_str,
977 audio_profile) != BT_ERROR_NONE) {
978 BT_ERR("Fail to connect Headset device");
981 } else if (type == BT_HID_DEVICE) {
984 BT_DBG("HID connect request");
986 if (bt_hid_host_connect(dev->addr_str) != BT_ERROR_NONE) {
990 } else if (type == BT_NETWORK_DEVICE){
991 BT_DBG("Network connect request");
995 if (dev->net_profile) {
996 if (_bt_connect_net_profile(ugd->connection,
998 dev) != BT_UG_ERROR_NONE) {
999 BT_ERR("Fail to connect the net profile");
1004 _bt_get_registered_net_profile(ugd->connection,
1007 _bt_set_profile_state_changed_cb(net_profile, dev);
1009 if (_bt_connect_net_profile(ugd->connection,
1011 dev) != BT_UG_ERROR_NONE) {
1012 BT_ERR("Fail to connect the net profile");
1016 BT_ERR("No registered net profile");
1021 BT_ERR("Unknown type");
1025 ugd->connect_req = TRUE;
1026 dev->status = BT_CONNECTING;
1027 _bt_update_genlist_item((Elm_Object_Item *)dev->genlist_item);
1029 retv_if(ugd->profile_vd == NULL, BT_UG_FAIL);
1031 if (ugd->profile_vd->genlist) {
1032 _bt_util_set_list_disabled(ugd->profile_vd->genlist,
1037 return BT_UG_ERROR_NONE;
1040 int __bt_profile_disconnect_option(bt_ug_data *ugd, bt_dev_t *dev,
1041 bt_device_type type)
1046 bt_ug_ipc_param_t param;
1047 gboolean connected = FALSE;
1048 gboolean connected_nap_profile = FALSE;
1050 retv_if(ugd == NULL, BT_UG_FAIL);
1051 retv_if(dev == NULL, BT_UG_FAIL);
1053 memset(¶m, 0x00, sizeof(bt_ug_ipc_param_t));
1054 memcpy(param.param2, dev->bd_addr, BT_ADDRESS_LENGTH_MAX);
1056 if (type == BT_HEADSET_DEVICE) {
1057 connected = _bt_util_is_profile_connected(BT_HEADSET_CONNECTED,
1059 } else if (type == BT_STEREO_HEADSET_DEVICE) {
1060 connected = _bt_util_is_profile_connected(BT_STEREO_HEADSET_CONNECTED,
1062 } else if (type == BT_MUSIC_PLAYER_DEVICE) {
1063 connected = _bt_util_is_profile_connected(BT_MUSIC_PLAYER_CONNECTED,
1065 } else if (type == BT_HID_DEVICE) {
1066 connected = _bt_util_is_profile_connected(BT_HID_CONNECTED,
1068 } else if (type == BT_NETWORK_DEVICE) {
1069 connected = _bt_util_is_profile_connected(BT_NETWORK_CONNECTED,
1073 connected = _bt_util_is_profile_connected(BT_NETWORK_SERVER_CONNECTED,
1075 connected_nap_profile = connected;
1079 if (connected == FALSE) {
1080 BT_ERR("Not connected");
1084 if (type == BT_HEADSET_DEVICE || type == BT_STEREO_HEADSET_DEVICE ||
1085 type == BT_MUSIC_PLAYER_DEVICE) {
1086 if (type == BT_STEREO_HEADSET_DEVICE)
1087 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP;
1088 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1089 else if (type == BT_MUSIC_PLAYER_DEVICE)
1090 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP_SINK;
1093 audio_profile = BT_AUDIO_PROFILE_TYPE_HSP_HFP;
1095 if (bt_audio_disconnect(dev->addr_str,
1096 audio_profile) != BT_ERROR_NONE) {
1097 BT_ERR("Fail to connect Headset device");
1100 } else if (type == BT_HID_DEVICE) {
1101 BT_DBG("Disconnecting HID service!!");
1103 if (bt_hid_host_disconnect(dev->addr_str) != BT_ERROR_NONE) {
1104 BT_ERR("Fail to disconnect HID device");
1107 } else if (type == BT_NETWORK_DEVICE) {
1111 if (connected_nap_profile == FALSE) {
1112 BT_DBG("Disconnecting network service!! [PANU]");
1113 if (dev->net_profile) {
1114 if (_bt_disconnect_net_profile(ugd->connection,
1116 dev) != BT_UG_ERROR_NONE) {
1117 BT_ERR("Fail to disconnect the net profile");
1122 _bt_get_registered_net_profile(ugd->connection,
1125 _bt_set_profile_state_changed_cb(net_profile, dev);
1126 if (_bt_disconnect_net_profile(ugd->connection,
1128 dev) != BT_UG_ERROR_NONE) {
1129 BT_ERR("Fail to disconnect the net profile");
1133 BT_ERR("No registered net profile");
1138 BT_DBG("Disconnecting network service!! [NAP]");
1139 if (bt_nap_disconnect(dev->addr_str) == BT_UG_ERROR_NONE)
1140 BT_ERR("Failed to disconnect pan server");
1144 BT_ERR("Unknown type");
1148 ugd->connect_req = TRUE;
1149 dev->status = BT_DISCONNECTING;
1150 _bt_update_genlist_item((Elm_Object_Item *)dev->genlist_item);
1152 if (ugd->profile_vd->genlist) {
1153 _bt_util_set_list_disabled(ugd->profile_vd->genlist,
1158 return BT_UG_ERROR_NONE;
1161 #ifndef TELEPHONY_DISABLED
1162 static void __bt_profile_call_option_item_sel(void *data, Evas_Object *obj,
1167 bt_dev_t *dev = NULL;
1168 Elm_Object_Item *item = NULL;
1170 ret_if(event_info == NULL);
1173 item = (Elm_Object_Item *)event_info;
1174 elm_genlist_item_selected_set(item, EINA_FALSE);
1177 ret_if(data == NULL);
1179 dev = (bt_dev_t *)data;
1180 ret_if(dev->ugd == NULL);
1182 if (dev->status == BT_DEV_UNPAIRING)
1185 if (dev->connected_mask & BT_HEADSET_CONNECTED) {
1186 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1187 dev, BT_HEADSET_DEVICE);
1189 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1190 dev, BT_HEADSET_DEVICE);
1192 _bt_update_genlist_item(item);
1198 static void __bt_profile_media_option_item_sel(void *data, Evas_Object *obj,
1203 bt_dev_t *dev = NULL;
1204 Elm_Object_Item *item = NULL;
1206 ret_if(event_info == NULL);
1209 item = (Elm_Object_Item *)event_info;
1210 elm_genlist_item_selected_set(item, EINA_FALSE);
1213 ret_if(data == NULL);
1215 dev = (bt_dev_t *)data;
1216 ret_if(dev->ugd == NULL);
1218 if (dev->status == BT_DEV_UNPAIRING)
1220 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1221 if (dev->connected_mask & BT_MUSIC_PLAYER_CONNECTED) {
1222 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1223 dev, BT_MUSIC_PLAYER_DEVICE);
1225 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1226 dev, BT_MUSIC_PLAYER_DEVICE);
1229 if (dev->connected_mask & BT_STEREO_HEADSET_CONNECTED) {
1230 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1231 dev, BT_STEREO_HEADSET_DEVICE);
1233 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1234 dev, BT_STEREO_HEADSET_DEVICE);
1238 _bt_update_genlist_item(item);
1244 static void __bt_profile_hid_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_HID_CONNECTED) {
1268 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1269 dev, BT_HID_DEVICE);
1271 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1272 dev, BT_HID_DEVICE);
1274 _bt_update_genlist_item(item);
1280 static void __bt_profile_nap_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)
1303 if (dev->connected_mask & BT_NETWORK_CONNECTED) {
1304 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1305 dev, BT_NETWORK_DEVICE);
1307 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1308 dev, BT_NETWORK_DEVICE);
1311 _bt_update_genlist_item(item);
1316 void _bt_update_detail_item_style(bt_profile_view_data *vd)
1322 Elm_Object_Item *item = NULL;
1325 ret_if(vd->genlist == NULL);
1327 item_count = elm_genlist_items_count(vd->genlist);
1329 BT_INFO("item_count %d", item_count);
1331 if (vd->title_item == NULL || item_count < 4)
1333 /* Do not need to take care first 4 items as they are fixed */
1334 item_count = item_count - 5;
1336 item = elm_genlist_item_next_get(vd->title_item);
1338 while (item != NULL) {
1339 if (item_count == 1) {
1340 elm_object_item_signal_emit(item, "elm,state,normal", "");
1342 } else if (i == 1) {
1343 elm_object_item_signal_emit(item, "elm,state,top", "");
1345 } else if (item_count == i) {
1346 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1349 elm_object_item_signal_emit(item, "elm,state,center", "");
1353 item = elm_genlist_item_next_get(item);
1359 static int __bt_profile_get_item_type(bt_profile_view_data *vd, Elm_Object_Item *item)
1361 retv_if(vd == NULL, BT_ITEM_NONE);
1362 retv_if(item == NULL, BT_ITEM_NONE);
1364 if (item == vd->name_item) {
1365 return BT_ITEM_NAME;
1366 } else if (item == vd->unpair_item) {
1367 return BT_ITEM_UNPAIR;
1368 #ifndef TELEPHONY_DISABLED
1369 } else if (item == vd->call_item) {
1370 return BT_ITEM_CALL;
1372 } else if (item == vd->media_item) {
1373 return BT_ITEM_MEDIA;
1374 } else if (item == vd->hid_item) {
1376 } else if (item == vd->network_item) {
1377 return BT_ITEM_NETWORK;
1380 return BT_ITEM_NONE;
1383 static void __bt_profile_gl_realized(void *data, Evas_Object *obj, void *event_info)
1389 bt_profile_view_data *vd;
1390 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
1391 #ifdef KIRAN_ACCESSIBILITY
1393 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
1397 ret_if(data == NULL);
1398 ret_if(item == NULL);
1400 ugd = (bt_ug_data *)data;
1402 vd = ugd->profile_vd;
1405 item_type = __bt_profile_get_item_type(vd, item);
1407 BT_INFO("type: %d", item_type);
1408 #ifdef KIRAN_ACCESSIBILITY
1409 dev_info = (bt_dev_t *)elm_object_item_data_get(item);
1410 ao = elm_object_item_access_object_get(item);
1412 switch (item_type) {
1414 elm_object_item_signal_emit(item, "elm,state,top", "");
1416 #ifdef KIRAN_ACCESSIBILITY
1417 if (dev_info != NULL)
1418 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_DEVICE_NAME,
1419 dev_info->name, BT_STR_DOUBLE_TAP_RENAME);
1421 snprintf(str, sizeof(str), "%s, %s", BT_STR_DEVICE_NAME,
1422 BT_STR_DOUBLE_TAP_RENAME);
1424 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1427 case BT_ITEM_UNPAIR:
1428 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1430 #ifdef KIRAN_ACCESSIBILITY
1431 snprintf(str, sizeof(str), "%s, %s", BT_STR_UNPAIR,
1432 BT_STR_DOUBLE_TAP_UNPAIR);
1433 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1437 #ifndef TELEPHONY_DISABLED
1439 #ifdef KIRAN_ACCESSIBILITY
1440 if (dev_info->call_checked)
1441 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_CALL_AUDIO,
1442 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1444 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_CALL_AUDIO,
1445 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1446 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1451 #ifdef KIRAN_ACCESSIBILITY
1452 if (dev_info->media_checked)
1453 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_MEDIA_AUDIO,
1454 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1456 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_MEDIA_AUDIO,
1457 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1458 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1463 #ifdef KIRAN_ACCESSIBILITY
1464 if (dev_info->hid_checked)
1465 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INPUT_DEVICE,
1466 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1468 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INPUT_DEVICE,
1469 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1470 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1474 case BT_ITEM_NETWORK:
1475 #ifdef KIRAN_ACCESSIBILITY
1476 if (dev_info->network_checked)
1477 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INTERNET_ACCESS,
1478 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1480 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INTERNET_ACCESS,
1481 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1482 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1491 _bt_update_detail_item_style(vd);
1495 /* Create genlist and append items */
1496 static Evas_Object *__bt_profile_draw_genlist(bt_ug_data *ugd, bt_dev_t *dev_info)
1500 bt_profile_view_data *vd = NULL;
1501 Evas_Object *genlist = NULL;
1502 Elm_Object_Item *git = NULL;
1504 retv_if(ugd == NULL, NULL);
1505 retv_if(ugd->profile_vd == NULL, NULL);
1507 vd = ugd->profile_vd;
1509 /* Set item class for dialogue normal items */
1510 vd->name_itc = elm_genlist_item_class_new();
1511 retv_if (vd->name_itc == NULL, NULL);
1512 vd->name_itc->item_style = "2line.bottom";
1513 vd->name_itc->func.text_get = __bt_profile_name_label_get;
1514 vd->name_itc->func.content_get = NULL;
1515 vd->name_itc->func.state_get = NULL;
1516 vd->name_itc->func.del = NULL;
1518 vd->unpair_itc = elm_genlist_item_class_new();
1519 retv_if (vd->unpair_itc == NULL, NULL);
1521 vd->unpair_itc->item_style = "1line";
1522 vd->unpair_itc->func.text_get = __bt_profile_unpair_label_get;
1523 vd->unpair_itc->func.content_get = NULL;
1524 vd->unpair_itc->func.state_get = NULL;
1525 vd->unpair_itc->func.del = NULL;
1527 /* Create genlist */
1528 genlist = elm_genlist_add(ugd->navi_bar);
1529 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1530 elm_genlist_homogeneous_set(genlist, EINA_FALSE);
1531 elm_genlist_block_count_set(genlist, 3);
1533 evas_object_smart_callback_add(genlist, "realized",
1534 __bt_profile_gl_realized, ugd);
1536 /* device name item */
1537 git = elm_genlist_item_append(genlist, vd->name_itc, dev_info, NULL,
1538 ELM_GENLIST_ITEM_NONE,
1539 __bt_profile_name_item_sel, ugd);
1540 vd->name_item = git;
1543 git = elm_genlist_item_append(genlist, vd->unpair_itc, NULL, NULL,
1544 ELM_GENLIST_ITEM_NONE,
1545 __bt_profile_unpair_item_sel, dev_info);
1546 vd->unpair_item = git;
1548 /* If the device has no headset profile, exit this function */
1549 if (!(dev_info->service_list & BT_SC_HFP_SERVICE_MASK) &&
1550 !(dev_info->service_list & BT_SC_HSP_SERVICE_MASK) &&
1551 !(dev_info->service_list & BT_SC_A2DP_SERVICE_MASK) &&
1552 !(dev_info->service_list & BT_SC_A2DP_SOURCE_SERVICE_MASK) &&
1553 !(dev_info->service_list & BT_SC_HID_SERVICE_MASK) &&
1554 !(dev_info->service_list & BT_SC_NAP_SERVICE_MASK)) {
1558 vd->title_itc = elm_genlist_item_class_new();
1559 retv_if (vd->title_itc == NULL, NULL);
1561 vd->title_itc->item_style = "groupindex.sub";
1562 vd->title_itc->func.text_get = __bt_proflie_title_label_get;
1563 vd->title_itc->func.content_get = NULL;
1564 vd->title_itc->func.state_get = NULL;
1565 vd->title_itc->func.del = NULL;
1567 #ifndef TELEPHONY_DISABLED
1568 vd->call_itc = elm_genlist_item_class_new();
1569 retv_if (vd->call_itc == NULL, NULL);
1571 vd->call_itc->item_style = "1line";
1572 vd->call_itc->func.text_get = __bt_proflie_call_option_label_get;
1573 vd->call_itc->func.content_get = __bt_profile_call_option_icon_get;
1574 vd->call_itc->func.state_get = NULL;
1575 vd->call_itc->func.del = NULL;
1577 vd->media_itc = elm_genlist_item_class_new();
1578 retv_if (vd->media_itc == NULL, NULL);
1580 vd->media_itc->item_style = "1line";
1581 vd->media_itc->func.text_get = __bt_proflie_media_option_label_get;
1582 vd->media_itc->func.content_get = __bt_profile_media_option_icon_get;
1583 vd->media_itc->func.state_get = NULL;
1584 vd->media_itc->func.del = NULL;
1586 vd->hid_itc = elm_genlist_item_class_new();
1587 retv_if (vd->hid_itc == NULL, NULL);
1589 vd->hid_itc->item_style = "1line";
1590 vd->hid_itc->func.text_get = __bt_proflie_hid_option_label_get;
1591 vd->hid_itc->func.content_get = __bt_profile_hid_option_icon_get;
1592 vd->hid_itc->func.state_get = NULL;
1593 vd->hid_itc->func.del = NULL;
1595 #ifndef TIZEN_BT_A2DP_SINK_ENABLE
1596 vd->network_itc = elm_genlist_item_class_new();
1597 retv_if (vd->network_itc == NULL, NULL);
1599 vd->network_itc->item_style = "1line";
1600 vd->network_itc->func.text_get = __bt_proflie_nap_option_label_get;
1601 vd->network_itc->func.content_get = __bt_profile_nap_option_icon_get;
1602 vd->network_itc->func.state_get = NULL;
1603 vd->network_itc->func.del = NULL;
1605 /* Connection options title */
1606 git = elm_genlist_item_append(genlist, vd->title_itc, NULL, NULL,
1607 ELM_GENLIST_ITEM_NONE,
1610 elm_genlist_item_select_mode_set(git,
1611 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1613 vd->title_item = git;
1615 #ifndef TELEPHONY_DISABLED
1616 if (dev_info->service_list & BT_SC_HFP_SERVICE_MASK ||
1617 dev_info->service_list & BT_SC_HSP_SERVICE_MASK) {
1619 git = elm_genlist_item_append(genlist, vd->call_itc,
1621 ELM_GENLIST_ITEM_NONE,
1622 __bt_profile_call_option_item_sel,
1624 vd->call_item = git;
1627 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1628 if (dev_info->service_list & BT_SC_A2DP_SOURCE_SERVICE_MASK) {
1630 if (dev_info->service_list & BT_SC_A2DP_SERVICE_MASK) {
1633 git = elm_genlist_item_append(genlist, vd->media_itc,
1635 ELM_GENLIST_ITEM_NONE,
1636 __bt_profile_media_option_item_sel,
1639 vd->media_item = git;
1641 BT_INFO("service list: %x", dev_info->service_list);
1642 BT_INFO("is hid: %d", dev_info->service_list & BT_SC_HID_SERVICE_MASK);
1644 if (dev_info->service_list & BT_SC_HID_SERVICE_MASK) {
1647 git = elm_genlist_item_append(genlist, vd->hid_itc,
1649 ELM_GENLIST_ITEM_NONE,
1650 __bt_profile_hid_option_item_sel,
1655 BT_INFO("HID options is disabled");
1656 git = elm_genlist_item_append(genlist, vd->hid_itc,
1658 ELM_GENLIST_ITEM_NONE,
1662 BT_INFO("HID item disabled");
1663 elm_object_item_disabled_set (vd->hid_item, EINA_TRUE);
1667 #ifndef TIZEN_BT_A2DP_SINK_ENABLE
1668 if (dev_info->service_list & BT_SC_NAP_SERVICE_MASK) {
1670 git = elm_genlist_item_append(genlist, vd->network_itc,
1672 ELM_GENLIST_ITEM_NONE,
1673 __bt_profile_nap_option_item_sel,
1675 vd->network_item = git;
1683 void _bt_profile_destroy_profile_view(void *data)
1687 bt_ug_data *ugd = (bt_ug_data *)data;
1688 bt_profile_view_data *vd = NULL;
1690 ret_if(ugd == NULL);
1691 ret_if(ugd->profile_vd == NULL);
1693 vd = ugd->profile_vd;
1696 elm_genlist_item_class_free(vd->name_itc);
1697 vd->name_itc = NULL;
1700 if (vd->unpair_itc) {
1701 elm_genlist_item_class_free(vd->unpair_itc);
1702 vd->unpair_itc = NULL;
1705 if (vd->title_itc) {
1706 elm_genlist_item_class_free(vd->title_itc);
1707 vd->title_itc = NULL;
1710 #ifndef TELEPHONY_DISABLED
1712 elm_genlist_item_class_free(vd->call_itc);
1713 vd->call_itc = NULL;
1717 if (vd->media_itc) {
1718 elm_genlist_item_class_free(vd->media_itc);
1719 vd->media_itc = NULL;
1723 elm_genlist_item_class_free(vd->hid_itc);
1726 #ifndef TIZEN_BT_A2DP_SINK_ENABLE
1727 if (vd->network_itc) {
1728 elm_genlist_item_class_free(vd->network_itc);
1729 vd->network_itc = NULL;
1732 vd->save_btn = NULL;
1734 /* unregister callback functions */
1735 if (vd->imf_context) {
1736 ecore_imf_context_input_panel_event_callback_del(vd->imf_context,
1737 ECORE_IMF_INPUT_PANEL_STATE_EVENT,
1738 __bt_profile_input_panel_state_cb);
1739 vd->imf_context = NULL;
1743 ugd->profile_vd = NULL;
1748 static Eina_Bool __bt_profile_back_clicked_cb(void *data, Elm_Object_Item *it)
1751 retv_if(!data, EINA_TRUE);
1753 bt_ug_data *ugd = (bt_ug_data *)data;
1754 ugd->profile_vd = NULL;
1756 if (ugd->popup != NULL){
1757 evas_object_del(ugd->popup);
1759 ugd->is_popup_exist = 0;
1766 /**********************************************************************
1768 ***********************************************************************/
1770 void _bt_profile_create_view(bt_dev_t *dev_info)
1774 bt_profile_view_data *vd;
1776 Evas_Object *genlist;
1777 Elm_Object_Item *navi_it;
1780 ret_if(dev_info == NULL);
1781 ret_if(dev_info->ugd == NULL);
1783 ugd = dev_info->ugd;
1785 vd = calloc(1, sizeof(bt_profile_view_data));
1788 ugd->profile_vd = vd;
1789 vd->win_main = ugd->win_main;
1790 vd->navi_bar = ugd->navi_bar;
1793 if (dev_info->service_list & BT_SC_HFP_SERVICE_MASK ||
1794 dev_info->service_list & BT_SC_HSP_SERVICE_MASK ||
1795 dev_info->service_list & BT_SC_A2DP_SERVICE_MASK) {
1796 connected = _bt_util_is_profile_connected(BT_HEADSET_CONNECTED,
1798 dev_info->connected_mask |= connected ? BT_HEADSET_CONNECTED : 0x00;
1801 _bt_util_is_profile_connected(BT_STEREO_HEADSET_CONNECTED,
1803 dev_info->connected_mask |=
1804 connected ? BT_STEREO_HEADSET_CONNECTED : 0x00;
1805 } else if (dev_info->service_list & BT_SC_A2DP_SOURCE_SERVICE_MASK ) {
1806 connected = _bt_util_is_profile_connected(BT_MUSIC_PLAYER_CONNECTED,
1808 dev_info->connected_mask |=
1809 connected ? BT_MUSIC_PLAYER_CONNECTED : 0x00;
1810 } else if (dev_info->service_list & BT_SC_HID_SERVICE_MASK) {
1811 connected = _bt_util_is_profile_connected(BT_HID_CONNECTED,
1813 dev_info->connected_mask |= connected ? BT_HID_CONNECTED : 0x00;
1815 connected = _bt_util_is_profile_connected(BT_NETWORK_CONNECTED,
1818 connected = _bt_util_is_profile_connected(
1819 BT_NETWORK_SERVER_CONNECTED,
1821 dev_info->connected_mask |= connected ? BT_NETWORK_CONNECTED : 0x00;
1824 genlist = __bt_profile_draw_genlist(ugd, dev_info);
1825 vd->genlist = genlist;
1827 /* Set ugd as genlist object data. */
1828 /* We can get this data from genlist object anytime. */
1829 evas_object_data_set(genlist, "view_data", vd);
1831 navi_it = elm_naviframe_item_push(vd->navi_bar, BT_STR_DETAILS,
1832 NULL, NULL, genlist, NULL);
1834 elm_naviframe_prev_btn_auto_pushed_set(vd->navi_bar, EINA_FALSE);
1836 ea_object_event_callback_add(vd->navi_bar, EA_CALLBACK_BACK,
1837 ea_naviframe_back_cb, NULL);
1838 elm_naviframe_item_pop_cb_set(navi_it, __bt_profile_back_clicked_cb,
1841 vd->navi_it = navi_it;
1848 void _bt_profile_delete_view(void *data)
1854 ret_if(data == NULL);
1856 ugd = (bt_ug_data *)data;
1858 _bt_profile_destroy_profile_view(ugd);
1860 elm_naviframe_item_pop(ugd->navi_bar);
1862 if (ugd->rename_popup != NULL) {
1863 BT_INFO("Destorying rename_popup");
1864 evas_object_del(ugd->rename_popup);
1865 ugd->rename_popup = NULL;
1866 ugd->rename_entry = NULL;