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;
873 gboolean connected = FALSE;
875 dev = (bt_dev_t *)data;
876 ret_if(dev->ugd == NULL);
878 if (dev->status == BT_DEV_UNPAIRING)
881 connected = _bt_util_is_profile_connected(BT_NETWORK_CONNECTED, dev->bd_addr);
884 ret = __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
885 dev, BT_NETWORK_DEVICE);
887 ret = __bt_profile_connect_option((bt_ug_data *)dev->ugd,
888 dev, BT_NETWORK_DEVICE);
891 if (ret == BT_UG_FAIL)
892 elm_check_state_set(obj, dev->network_checked);
898 #ifndef TELEPHONY_DISABLED
899 static Evas_Object *__bt_profile_call_option_icon_get(void *data, Evas_Object *obj,
904 Evas_Object *check = NULL;
905 bt_dev_t *dev = NULL;
907 retv_if(NULL == data, NULL);
909 dev = (bt_dev_t *)data;
911 if (!strcmp("elm.swallow.end", part)) {
912 check = elm_check_add(obj);
913 elm_object_style_set(check, "on&off");
915 dev->call_checked = dev->connected_mask & \
916 BT_HEADSET_CONNECTED;
917 elm_check_state_set(check, dev->call_checked);
919 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
921 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
924 evas_object_smart_callback_add(check, "changed", __bt_profile_call_option_checkbox_sel, dev);
926 evas_object_propagate_events_set(check, EINA_FALSE);
927 evas_object_show(check);
934 static Evas_Object *__bt_profile_media_option_icon_get(void *data, Evas_Object *obj,
939 Evas_Object *check = NULL;
940 bt_dev_t *dev = NULL;
942 retv_if(NULL == data, NULL);
944 dev = (bt_dev_t *)data;
946 if (!strcmp("elm.swallow.end", part)) {
947 check = elm_check_add(obj);
948 elm_object_style_set(check, "on&off");
949 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
950 dev->media_checked = dev->connected_mask & \
951 BT_MUSIC_PLAYER_CONNECTED;
953 dev->media_checked = dev->connected_mask & \
954 BT_STEREO_HEADSET_CONNECTED;
956 elm_check_state_set(check, dev->media_checked);
958 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
960 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
963 evas_object_smart_callback_add(check, "changed", __bt_profile_media_option_checkbox_sel, dev);
965 evas_object_propagate_events_set(check, EINA_FALSE);
966 evas_object_show(check);
972 static Evas_Object *__bt_profile_hid_option_icon_get(void *data, Evas_Object *obj,
977 Evas_Object *check = NULL;
978 bt_dev_t *dev = NULL;
980 retv_if(NULL == data, NULL);
982 dev = (bt_dev_t *)data;
984 if (!strcmp("elm.swallow.end", part)) {
985 check = elm_check_add(obj);
986 elm_object_style_set(check, "on&off");
988 dev->hid_checked = dev->connected_mask & \
990 elm_check_state_set(check, dev->hid_checked);
992 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
994 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
997 evas_object_smart_callback_add(check, "changed", __bt_profile_hid_option_checkbox_sel, dev);
999 evas_object_propagate_events_set(check, EINA_FALSE);
1000 evas_object_show(check);
1006 static Evas_Object *__bt_profile_nap_option_icon_get(void *data, Evas_Object *obj,
1011 Evas_Object *check = NULL;
1012 bt_dev_t *dev = NULL;
1014 retv_if(NULL == data, NULL);
1016 dev = (bt_dev_t *)data;
1018 if (!strcmp("elm.swallow.end", part)) {
1019 check = elm_check_add(obj);
1020 elm_object_style_set(check, "on&off");
1022 dev->network_checked = _bt_util_is_profile_connected(BT_NETWORK_CONNECTED, dev->bd_addr);
1024 elm_check_state_set(check, dev->network_checked);
1026 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND,
1028 evas_object_size_hint_align_set(check, EVAS_HINT_FILL,
1031 evas_object_smart_callback_add(check, "changed", __bt_profile_nap_option_checkbox_sel, dev);
1033 evas_object_propagate_events_set(check, EINA_FALSE);
1034 evas_object_show(check);
1040 int __bt_profile_connect_option(bt_ug_data *ugd, bt_dev_t *dev,
1041 bt_device_type type)
1047 retv_if(ugd == NULL, BT_UG_FAIL);
1048 retv_if(dev == NULL, BT_UG_FAIL);
1050 if (type == BT_HEADSET_DEVICE || type == BT_STEREO_HEADSET_DEVICE ||
1051 type == BT_MUSIC_PLAYER_DEVICE) {
1052 if (type == BT_STEREO_HEADSET_DEVICE)
1053 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP;
1054 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1055 else if (type == BT_MUSIC_PLAYER_DEVICE)
1056 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP_SINK;
1059 audio_profile = BT_AUDIO_PROFILE_TYPE_HSP_HFP;
1061 if (bt_audio_connect(dev->addr_str,
1062 audio_profile) != BT_ERROR_NONE) {
1063 BT_ERR("Fail to connect Headset device");
1066 } else if (type == BT_HID_DEVICE) {
1069 BT_DBG("HID connect request");
1071 if (bt_hid_host_connect(dev->addr_str) != BT_ERROR_NONE) {
1075 } else if (type == BT_NETWORK_DEVICE){
1076 BT_DBG("Network connect request");
1080 if (dev->net_profile) {
1081 if (_bt_connect_net_profile(ugd->connection,
1083 dev) != BT_UG_ERROR_NONE) {
1084 BT_ERR("Fail to connect the net profile");
1089 _bt_get_registered_net_profile(ugd->connection,
1092 _bt_set_profile_state_changed_cb(net_profile, dev);
1094 if (_bt_connect_net_profile(ugd->connection,
1096 dev) != BT_UG_ERROR_NONE) {
1097 BT_ERR("Fail to connect the net profile");
1101 BT_ERR("No registered net profile");
1106 BT_ERR("Unknown type");
1110 ugd->connect_req = TRUE;
1111 dev->status = BT_CONNECTING;
1112 _bt_update_genlist_item((Elm_Object_Item *)dev->genlist_item);
1114 retv_if(ugd->profile_vd == NULL, BT_UG_FAIL);
1116 if (ugd->profile_vd->genlist) {
1117 _bt_util_set_list_disabled(ugd->profile_vd->genlist,
1122 return BT_UG_ERROR_NONE;
1125 int __bt_profile_disconnect_option(bt_ug_data *ugd, bt_dev_t *dev,
1126 bt_device_type type)
1131 bt_ug_ipc_param_t param;
1132 gboolean connected = FALSE;
1133 gboolean connected_nap_profile = FALSE;
1135 retv_if(ugd == NULL, BT_UG_FAIL);
1136 retv_if(dev == NULL, BT_UG_FAIL);
1138 memset(¶m, 0x00, sizeof(bt_ug_ipc_param_t));
1139 memcpy(param.param2, dev->bd_addr, BT_ADDRESS_LENGTH_MAX);
1141 if (type == BT_HEADSET_DEVICE) {
1142 connected = _bt_util_is_profile_connected(BT_HEADSET_CONNECTED,
1144 } else if (type == BT_STEREO_HEADSET_DEVICE) {
1145 connected = _bt_util_is_profile_connected(BT_STEREO_HEADSET_CONNECTED,
1147 } else if (type == BT_MUSIC_PLAYER_DEVICE) {
1148 connected = _bt_util_is_profile_connected(BT_MUSIC_PLAYER_CONNECTED,
1150 } else if (type == BT_HID_DEVICE) {
1151 connected = _bt_util_is_profile_connected(BT_HID_CONNECTED,
1153 } else if (type == BT_NETWORK_DEVICE) {
1154 connected = _bt_util_is_profile_connected(BT_NETWORK_CONNECTED,
1158 connected = _bt_util_is_profile_connected(BT_NETWORK_SERVER_CONNECTED,
1160 connected_nap_profile = connected;
1164 if (connected == FALSE) {
1165 BT_ERR("Not connected");
1169 if (type == BT_HEADSET_DEVICE || type == BT_STEREO_HEADSET_DEVICE ||
1170 type == BT_MUSIC_PLAYER_DEVICE) {
1171 if (type == BT_STEREO_HEADSET_DEVICE)
1172 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP;
1173 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1174 else if (type == BT_MUSIC_PLAYER_DEVICE)
1175 audio_profile = BT_AUDIO_PROFILE_TYPE_A2DP_SINK;
1178 audio_profile = BT_AUDIO_PROFILE_TYPE_HSP_HFP;
1180 if (bt_audio_disconnect(dev->addr_str,
1181 audio_profile) != BT_ERROR_NONE) {
1182 BT_ERR("Fail to connect Headset device");
1185 } else if (type == BT_HID_DEVICE) {
1186 BT_DBG("Disconnecting HID service!!");
1188 if (bt_hid_host_disconnect(dev->addr_str) != BT_ERROR_NONE) {
1189 BT_ERR("Fail to disconnect HID device");
1192 } else if (type == BT_NETWORK_DEVICE) {
1196 if (connected_nap_profile == FALSE) {
1197 BT_DBG("Disconnecting network service!! [PANU]");
1198 if (dev->net_profile) {
1199 if (_bt_disconnect_net_profile(ugd->connection,
1201 dev) != BT_UG_ERROR_NONE) {
1202 BT_ERR("Fail to disconnect the net profile");
1207 _bt_get_registered_net_profile(ugd->connection,
1210 _bt_set_profile_state_changed_cb(net_profile, dev);
1211 if (_bt_disconnect_net_profile(ugd->connection,
1213 dev) != BT_UG_ERROR_NONE) {
1214 BT_ERR("Fail to disconnect the net profile");
1218 BT_ERR("No registered net profile");
1223 BT_DBG("Disconnecting network service!! [NAP]");
1224 if (bt_nap_disconnect(dev->addr_str) == BT_UG_ERROR_NONE)
1225 BT_ERR("Failed to disconnect pan server");
1229 BT_ERR("Unknown type");
1233 ugd->connect_req = TRUE;
1234 dev->status = BT_DISCONNECTING;
1235 _bt_update_genlist_item((Elm_Object_Item *)dev->genlist_item);
1237 if (ugd->profile_vd->genlist) {
1238 _bt_util_set_list_disabled(ugd->profile_vd->genlist,
1243 return BT_UG_ERROR_NONE;
1246 #ifndef TELEPHONY_DISABLED
1247 static void __bt_profile_call_option_item_sel(void *data, Evas_Object *obj,
1252 bt_dev_t *dev = NULL;
1253 Elm_Object_Item *item = NULL;
1255 ret_if(event_info == NULL);
1258 item = (Elm_Object_Item *)event_info;
1259 elm_genlist_item_selected_set(item, EINA_FALSE);
1262 ret_if(data == NULL);
1264 dev = (bt_dev_t *)data;
1265 ret_if(dev->ugd == NULL);
1267 if (dev->status == BT_DEV_UNPAIRING)
1270 if (dev->connected_mask & BT_HEADSET_CONNECTED) {
1271 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1272 dev, BT_HEADSET_DEVICE);
1274 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1275 dev, BT_HEADSET_DEVICE);
1277 _bt_update_genlist_item(item);
1283 static void __bt_profile_media_option_item_sel(void *data, Evas_Object *obj,
1288 bt_dev_t *dev = NULL;
1289 Elm_Object_Item *item = NULL;
1291 ret_if(event_info == NULL);
1294 item = (Elm_Object_Item *)event_info;
1295 elm_genlist_item_selected_set(item, EINA_FALSE);
1298 ret_if(data == NULL);
1300 dev = (bt_dev_t *)data;
1301 ret_if(dev->ugd == NULL);
1303 if (dev->status == BT_DEV_UNPAIRING)
1305 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1306 if (dev->connected_mask & BT_MUSIC_PLAYER_CONNECTED) {
1307 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1308 dev, BT_MUSIC_PLAYER_DEVICE);
1310 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1311 dev, BT_MUSIC_PLAYER_DEVICE);
1314 if (dev->connected_mask & BT_STEREO_HEADSET_CONNECTED) {
1315 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1316 dev, BT_STEREO_HEADSET_DEVICE);
1318 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1319 dev, BT_STEREO_HEADSET_DEVICE);
1323 _bt_update_genlist_item(item);
1329 static void __bt_profile_hid_option_item_sel(void *data, Evas_Object *obj,
1334 bt_dev_t *dev = NULL;
1335 Elm_Object_Item *item = NULL;
1337 ret_if(event_info == NULL);
1340 item = (Elm_Object_Item *)event_info;
1341 elm_genlist_item_selected_set(item, EINA_FALSE);
1344 ret_if(data == NULL);
1346 dev = (bt_dev_t *)data;
1347 ret_if(dev->ugd == NULL);
1349 if (dev->status == BT_DEV_UNPAIRING)
1352 if (dev->connected_mask & BT_HID_CONNECTED) {
1353 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1354 dev, BT_HID_DEVICE);
1356 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1357 dev, BT_HID_DEVICE);
1359 _bt_update_genlist_item(item);
1365 static void __bt_profile_nap_option_item_sel(void *data, Evas_Object *obj,
1370 bt_dev_t *dev = NULL;
1371 Elm_Object_Item *item = NULL;
1372 gboolean connected = FALSE;
1374 ret_if(event_info == NULL);
1377 item = (Elm_Object_Item *)event_info;
1378 elm_genlist_item_selected_set(item, EINA_FALSE);
1381 ret_if(data == NULL);
1383 dev = (bt_dev_t *)data;
1384 ret_if(dev->ugd == NULL);
1386 if (dev->status == BT_DEV_UNPAIRING)
1389 connected = _bt_util_is_profile_connected(BT_NETWORK_CONNECTED, dev->bd_addr);
1392 __bt_profile_disconnect_option((bt_ug_data *)dev->ugd,
1393 dev, BT_NETWORK_DEVICE);
1395 __bt_profile_connect_option((bt_ug_data *)dev->ugd,
1396 dev, BT_NETWORK_DEVICE);
1399 _bt_update_genlist_item(item);
1404 void _bt_update_detail_item_style(bt_profile_view_data *vd)
1410 Elm_Object_Item *item = NULL;
1413 ret_if(vd->genlist == NULL);
1415 item_count = elm_genlist_items_count(vd->genlist);
1417 BT_INFO("item_count %d", item_count);
1419 if (vd->title_item == NULL || item_count < 4)
1421 /* Do not need to take care first 4 items as they are fixed */
1422 item_count = item_count - 5;
1424 item = elm_genlist_item_next_get(vd->title_item);
1426 while (item != NULL) {
1427 if (item_count == 1) {
1428 elm_object_item_signal_emit(item, "elm,state,normal", "");
1430 } else if (i == 1) {
1431 elm_object_item_signal_emit(item, "elm,state,top", "");
1433 } else if (item_count == i) {
1434 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1437 elm_object_item_signal_emit(item, "elm,state,center", "");
1441 item = elm_genlist_item_next_get(item);
1447 static int __bt_profile_get_item_type(bt_profile_view_data *vd, Elm_Object_Item *item)
1449 retv_if(vd == NULL, BT_ITEM_NONE);
1450 retv_if(item == NULL, BT_ITEM_NONE);
1452 if (item == vd->name_item) {
1453 return BT_ITEM_NAME;
1454 } else if (item == vd->unpair_item) {
1455 return BT_ITEM_UNPAIR;
1456 #ifndef TELEPHONY_DISABLED
1457 } else if (item == vd->call_item) {
1458 return BT_ITEM_CALL;
1460 } else if (item == vd->media_item) {
1461 return BT_ITEM_MEDIA;
1462 } else if (item == vd->hid_item) {
1464 } else if (item == vd->network_item) {
1465 return BT_ITEM_NETWORK;
1468 return BT_ITEM_NONE;
1471 static void __bt_profile_gl_realized(void *data, Evas_Object *obj, void *event_info)
1477 bt_profile_view_data *vd;
1478 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
1479 #ifdef KIRAN_ACCESSIBILITY
1481 char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
1485 ret_if(data == NULL);
1486 ret_if(item == NULL);
1488 ugd = (bt_ug_data *)data;
1490 vd = ugd->profile_vd;
1493 item_type = __bt_profile_get_item_type(vd, item);
1495 BT_INFO("type: %d", item_type);
1496 #ifdef KIRAN_ACCESSIBILITY
1497 dev_info = (bt_dev_t *)elm_object_item_data_get(item);
1498 ao = elm_object_item_access_object_get(item);
1500 switch (item_type) {
1502 elm_object_item_signal_emit(item, "elm,state,top", "");
1504 #ifdef KIRAN_ACCESSIBILITY
1505 if (dev_info != NULL)
1506 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_DEVICE_NAME,
1507 dev_info->name, BT_STR_DOUBLE_TAP_RENAME);
1509 snprintf(str, sizeof(str), "%s, %s", BT_STR_DEVICE_NAME,
1510 BT_STR_DOUBLE_TAP_RENAME);
1512 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1515 case BT_ITEM_UNPAIR:
1516 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1518 #ifdef KIRAN_ACCESSIBILITY
1519 snprintf(str, sizeof(str), "%s, %s", BT_STR_UNPAIR,
1520 BT_STR_DOUBLE_TAP_UNPAIR);
1521 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1525 #ifndef TELEPHONY_DISABLED
1527 #ifdef KIRAN_ACCESSIBILITY
1528 if (dev_info->call_checked)
1529 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_CALL_AUDIO,
1530 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1532 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_CALL_AUDIO,
1533 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1534 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1539 #ifdef KIRAN_ACCESSIBILITY
1540 if (dev_info->media_checked)
1541 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_MEDIA_AUDIO,
1542 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1544 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_MEDIA_AUDIO,
1545 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1546 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1551 #ifdef KIRAN_ACCESSIBILITY
1552 if (dev_info->hid_checked)
1553 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INPUT_DEVICE,
1554 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1556 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INPUT_DEVICE,
1557 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1558 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1562 case BT_ITEM_NETWORK:
1563 #ifdef KIRAN_ACCESSIBILITY
1564 if (dev_info->network_checked)
1565 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INTERNET_ACCESS,
1566 BT_STR_RADIO_BUTTON, BT_STR_RADIO_SELECTED);
1568 snprintf(str, sizeof(str), "%s, %s, %s", BT_STR_INTERNET_ACCESS,
1569 BT_STR_RADIO_BUTTON, BT_STR_RADIO_UNSELECTED);
1570 elm_access_info_set(ao, ELM_ACCESS_INFO, str);
1579 _bt_update_detail_item_style(vd);
1583 /* Create genlist and append items */
1584 static Evas_Object *__bt_profile_draw_genlist(bt_ug_data *ugd, bt_dev_t *dev_info)
1588 bt_profile_view_data *vd = NULL;
1589 Evas_Object *genlist = NULL;
1590 Elm_Object_Item *git = NULL;
1592 retv_if(ugd == NULL, NULL);
1593 retv_if(ugd->profile_vd == NULL, NULL);
1595 vd = ugd->profile_vd;
1597 /* Set item class for dialogue normal items */
1598 vd->name_itc = elm_genlist_item_class_new();
1599 retv_if (vd->name_itc == NULL, NULL);
1600 vd->name_itc->item_style = BT_GENLIST_2LINE_BOTTOM_TEXT_STYLE;
1601 vd->name_itc->func.text_get = __bt_profile_name_label_get;
1602 vd->name_itc->func.content_get = NULL;
1603 vd->name_itc->func.state_get = NULL;
1604 vd->name_itc->func.del = NULL;
1606 vd->unpair_itc = elm_genlist_item_class_new();
1607 retv_if (vd->unpair_itc == NULL, NULL);
1609 vd->unpair_itc->item_style = BT_GENLIST_1LINE_TEXT_STYLE;
1610 vd->unpair_itc->func.text_get = __bt_profile_unpair_label_get;
1611 vd->unpair_itc->func.content_get = NULL;
1612 vd->unpair_itc->func.state_get = NULL;
1613 vd->unpair_itc->func.del = NULL;
1615 /* Create genlist */
1616 genlist = elm_genlist_add(ugd->navi_bar);
1617 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
1618 elm_genlist_homogeneous_set(genlist, EINA_FALSE);
1619 elm_genlist_block_count_set(genlist, 3);
1621 evas_object_smart_callback_add(genlist, "realized",
1622 __bt_profile_gl_realized, ugd);
1624 /* device name item */
1625 git = elm_genlist_item_append(genlist, vd->name_itc, dev_info, NULL,
1626 ELM_GENLIST_ITEM_NONE,
1627 __bt_profile_name_item_sel, ugd);
1628 vd->name_item = git;
1631 git = elm_genlist_item_append(genlist, vd->unpair_itc, NULL, NULL,
1632 ELM_GENLIST_ITEM_NONE,
1633 __bt_profile_unpair_item_sel, dev_info);
1634 vd->unpair_item = git;
1636 /* If the device has no headset profile, exit this function */
1637 if (!(dev_info->service_list & BT_SC_HFP_SERVICE_MASK) &&
1638 !(dev_info->service_list & BT_SC_HSP_SERVICE_MASK) &&
1639 !(dev_info->service_list & BT_SC_A2DP_SERVICE_MASK) &&
1640 !(dev_info->service_list & BT_SC_A2DP_SOURCE_SERVICE_MASK) &&
1641 !(dev_info->service_list & BT_SC_HID_SERVICE_MASK) &&
1642 !(dev_info->service_list & BT_SC_NAP_SERVICE_MASK)) {
1646 vd->title_itc = elm_genlist_item_class_new();
1647 retv_if (vd->title_itc == NULL, NULL);
1649 vd->title_itc->item_style = BT_GENLIST_GROUP_INDEX_STYLE;
1650 vd->title_itc->func.text_get = __bt_proflie_title_label_get;
1651 vd->title_itc->func.content_get = NULL;
1652 vd->title_itc->func.state_get = NULL;
1653 vd->title_itc->func.del = NULL;
1655 #ifndef TELEPHONY_DISABLED
1656 vd->call_itc = elm_genlist_item_class_new();
1657 retv_if (vd->call_itc == NULL, NULL);
1659 vd->call_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
1660 vd->call_itc->func.text_get = __bt_proflie_call_option_label_get;
1661 vd->call_itc->func.content_get = __bt_profile_call_option_icon_get;
1662 vd->call_itc->func.state_get = NULL;
1663 vd->call_itc->func.del = NULL;
1665 vd->media_itc = elm_genlist_item_class_new();
1666 retv_if (vd->media_itc == NULL, NULL);
1668 vd->media_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
1669 vd->media_itc->func.text_get = __bt_proflie_media_option_label_get;
1670 vd->media_itc->func.content_get = __bt_profile_media_option_icon_get;
1671 vd->media_itc->func.state_get = NULL;
1672 vd->media_itc->func.del = NULL;
1674 vd->hid_itc = elm_genlist_item_class_new();
1675 retv_if (vd->hid_itc == NULL, NULL);
1677 vd->hid_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
1678 vd->hid_itc->func.text_get = __bt_proflie_hid_option_label_get;
1679 vd->hid_itc->func.content_get = __bt_profile_hid_option_icon_get;
1680 vd->hid_itc->func.state_get = NULL;
1681 vd->hid_itc->func.del = NULL;
1683 #ifndef TIZEN_BT_A2DP_SINK_ENABLE
1684 vd->network_itc = elm_genlist_item_class_new();
1685 retv_if (vd->network_itc == NULL, NULL);
1687 vd->network_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
1688 vd->network_itc->func.text_get = __bt_proflie_nap_option_label_get;
1689 vd->network_itc->func.content_get = __bt_profile_nap_option_icon_get;
1690 vd->network_itc->func.state_get = NULL;
1691 vd->network_itc->func.del = NULL;
1693 /* Connection options title */
1694 git = elm_genlist_item_append(genlist, vd->title_itc, NULL, NULL,
1695 ELM_GENLIST_ITEM_NONE,
1698 elm_genlist_item_select_mode_set(git,
1699 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1701 vd->title_item = git;
1703 #ifndef TELEPHONY_DISABLED
1704 if (dev_info->service_list & BT_SC_HFP_SERVICE_MASK ||
1705 dev_info->service_list & BT_SC_HSP_SERVICE_MASK) {
1707 git = elm_genlist_item_append(genlist, vd->call_itc,
1709 ELM_GENLIST_ITEM_NONE,
1710 __bt_profile_call_option_item_sel,
1712 vd->call_item = git;
1715 #ifdef TIZEN_BT_A2DP_SINK_ENABLE
1716 if (dev_info->service_list & BT_SC_A2DP_SOURCE_SERVICE_MASK) {
1718 if (dev_info->service_list & BT_SC_A2DP_SERVICE_MASK) {
1721 git = elm_genlist_item_append(genlist, vd->media_itc,
1723 ELM_GENLIST_ITEM_NONE,
1724 __bt_profile_media_option_item_sel,
1727 vd->media_item = git;
1729 BT_INFO("service list: %x", dev_info->service_list);
1730 BT_INFO("is hid: %d", dev_info->service_list & BT_SC_HID_SERVICE_MASK);
1732 if (dev_info->service_list & BT_SC_HID_SERVICE_MASK) {
1735 git = elm_genlist_item_append(genlist, vd->hid_itc,
1737 ELM_GENLIST_ITEM_NONE,
1738 __bt_profile_hid_option_item_sel,
1743 BT_INFO("HID options is disabled");
1744 git = elm_genlist_item_append(genlist, vd->hid_itc,
1746 ELM_GENLIST_ITEM_NONE,
1750 BT_INFO("HID item disabled");
1751 elm_object_item_disabled_set (vd->hid_item, EINA_TRUE);
1755 #ifndef TIZEN_BT_A2DP_SINK_ENABLE
1756 if (dev_info->service_list & BT_SC_NAP_SERVICE_MASK) {
1758 git = elm_genlist_item_append(genlist, vd->network_itc,
1760 ELM_GENLIST_ITEM_NONE,
1761 __bt_profile_nap_option_item_sel,
1763 vd->network_item = git;
1771 void _bt_profile_destroy_profile_view(void *data)
1775 bt_ug_data *ugd = (bt_ug_data *)data;
1776 bt_profile_view_data *vd = NULL;
1778 ret_if(ugd == NULL);
1779 ret_if(ugd->profile_vd == NULL);
1781 vd = ugd->profile_vd;
1784 elm_genlist_item_class_free(vd->name_itc);
1785 vd->name_itc = NULL;
1788 if (vd->unpair_itc) {
1789 elm_genlist_item_class_free(vd->unpair_itc);
1790 vd->unpair_itc = NULL;
1793 if (vd->title_itc) {
1794 elm_genlist_item_class_free(vd->title_itc);
1795 vd->title_itc = NULL;
1798 #ifndef TELEPHONY_DISABLED
1800 elm_genlist_item_class_free(vd->call_itc);
1801 vd->call_itc = NULL;
1805 if (vd->media_itc) {
1806 elm_genlist_item_class_free(vd->media_itc);
1807 vd->media_itc = NULL;
1811 elm_genlist_item_class_free(vd->hid_itc);
1814 #ifndef TIZEN_BT_A2DP_SINK_ENABLE
1815 if (vd->network_itc) {
1816 elm_genlist_item_class_free(vd->network_itc);
1817 vd->network_itc = NULL;
1820 vd->save_btn = NULL;
1822 /* unregister callback functions */
1823 if (vd->imf_context) {
1824 ecore_imf_context_input_panel_event_callback_del(vd->imf_context,
1825 ECORE_IMF_INPUT_PANEL_STATE_EVENT,
1826 __bt_profile_input_panel_state_cb);
1827 vd->imf_context = NULL;
1831 ugd->profile_vd = NULL;
1836 static Eina_Bool __bt_profile_back_clicked_cb(void *data, Elm_Object_Item *it)
1839 retv_if(!data, EINA_TRUE);
1841 bt_ug_data *ugd = (bt_ug_data *)data;
1842 ugd->profile_vd = NULL;
1844 if (ugd->popup != NULL){
1845 evas_object_del(ugd->popup);
1847 ugd->is_popup_exist = 0;
1854 static void __bt_profile_back_cb(void *data, Evas_Object *obj, void *event_info)
1856 _bt_profile_delete_view(data);
1859 /**********************************************************************
1861 ***********************************************************************/
1863 void _bt_profile_create_view(bt_dev_t *dev_info)
1867 bt_profile_view_data *vd;
1869 Evas_Object *genlist;
1870 Elm_Object_Item *navi_it;
1871 Evas_Object *back_button = NULL;
1874 ret_if(dev_info == NULL);
1875 ret_if(dev_info->ugd == NULL);
1877 ugd = dev_info->ugd;
1879 vd = calloc(1, sizeof(bt_profile_view_data));
1882 ugd->profile_vd = vd;
1883 vd->win_main = ugd->win_main;
1884 vd->navi_bar = ugd->navi_bar;
1887 if (dev_info->service_list & BT_SC_HFP_SERVICE_MASK ||
1888 dev_info->service_list & BT_SC_HSP_SERVICE_MASK ||
1889 dev_info->service_list & BT_SC_A2DP_SERVICE_MASK) {
1890 connected = _bt_util_is_profile_connected(BT_HEADSET_CONNECTED,
1892 dev_info->connected_mask |= connected ? BT_HEADSET_CONNECTED : 0x00;
1895 _bt_util_is_profile_connected(BT_STEREO_HEADSET_CONNECTED,
1897 dev_info->connected_mask |=
1898 connected ? BT_STEREO_HEADSET_CONNECTED : 0x00;
1899 } else if (dev_info->service_list & BT_SC_A2DP_SOURCE_SERVICE_MASK ) {
1900 connected = _bt_util_is_profile_connected(BT_MUSIC_PLAYER_CONNECTED,
1902 dev_info->connected_mask |=
1903 connected ? BT_MUSIC_PLAYER_CONNECTED : 0x00;
1904 } else if (dev_info->service_list & BT_SC_HID_SERVICE_MASK) {
1905 connected = _bt_util_is_profile_connected(BT_HID_CONNECTED,
1907 dev_info->connected_mask |= connected ? BT_HID_CONNECTED : 0x00;
1909 connected = _bt_util_is_profile_connected(BT_NETWORK_CONNECTED,
1912 connected = _bt_util_is_profile_connected(
1913 BT_NETWORK_SERVER_CONNECTED,
1915 dev_info->connected_mask |= connected ? BT_NETWORK_CONNECTED : 0x00;
1918 genlist = __bt_profile_draw_genlist(ugd, dev_info);
1919 vd->genlist = genlist;
1921 /* Set ugd as genlist object data. */
1922 /* We can get this data from genlist object anytime. */
1923 evas_object_data_set(genlist, "view_data", vd);
1925 back_button = elm_button_add(vd->navi_bar);
1926 elm_object_style_set(back_button, "naviframe/end_btn/default");
1928 navi_it = elm_naviframe_item_push(vd->navi_bar, BT_STR_DETAILS,
1929 back_button, NULL, genlist, NULL);
1931 vd->navi_it = navi_it;
1933 evas_object_smart_callback_add(back_button, "clicked", __bt_profile_back_cb, ugd);
1935 elm_naviframe_prev_btn_auto_pushed_set(vd->navi_bar, EINA_FALSE);
1937 elm_naviframe_item_pop_cb_set(navi_it, __bt_profile_back_clicked_cb,
1946 void _bt_profile_delete_view(void *data)
1952 ret_if(data == NULL);
1954 ugd = (bt_ug_data *)data;
1956 _bt_profile_destroy_profile_view(ugd);
1958 elm_naviframe_item_pop(ugd->navi_bar);
1960 if (ugd->rename_popup != NULL) {
1961 BT_INFO("Destorying rename_popup");
1962 evas_object_del(ugd->rename_popup);
1963 ugd->rename_popup = NULL;
1964 ugd->rename_entry = NULL;