2 * Copyright (c) 2010 Samsung Electronics, Inc.
5 * This software is a confidential and proprietary information
6 * of Samsung Electronics, Inc. ("Confidential Information"). You
7 * shall not disclose such Confidential Information and shall use
8 * it only in accordance with the terms of the license agreement
9 * you entered into with Samsung Electronics.
14 * Created on: Oct 9, 2013
20 #include "setting-bluetooth.h"
21 #include "setting_control_bt.h"
22 #include "setting_data_vconf.h"
23 #include "setting-common-sound.h"
27 static struct _bt_menu_item bt_menu_its[] = {
28 { "IDS_QP_BUTTON_BLUETOOTH", DISABLE, _blutooth_cb },
29 { "IDS_VCALL_BODY_BT_HEADSET", DISABLE, _BT_headset_cb },
30 { "IDS_ST_MBODY_MAKE_VISIBLE_ABB", DISABLE, _visibility_cb }, // "IDS_OP_BODY_VISIBILITY"
31 { NULL, DISABLE, NULL }
34 static char * bluetooth_enable_str[] = {
35 "IDS_ST_BODY_OFF_M_STATUS",
36 "IDS_ST_BODY_ON_M_STATUS",
37 "IDS_COM_POP_PROCESSING"
40 static char * visible_str[] = {
41 "IDS_ST_BODY_DISABLED_M_STATUS",
42 "IDS_ST_BODY_YOUR_GEAR_IS_VISIBLE_FOR_PS_ABB"
46 static Ecore_Timer *bt_timer = NULL;
47 static Ecore_Timer *vb_timer = NULL;
49 static Elm_Object_Item* bt_it = NULL;
50 static Elm_Object_Item* vb_it = NULL;
51 static Elm_Object_Item* hf_it = NULL;
53 static Evas_Object * bt_genlist = NULL;
54 static Evas_Object * g_bt_check = NULL;
55 static Evas_Object * g_vb_check = NULL;
57 static int is_bt_operating = BT_NON_OPERATING;
58 static int timeout_seconds = VISIBILITY_TIMEOUT;
59 static bt_adapter_visibility_mode_e visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
60 static int origin_bt_enable;
61 static double bt_time = 0.0;
62 static int is_connected_hf = FALSE;
63 static char * g_device_name = NULL;
66 static void _init_bt_value();
67 static int is_handsfree_connected();
68 static void _bt_genlist_update();
69 static int is_disable_visibility_item_view();
70 static void _update_visibility_view();
73 static void sap_state_vconf_change_cb(keynode_t *key, void * data)
75 _update_visibility_item_view(is_handsfree_connected());
78 static void _bt_adapter_state_enabled_cb(int result, bt_adapter_state_e adapter_state, void *user_data)
80 DBG("Setting - _bt_adapter_state_enabled_cb() is called!");
82 if (adapter_state == BT_ADAPTER_ENABLED)
84 DBG("Setting - BT adapter state : BT_ADAPTER_ENABLED");
86 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 1;
90 else if (adapter_state == BT_ADAPTER_DISABLED)
92 DBG("Setting - BT adapter state : BT_ADAPTER_DISABLED");
94 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 0;
95 is_connected_hf = FALSE;
104 DBG("Setting - initialize_bt()");
106 if( bt_initialize() != BT_ERROR_NONE )
108 ERR("Setting - bt_initialize() is failed....");
111 DBG("Setting - bt_initialize() is success");
113 if(bt_adapter_set_state_changed_cb(_bt_adapter_state_enabled_cb, NULL) != BT_ERROR_NONE)
115 ERR("[%s] bt_adapter_set_state_changed_cb() failed.", __FUNCTION__);
120 DBG("bt_adapter_set_state_changed_cb() is success!");
123 bluetooth_hf_init(hf_event_handler, NULL);
125 register_vconf_changing("memory/private/sap/conn_status", sap_state_vconf_change_cb, NULL);
128 ret = feedback_initialize();
129 if(ret != FEEDBACK_ERROR_NONE){
130 DBG("feedback_initialize failed");
134 Eina_Bool _clear_bluetooth_cb(void *data, Elm_Object_Item *it)
141 static void _disable_visibility_item_view()
143 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
144 timeout_seconds = VISIBILITY_TIMEOUT;
146 _update_visibility_view();
149 static void hf_event_handler(int event, void *data, void *user_data)
152 case BLUETOOTH_EVENT_HF_CONNECTED:
153 DBG("Setting - BLUETOOTH_EVENT_HF_CONNECTED");
154 _update_visibility_item_view(TRUE);
157 case BLUETOOTH_EVENT_HF_DISCONNECTED:
158 DBG("Setting - BLUETOOTH_EVENT_HF_DISCONNECTED");
159 _update_visibility_item_view(is_handsfree_connected());
164 void _update_visibility_item_view(int is_hf_connected)
166 DBG("Setting - _update_view() is called!!");
170 is_connected_hf = TRUE;
174 ecore_timer_del(vb_timer);
178 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
179 timeout_seconds = VISIBILITY_TIMEOUT;
181 _update_visibility_view();
185 is_connected_hf = FALSE;
187 _update_visibility_view();
191 void clear_bt_resource()
193 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = DISABLE;
194 is_bt_operating = BT_NON_OPERATING;
196 if ( timeout_seconds == 0 && vb_timer )
198 ecore_timer_del(vb_timer);
201 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
202 timeout_seconds = VISIBILITY_TIMEOUT;
205 bluetooth_hf_deinit();
207 int ret = bt_adapter_unset_state_changed_cb();
209 if (ret != BT_ERROR_NONE)
211 ERR("Setting - bt adapter unset state changed cb is fail");
214 if (bt_deinitialize() < 0)
216 ERR("Setting - bt_deinitialize() failed.");
219 DBG("Setting - bt_deinitialize() is success");
227 /* Unregister SAP status vconf changeing callback */
228 unregister_vconf_changing("memory/private/sap/conn_status", sap_state_vconf_change_cb);
230 ret = feedback_deinitialize();
231 if(ret != FEEDBACK_ERROR_NONE){
232 DBG("feedback_deinitialize failed");
236 static void _init_bt_value()
240 timeout_seconds = VISIBILITY_TIMEOUT;
241 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
242 is_bt_operating = BT_NON_OPERATING;
245 static void _alternate_bt_mode( void * data )
248 bt_adapter_state_e value;
250 //appdata * ad = data;
252 int prev_bt_enable = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
253 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 2;
256 elm_genlist_item_fields_update( bt_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
257 elm_check_state_set(g_bt_check, !prev_bt_enable);
258 edje_object_signal_emit(elm_layout_edje_get(g_bt_check), "elm,state,disabled", "elm");
261 if (bt_adapter_get_state(&value) != BT_ERROR_NONE)
263 ERR("Setting - bt_adapter_get_state() is failed ");
268 if( value == EINA_TRUE )
270 DBG("Setting - Current bt is on....disable...");
272 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 0;
273 is_connected_hf = TRUE;
274 _disable_visibility_item_view();
278 elm_genlist_item_update(hf_it);
281 ret = bt_adapter_disable();
283 timeout_seconds = 0; // vb_timer stop!!
287 DBG("Setting - Current bt is off....enable...");
288 ret = bt_adapter_enable();
291 if ( ret != BT_ERROR_NONE )
293 DBG("Setting - Enalbe or Disable failed.... : %d", ret);
295 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = origin_bt_enable;
297 _bt_genlist_update();
304 static void _blutooth_cb(void *data, Evas_Object *obj, void *event_info)
306 DBG("Setting - %s", "Setting - _blutooth_cb is called");
308 Elm_Object_Item* it = (Elm_Object_Item *)event_info;
309 elm_genlist_item_selected_set(it, EINA_FALSE);
311 if (is_bt_operating == BT_OPERATING)
313 DBG("Setting - _blutooth_cb() is same status ");
317 is_bt_operating = BT_OPERATING;
322 DBG("%s", "Setting - _blutooth_cb - ad or check is null");
326 // previous state backup
327 origin_bt_enable = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
329 if( vb_timer != NULL && vb_it != NULL )
331 DBG("Setting - vb_it is disabled");
333 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
336 ecore_timer_del(vb_timer);
339 _update_visibility_view();
341 //elm_genlist_item_update(vb_it);
344 _alternate_bt_mode(data);
347 static int is_valid_timeout(int seconds)
349 return ( (seconds > 0) && (seconds <= VISIBILITY_TIMEOUT) );
352 static void _bt_genlist_update()
356 elm_genlist_item_fields_update( bt_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
358 int bt_enable = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
359 edje_object_signal_emit(elm_layout_edje_get(g_bt_check), "elm,state,enabled", "elm");
360 elm_check_state_set(g_bt_check, (bt_enable == 1) ? EINA_TRUE : EINA_FALSE);
364 elm_genlist_item_update(hf_it);
368 elm_genlist_item_fields_update( vb_it, "elm.text.1", ELM_GENLIST_ITEM_FIELD_TEXT);
369 elm_genlist_item_fields_update( vb_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
371 elm_check_state_set(g_vb_check, (bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable == 1) ? EINA_TRUE : EINA_FALSE);
373 if( is_disable_visibility_item_view() )
375 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,disabled", "elm");
379 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,enabled", "elm");
384 static void _update_visibility_view()
386 DBG("Setting - _update_visibility_view()");
390 elm_genlist_item_fields_update( vb_it, "elm.text.1", ELM_GENLIST_ITEM_FIELD_TEXT);
391 elm_genlist_item_fields_update( vb_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
393 elm_check_state_set(g_vb_check, (bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable == TRUE)
394 ? EINA_TRUE : EINA_FALSE);
396 if( is_disable_visibility_item_view() )
398 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,disabled", "elm");
402 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,enabled", "elm");
407 static void _update_visibility_item_update(void * data)
412 DBG("Setting - ad is null.");
416 if( ad->MENU_TYPE == SETTING_BLUETOOTH )
418 DBG("Setting - update_visibility_item_update");
420 _update_visibility_view();
421 //_bt_genlist_update();
425 static void _init_vb_data(void * data)
427 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
428 timeout_seconds = VISIBILITY_TIMEOUT;
429 _update_visibility_item_update(data);
433 static Eina_Bool __vb_timeout(void *data)
435 if( is_valid_timeout(timeout_seconds) )
437 DBG("Setting - %d seconds", timeout_seconds);
441 _update_visibility_item_update(data);
443 return ECORE_CALLBACK_RENEW;
446 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
447 _update_visibility_item_update(data);
449 DBG("Setting - visibility time is out.");
451 if( visibility_mode != BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE )
453 if( bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE, 0) != BT_ERROR_NONE )
455 DBG("[%s] Setting - bt_adapter_set_visibility(NON) failed.", __FUNCTION__);
457 return ECORE_CALLBACK_CANCEL;
459 visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
460 DBG("[%s] Setting - bt_adapter_set_visibility(NON) success.", __FUNCTION__);
465 return ECORE_CALLBACK_CANCEL;
468 static void _start_visibility_timer(void * data)
470 if ( vb_timer) // Timer Start
472 ecore_timer_del(vb_timer);
475 vb_timer = ecore_timer_add(1.0, (Ecore_Task_Cb) __vb_timeout, data);
478 static void _bt_visibility_mode(void * data)
480 bt_adapter_state_e bt_state;
482 if( bt_adapter_get_state(&bt_state) != BT_ERROR_NONE )
484 DBG("[%s] Setting - bt_adapter_get_state() failed.", __FUNCTION__);
489 vconf_get_int(VCONFKEY_BT_STATUS, &state);
491 DBG("Setting - bt state : %d", state);
493 if( bt_state == BT_ADAPTER_ENABLED )
495 if(bt_adapter_get_visibility(&visibility_mode, NULL) != BT_ERROR_NONE)
497 DBG("[%s] Setting - bt_adapter_get_visibility() failed.", __FUNCTION__);
501 DBG("Setting - visibility_mode : %d", visibility_mode);
503 if( visibility_mode == BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE )
505 if( bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE, 0) != BT_ERROR_NONE )
507 DBG("[%s] Setting - bt_adapter_set_visibility(VISIBLE) failed.", __FUNCTION__);
511 visibility_mode = BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE;
512 DBG("[%s] Setting - bt_adapter_set_visibility(VISIBLE) success.", __FUNCTION__);
514 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = ENABLE;
515 timeout_seconds = VISIBILITY_TIMEOUT;
517 _update_visibility_view();
519 _start_visibility_timer(data); // Timer start
522 else if( visibility_mode == BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE )
524 DBG("[%s] Setting - Visibility mode was already set as BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE.", __FUNCTION__);
526 timeout_seconds = 0; // Timer stop;
528 if( bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE, 0) != BT_ERROR_NONE )
530 DBG("[%s] Setting - bt_adapter_set_visibility(NON) failed.", __FUNCTION__);
534 visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
535 DBG("[%s] Setting - bt_adapter_set_visibility(NON) success.", __FUNCTION__);
541 static int is_disable_visibility_item_view()
543 return ( !bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable || is_connected_hf );
546 static void _visibility_cb(void *data, Evas_Object *obj, void *event_info)
548 DBG("%s", "Setting - _visibility_cb is called");
550 Elm_Object_Item* it = (Elm_Object_Item *)event_info;
551 elm_genlist_item_selected_set(it, EINA_FALSE);
553 bool touch_sound_enable = false;
554 if( get_sound_mode() == SOUND_MODE_SOUND )
556 vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &touch_sound_enable);
557 if( touch_sound_enable )
559 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
563 if( is_disable_visibility_item_view() )
565 DBG("Setting - disable visibility!!");
572 DBG("%s", "Setting - _visibility_cb - ad or check is null");
576 _bt_visibility_mode(data);
579 static int _is_enable_BT_headset()
583 vconf_get_int(VCONFKEY_BT_STATUS, &enable);
585 return (enable != VCONFKEY_BT_STATUS_OFF) && bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
588 static void _BT_headset_cb(void *data, Evas_Object *obj, void *event_info)
590 DBG("%s", "Setting - _BT_headset_cb is called");
592 Elm_Object_Item* it = (Elm_Object_Item *)event_info;
593 elm_genlist_item_selected_set(it, EINA_FALSE);
595 if( !_is_enable_BT_headset() )
598 app_control_h service;
599 app_control_create(&service);
600 app_control_set_app_id(service, "org.tizen.bluetooth");
601 app_control_add_extra_data(service, "launch-type", "setting");
602 app_control_send_launch_request(service, NULL, NULL);
603 app_control_destroy(service);
606 static char * _get_device_name()
608 char *bt_adapter_name = NULL;
611 bt_adapter_state_e bt_state;
612 if( bt_adapter_get_state(&bt_state) != BT_ERROR_NONE )
614 DBG("[%s] Setting - bt_adapter_get_state() failed.", __FUNCTION__);
617 if (bt_adapter_get_name(&bt_adapter_name) != BT_ERROR_NONE)
619 ERR("%s,%d: bt get name fail", __func__, __LINE__);
623 bt_adapter_name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
625 return strdup(bt_adapter_name);
628 static char * _gl_bt_title_get(void *data, Evas_Object *obj, const char *part)
631 Bt_Item_Data *id = data;
632 int index = id->index;
635 if( !strcmp(part, "elm.text.1") || !strcmp(part, "elm.text") )
637 if( index == BT_MENU_TYPE_BT_ON_OFF )
639 snprintf(buf, sizeof(buf)-1, "%s", _(bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].name));
641 else if( index == BT_MENU_TYPE_VISIBLE_ON_OFF )
643 if( is_disable_visibility_item_view() )
645 strcpy(expression, "<font color=#515151>%s</font>");
649 strcpy(expression, "%s");
651 snprintf(buf, sizeof(buf)-1, expression, _(bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].name));
655 if( !_is_enable_BT_headset() )
657 strcpy(expression, "<font color=#515151>%s</font>");
661 strcpy(expression, "%s");
663 snprintf(buf, sizeof(buf)-1, expression, _(bt_menu_its[BT_MENU_TYPE_BT_HEADSET].name));
666 else if( !strcmp(part, "elm.text.2") )
668 if( index == BT_MENU_TYPE_BT_ON_OFF )
670 DBG("BT item subtitle updated!!");
671 int sub_title_type = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
672 char * subtitle = subtitle = _(bluetooth_enable_str[sub_title_type]);
673 snprintf(buf, sizeof(buf)-1, "%s", subtitle);
675 else if( index == BT_MENU_TYPE_VISIBLE_ON_OFF )
677 if( is_disable_visibility_item_view() )
679 strcpy(expression, "<font color=#515151>%s</font>");
681 if( g_device_name == NULL )
683 g_device_name = _get_device_name();
684 if( g_device_name == NULL )
686 g_device_name = _(visible_str[bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable]);
690 snprintf(buf, sizeof(buf)-1, expression, g_device_name);
694 if( bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable )
696 int hour = timeout_seconds / 60;
697 int minutes = timeout_seconds % 60;
699 char time_buf[16] = {0,};
700 snprintf(time_buf, sizeof(time_buf)-1, "%02d:%02d", hour, minutes);
702 snprintf(buf, sizeof(buf)-1, _(visible_str[bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable]), time_buf);
706 g_device_name = _get_device_name();
707 if( g_device_name == NULL )
709 g_device_name = _(visible_str[bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable]);
712 snprintf(buf, sizeof(buf)-1, "%s", g_device_name);
720 static Evas_Object * _get_emtpy_layout(Evas_Object * parent)
725 Evas_Object * layout = elm_layout_add(parent);
726 elm_layout_file_set(layout, EDJE_PATH, "setting-empty/swallow");
732 static Evas_Object * _gl_bt_check_get(void *data, Evas_Object *obj, const char *part)
734 Evas_Object *check = NULL;
736 Bt_Item_Data *id = data;
737 int index = id->index;
739 if( !strcmp(part, "elm.icon") )
741 check = elm_check_add(obj);
742 elm_object_style_set(check, "list");
743 elm_check_state_set(check, (bt_menu_its[index].is_enable == TRUE) ? EINA_TRUE : EINA_FALSE);
744 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
745 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
746 evas_object_propagate_events_set(check, EINA_FALSE);
747 evas_object_repeat_events_set(check, EINA_TRUE);
749 if( index == BT_MENU_TYPE_VISIBLE_ON_OFF )
751 if( is_disable_visibility_item_view() )
753 edje_object_signal_emit(elm_layout_edje_get(check), "elm,state,disabled", "elm");
757 else if( index == BT_MENU_TYPE_BT_ON_OFF )
765 static void _bt_gl_del(void *data, Evas_Object *obj)
767 Bt_Item_Data *id = data;
772 static void init_values()
776 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
780 static int is_handsfree_connected()
783 int headset_connected = FALSE;
784 int sap_connected = FALSE;
786 vconf_get_int(VCONFKEY_BT_DEVICE, &headset_connected);
787 DBG("Heaadset connected : %x", headset_connected);
789 if ( headset_connected & VCONFKEY_BT_DEVICE_AG_CONNECTED )
791 DBG("Setting - Heaadset connected");
795 vconf_get_int("memory/private/sap/conn_status", &sap_connected);
796 DBG("Sap connected : %d", sap_connected);
799 DBG("Setting - Sap connected");
806 static int is_add_BT_headset()
809 // this code will be changed!!
813 static int is_BT_enable()
815 int enable = DISABLE;
817 if (bt_adapter_get_state(&enable) != BT_ERROR_NONE)
819 ERR("Setting - bt_adapter_get_state() is failed ");
827 Evas_Object* _create_bt_list(void* data)
832 DBG("%s", "_create_bluetooth_list - appdata is null");
836 Evas_Object *genlist = NULL;
837 struct _bt_menu_item *menu_its = NULL;
838 Elm_Genlist_Item_Class *temp_itc = NULL;
843 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = is_BT_enable();
845 DBG("Setting - BT status is %d", bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable);
847 if( bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable > 1 )
849 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = ENABLE;
852 if( bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable )
854 is_connected_hf = is_handsfree_connected();
858 is_connected_hf = FALSE;
861 elm_theme_extension_add(NULL, EDJE_PATH);
862 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
863 itc->item_style = "2text.1icon.1";
864 itc->func.text_get = _gl_bt_title_get;
865 itc->func.content_get = _gl_bt_check_get;
866 itc->func.del = _bt_gl_del;
868 Elm_Genlist_Item_Class *itc2 = elm_genlist_item_class_new();
869 itc2->item_style = "1text";
870 itc2->func.text_get = _gl_bt_title_get;
871 itc2->func.del = _bt_gl_del;
873 Elm_Genlist_Item_Class *itc3 = elm_genlist_item_class_new();
874 itc3->item_style = "multiline.2text.1icon";
875 itc3->func.text_get = _gl_bt_title_get;
876 itc3->func.content_get = _gl_bt_check_get;
877 itc3->func.del = _bt_gl_del;
879 Evas_Object * layout = elm_layout_add(ad->nf);
880 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
881 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
883 genlist = elm_genlist_add(layout);
884 elm_genlist_block_count_set(genlist, 14);
885 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
887 menu_its = bt_menu_its;
889 Elm_Genlist_Item_Class *itc_arr[3] = { itc, itc2, itc3 };
891 for (idx = 0; idx < BT_LIST_ITEM_COUNT; idx++)
893 // if bt headset is disable, continue
894 if( idx == BT_MENU_TYPE_BT_HEADSET && !is_add_BT_headset() )
897 Bt_Item_Data *id = calloc(sizeof(Bt_Item_Data), 1);
899 id->item = elm_genlist_item_append(
900 genlist, // genlist object
901 itc_arr[idx], // item class
904 ELM_GENLIST_ITEM_NONE,
905 menu_its[ idx ].func, // call back
908 if(idx == BT_MENU_TYPE_BT_ON_OFF)
912 else if(idx == BT_MENU_TYPE_BT_HEADSET)
921 elm_genlist_item_class_free(itc);
922 elm_genlist_item_class_free(itc2);
923 elm_genlist_item_class_free(itc3);
925 bt_genlist = genlist;
927 elm_object_part_content_set(layout, "elm.genlist", genlist);