2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 * Created on: Oct 9, 2013
26 #include "setting-bluetooth.h"
27 #include "setting_control_bt.h"
28 #include "setting_data_vconf.h"
29 #include "setting-common-sound.h"
33 static struct _bt_menu_item bt_menu_its[] = {
34 { "IDS_QP_BUTTON_BLUETOOTH", DISABLE, _blutooth_cb },
35 { "IDS_VCALL_BODY_BT_HEADSET", DISABLE, _BT_headset_cb },
36 { "IDS_ST_MBODY_MAKE_VISIBLE_ABB", DISABLE, _visibility_cb }, /* "IDS_OP_BODY_VISIBILITY" */
37 { NULL, DISABLE, NULL }
40 static char *bluetooth_enable_str[] = {
41 "IDS_ST_BODY_OFF_M_STATUS",
42 "IDS_ST_BODY_ON_M_STATUS",
43 "IDS_COM_POP_PROCESSING"
46 static char *visible_str[] = {
47 "IDS_ST_BODY_DISABLED_M_STATUS",
48 "IDS_ST_BODY_YOUR_GEAR_IS_VISIBLE_FOR_PS_ABB"
52 static Ecore_Timer *bt_timer = NULL;
53 static Ecore_Timer *vb_timer = NULL;
55 static Elm_Object_Item *bt_it = NULL;
56 static Elm_Object_Item *vb_it = NULL;
57 static Elm_Object_Item *hf_it = NULL;
59 static Evas_Object *bt_genlist = NULL;
60 static Evas_Object *g_bt_check = NULL;
61 static Evas_Object *g_vb_check = NULL;
63 static int is_bt_operating = BT_NON_OPERATING;
64 static int timeout_seconds = VISIBILITY_TIMEOUT;
65 static bt_adapter_visibility_mode_e visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
66 static int origin_bt_enable;
67 static double bt_time = 0.0;
68 static int is_connected_hf = FALSE;
69 static char *g_device_name = NULL;
72 static void _init_bt_value();
73 static int is_handsfree_connected();
74 static void _bt_genlist_update();
75 static int is_disable_visibility_item_view();
76 static void _update_visibility_view();
79 static void sap_state_vconf_change_cb(keynode_t *key, void *data)
81 _update_visibility_item_view(is_handsfree_connected());
84 static void _bt_adapter_state_enabled_cb(int result, bt_adapter_state_e adapter_state, void *user_data)
86 DBG("Setting - _bt_adapter_state_enabled_cb() is called!");
88 if (adapter_state == BT_ADAPTER_ENABLED) {
89 DBG("Setting - BT adapter state : BT_ADAPTER_ENABLED");
91 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 1;
94 } else if (adapter_state == BT_ADAPTER_DISABLED) {
95 DBG("Setting - BT adapter state : BT_ADAPTER_DISABLED");
97 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 0;
98 is_connected_hf = FALSE;
100 _bt_genlist_update();
107 DBG("Setting - initialize_bt()");
109 if (bt_initialize() != BT_ERROR_NONE) {
110 ERR("Setting - bt_initialize() is failed....");
113 DBG("Setting - bt_initialize() is success");
115 if (bt_adapter_set_state_changed_cb(_bt_adapter_state_enabled_cb, NULL) != BT_ERROR_NONE) {
116 ERR("[%s] bt_adapter_set_state_changed_cb() failed.", __FUNCTION__);
119 DBG("bt_adapter_set_state_changed_cb() is success!");
122 bluetooth_hf_init(hf_event_handler, NULL);
124 register_vconf_changing("memory/private/sap/conn_status", sap_state_vconf_change_cb, NULL);
127 ret = feedback_initialize();
128 if (ret != FEEDBACK_ERROR_NONE) {
129 DBG("feedback_initialize failed");
133 Eina_Bool _clear_bluetooth_cb(void *data, Elm_Object_Item *it)
140 static void _disable_visibility_item_view()
142 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
143 timeout_seconds = VISIBILITY_TIMEOUT;
145 _update_visibility_view();
148 static void hf_event_handler(int event, void *data, void *user_data)
151 case BLUETOOTH_EVENT_HF_CONNECTED:
152 DBG("Setting - BLUETOOTH_EVENT_HF_CONNECTED");
153 _update_visibility_item_view(TRUE);
156 case BLUETOOTH_EVENT_HF_DISCONNECTED:
157 DBG("Setting - BLUETOOTH_EVENT_HF_DISCONNECTED");
158 _update_visibility_item_view(is_handsfree_connected());
163 void _update_visibility_item_view(int is_hf_connected)
165 DBG("Setting - _update_view() is called!!");
167 if (is_hf_connected) {
168 is_connected_hf = TRUE;
171 ecore_timer_del(vb_timer);
175 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
176 timeout_seconds = VISIBILITY_TIMEOUT;
178 _update_visibility_view();
180 is_connected_hf = FALSE;
182 _update_visibility_view();
186 void clear_bt_resource()
188 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = DISABLE;
189 is_bt_operating = BT_NON_OPERATING;
191 if (timeout_seconds == 0 && vb_timer) {
192 ecore_timer_del(vb_timer);
195 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
196 timeout_seconds = VISIBILITY_TIMEOUT;
199 bluetooth_hf_deinit();
201 int ret = bt_adapter_unset_state_changed_cb();
203 if (ret != BT_ERROR_NONE) {
204 ERR("Setting - bt adapter unset state changed cb is fail");
207 if (bt_deinitialize() < 0) {
208 ERR("Setting - bt_deinitialize() failed.");
211 DBG("Setting - bt_deinitialize() is success");
219 /* Unregister SAP status vconf changeing callback */
220 unregister_vconf_changing("memory/private/sap/conn_status", sap_state_vconf_change_cb);
222 ret = feedback_deinitialize();
223 if (ret != FEEDBACK_ERROR_NONE) {
224 DBG("feedback_deinitialize failed");
228 static void _init_bt_value()
232 timeout_seconds = VISIBILITY_TIMEOUT;
233 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
234 is_bt_operating = BT_NON_OPERATING;
237 static void _alternate_bt_mode(void *data)
240 bt_adapter_state_e value;
242 /*appdata * ad = data; */
244 int prev_bt_enable = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
245 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 2;
247 elm_genlist_item_fields_update(bt_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
248 elm_check_state_set(g_bt_check, !prev_bt_enable);
249 edje_object_signal_emit(elm_layout_edje_get(g_bt_check), "elm,state,disabled", "elm");
252 if (bt_adapter_get_state(&value) != BT_ERROR_NONE) {
253 ERR("Setting - bt_adapter_get_state() is failed ");
258 if (value == EINA_TRUE) {
259 DBG("Setting - Current bt is on....disable...");
261 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 0;
262 is_connected_hf = TRUE;
263 _disable_visibility_item_view();
266 elm_genlist_item_update(hf_it);
269 ret = bt_adapter_disable();
271 timeout_seconds = 0; /* vb_timer stop!! */
273 DBG("Setting - Current bt is off....enable...");
274 ret = bt_adapter_enable();
277 if (ret != BT_ERROR_NONE) {
278 DBG("Setting - Enalbe or Disable failed.... : %d", ret);
280 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = origin_bt_enable;
282 _bt_genlist_update();
289 static void _blutooth_cb(void *data, Evas_Object *obj, void *event_info)
291 DBG("Setting - %s", "Setting - _blutooth_cb is called");
293 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
294 elm_genlist_item_selected_set(it, EINA_FALSE);
296 if (is_bt_operating == BT_OPERATING) {
297 DBG("Setting - _blutooth_cb() is same status ");
301 is_bt_operating = BT_OPERATING;
305 DBG("%s", "Setting - _blutooth_cb - ad or check is null");
309 /* previous state backup */
310 origin_bt_enable = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
312 if (vb_timer != NULL && vb_it != NULL) {
313 DBG("Setting - vb_it is disabled");
315 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
318 ecore_timer_del(vb_timer);
321 _update_visibility_view();
323 /*elm_genlist_item_update(vb_it); */
326 _alternate_bt_mode(data);
329 static int is_valid_timeout(int seconds)
331 return ((seconds > 0) && (seconds <= VISIBILITY_TIMEOUT));
334 static void _bt_genlist_update()
337 elm_genlist_item_fields_update(bt_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
339 int bt_enable = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
340 edje_object_signal_emit(elm_layout_edje_get(g_bt_check), "elm,state,enabled", "elm");
341 elm_check_state_set(g_bt_check, (bt_enable == 1) ? EINA_TRUE : EINA_FALSE);
344 elm_genlist_item_update(hf_it);
347 elm_genlist_item_fields_update(vb_it, "elm.text.1", ELM_GENLIST_ITEM_FIELD_TEXT);
348 elm_genlist_item_fields_update(vb_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
350 elm_check_state_set(g_vb_check, (bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable == 1) ? EINA_TRUE : EINA_FALSE);
352 if (is_disable_visibility_item_view()) {
353 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,disabled", "elm");
355 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,enabled", "elm");
360 static void _update_visibility_view()
362 DBG("Setting - _update_visibility_view()");
365 elm_genlist_item_fields_update(vb_it, "elm.text.1", ELM_GENLIST_ITEM_FIELD_TEXT);
366 elm_genlist_item_fields_update(vb_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
368 elm_check_state_set(g_vb_check, (bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable == TRUE)
369 ? EINA_TRUE : EINA_FALSE);
371 if (is_disable_visibility_item_view()) {
372 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,disabled", "elm");
374 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,enabled", "elm");
379 static void _update_visibility_item_update(void *data)
383 DBG("Setting - ad is null.");
387 if (ad->MENU_TYPE == SETTING_BLUETOOTH) {
388 DBG("Setting - update_visibility_item_update");
390 _update_visibility_view();
391 /*_bt_genlist_update(); */
395 static void _init_vb_data(void *data)
397 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
398 timeout_seconds = VISIBILITY_TIMEOUT;
399 _update_visibility_item_update(data);
403 static Eina_Bool __vb_timeout(void *data)
405 if (is_valid_timeout(timeout_seconds)) {
406 DBG("Setting - %d seconds", timeout_seconds);
410 _update_visibility_item_update(data);
412 return ECORE_CALLBACK_RENEW;
415 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
416 _update_visibility_item_update(data);
418 DBG("Setting - visibility time is out.");
420 if (visibility_mode != BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE) {
421 if (bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE, 0) != BT_ERROR_NONE) {
422 DBG("[%s] Setting - bt_adapter_set_visibility(NON) failed.", __FUNCTION__);
424 return ECORE_CALLBACK_CANCEL;
426 visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
427 DBG("[%s] Setting - bt_adapter_set_visibility(NON) success.", __FUNCTION__);
432 return ECORE_CALLBACK_CANCEL;
435 static void _start_visibility_timer(void *data)
437 if (vb_timer) { /* Timer Start */
438 ecore_timer_del(vb_timer);
441 vb_timer = ecore_timer_add(1.0, (Ecore_Task_Cb) __vb_timeout, data);
444 static void _bt_visibility_mode(void *data)
446 bt_adapter_state_e bt_state;
448 if (bt_adapter_get_state(&bt_state) != BT_ERROR_NONE) {
449 DBG("[%s] Setting - bt_adapter_get_state() failed.", __FUNCTION__);
454 vconf_get_int(VCONFKEY_BT_STATUS, &state);
456 DBG("Setting - bt state : %d", state);
458 if (bt_state == BT_ADAPTER_ENABLED) {
459 if (bt_adapter_get_visibility(&visibility_mode, NULL) != BT_ERROR_NONE) {
460 DBG("[%s] Setting - bt_adapter_get_visibility() failed.", __FUNCTION__);
464 DBG("Setting - visibility_mode : %d", visibility_mode);
466 if (visibility_mode == BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE) {
467 if (bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE, 0) != BT_ERROR_NONE) {
468 DBG("[%s] Setting - bt_adapter_set_visibility(VISIBLE) failed.", __FUNCTION__);
470 visibility_mode = BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE;
471 DBG("[%s] Setting - bt_adapter_set_visibility(VISIBLE) success.", __FUNCTION__);
473 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = ENABLE;
474 timeout_seconds = VISIBILITY_TIMEOUT;
476 _update_visibility_view();
478 _start_visibility_timer(data); /* Timer start */
480 } else if (visibility_mode == BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE) {
481 DBG("[%s] Setting - Visibility mode was already set as BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE.", __FUNCTION__);
483 timeout_seconds = 0; /* Timer stop; */
485 if (bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE, 0) != BT_ERROR_NONE) {
486 DBG("[%s] Setting - bt_adapter_set_visibility(NON) failed.", __FUNCTION__);
488 visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
489 DBG("[%s] Setting - bt_adapter_set_visibility(NON) success.", __FUNCTION__);
495 static int is_disable_visibility_item_view()
497 return (!bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable || is_connected_hf);
500 static void _visibility_cb(void *data, Evas_Object *obj, void *event_info)
502 DBG("%s", "Setting - _visibility_cb is called");
504 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
505 elm_genlist_item_selected_set(it, EINA_FALSE);
507 bool touch_sound_enable = false;
508 if (get_sound_mode() == SOUND_MODE_SOUND) {
509 vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &touch_sound_enable);
510 if (touch_sound_enable) {
511 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
515 if (is_disable_visibility_item_view()) {
516 DBG("Setting - disable visibility!!");
522 DBG("%s", "Setting - _visibility_cb - ad or check is null");
526 _bt_visibility_mode(data);
529 static int _is_enable_BT_headset()
533 vconf_get_int(VCONFKEY_BT_STATUS, &enable);
535 return (enable != VCONFKEY_BT_STATUS_OFF) && bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
538 static void _BT_headset_cb(void *data, Evas_Object *obj, void *event_info)
540 DBG("%s", "Setting - _BT_headset_cb is called");
542 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
543 elm_genlist_item_selected_set(it, EINA_FALSE);
545 if (!_is_enable_BT_headset())
548 app_control_h service;
549 app_control_create(&service);
550 app_control_set_app_id(service, "org.tizen.bluetooth");
551 app_control_add_extra_data(service, "launch-type", "setting");
552 app_control_send_launch_request(service, NULL, NULL);
553 app_control_destroy(service);
556 static char *_get_device_name()
558 char *bt_adapter_name = NULL;
561 bt_adapter_state_e bt_state;
562 if (bt_adapter_get_state(&bt_state) != BT_ERROR_NONE) {
563 DBG("[%s] Setting - bt_adapter_get_state() failed.", __FUNCTION__);
566 if (bt_adapter_get_name(&bt_adapter_name) != BT_ERROR_NONE) {
567 ERR("%s,%d: bt get name fail", __func__, __LINE__);
571 bt_adapter_name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
573 return strdup(bt_adapter_name);
576 static char *_gl_bt_title_get(void *data, Evas_Object *obj, const char *part)
578 char buf[1024] = {0,};
579 Bt_Item_Data *id = data;
580 int index = id->index;
583 if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.text")) {
584 if (index == BT_MENU_TYPE_BT_ON_OFF) {
585 snprintf(buf, sizeof(buf) - 1, "%s", _(bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].name));
586 } else if (index == BT_MENU_TYPE_VISIBLE_ON_OFF) {
587 if (is_disable_visibility_item_view()) {
588 strcpy(expression, "<font color=#515151>%s</font>");
590 strcpy(expression, "%s");
592 snprintf(buf, sizeof(buf) - 1, expression, _(bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].name));
594 if (!_is_enable_BT_headset()) {
595 strcpy(expression, "<font color=#515151>%s</font>");
597 strcpy(expression, "%s");
599 snprintf(buf, sizeof(buf) - 1, expression, _(bt_menu_its[BT_MENU_TYPE_BT_HEADSET].name));
601 } else if (!strcmp(part, "elm.text.2")) {
602 if (index == BT_MENU_TYPE_BT_ON_OFF) {
603 DBG("BT item subtitle updated!!");
604 int sub_title_type = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
605 char *subtitle = _(bluetooth_enable_str[sub_title_type]);
606 snprintf(buf, sizeof(buf) - 1, "%s", subtitle);
607 } else if (index == BT_MENU_TYPE_VISIBLE_ON_OFF) {
608 if (is_disable_visibility_item_view()) {
609 strcpy(expression, "<font color=#515151>%s</font>");
611 if (g_device_name == NULL) {
612 g_device_name = _get_device_name();
613 if (g_device_name == NULL) {
614 g_device_name = _(visible_str[bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable]);
618 snprintf(buf, sizeof(buf) - 1, expression, g_device_name);
620 if (bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable) {
621 int hour = timeout_seconds / 60;
622 int minutes = timeout_seconds % 60;
624 char time_buf[16] = {0,};
625 snprintf(time_buf, sizeof(time_buf) - 1, "%02d:%02d", hour, minutes);
627 snprintf(buf, sizeof(buf) - 1, _(visible_str[bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable]), time_buf);
629 g_device_name = _get_device_name();
630 if (g_device_name == NULL) {
631 g_device_name = _(visible_str[bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable]);
634 snprintf(buf, sizeof(buf) - 1, "%s", g_device_name);
642 static Evas_Object *_get_emtpy_layout(Evas_Object *parent)
647 Evas_Object *layout = elm_layout_add(parent);
648 elm_layout_file_set(layout, EDJE_PATH, "setting-empty/swallow");
654 static Evas_Object *_gl_bt_check_get(void *data, Evas_Object *obj, const char *part)
656 Evas_Object *check = NULL;
658 Bt_Item_Data *id = data;
659 int index = id->index;
661 if (!strcmp(part, "elm.icon")) {
662 check = elm_check_add(obj);
663 elm_object_style_set(check, "list");
664 elm_check_state_set(check, (bt_menu_its[index].is_enable == TRUE) ? EINA_TRUE : EINA_FALSE);
665 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
666 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
667 evas_object_propagate_events_set(check, EINA_FALSE);
668 evas_object_repeat_events_set(check, EINA_TRUE);
670 if (index == BT_MENU_TYPE_VISIBLE_ON_OFF) {
671 if (is_disable_visibility_item_view()) {
672 edje_object_signal_emit(elm_layout_edje_get(check), "elm,state,disabled", "elm");
675 } else if (index == BT_MENU_TYPE_BT_ON_OFF) {
682 static void _bt_gl_del(void *data, Evas_Object *obj)
684 Bt_Item_Data *id = data;
689 static void init_values()
692 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
696 static int is_handsfree_connected()
699 int headset_connected = FALSE;
700 int sap_connected = FALSE;
702 vconf_get_int(VCONFKEY_BT_DEVICE, &headset_connected);
703 DBG("Heaadset connected : %x", headset_connected);
705 if (headset_connected & VCONFKEY_BT_DEVICE_AG_CONNECTED) {
706 DBG("Setting - Heaadset connected");
710 vconf_get_int("memory/private/sap/conn_status", &sap_connected);
711 DBG("Sap connected : %d", sap_connected);
714 DBG("Setting - Sap connected");
721 static int is_add_BT_headset()
723 /* temporary code!! */
724 /* this code will be changed!! */
728 static int is_BT_enable()
730 int enable = DISABLE;
732 if (bt_adapter_get_state(&enable) != BT_ERROR_NONE) {
733 ERR("Setting - bt_adapter_get_state() is failed ");
741 Evas_Object *_create_bt_list(void *data)
745 DBG("%s", "_create_bluetooth_list - appdata is null");
749 Evas_Object *genlist = NULL;
750 struct _bt_menu_item *menu_its = NULL;
751 Elm_Genlist_Item_Class *temp_itc = NULL;
756 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = is_BT_enable();
758 DBG("Setting - BT status is %d", bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable);
760 if (bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable > 1) {
761 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = ENABLE;
764 if (bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable) {
765 is_connected_hf = is_handsfree_connected();
767 is_connected_hf = FALSE;
770 elm_theme_extension_add(NULL, EDJE_PATH);
771 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
772 itc->item_style = "2text.1icon.1";
773 itc->func.text_get = _gl_bt_title_get;
774 itc->func.content_get = _gl_bt_check_get;
775 itc->func.del = _bt_gl_del;
777 Elm_Genlist_Item_Class *itc2 = elm_genlist_item_class_new();
778 itc2->item_style = "1text";
779 itc2->func.text_get = _gl_bt_title_get;
780 itc2->func.del = _bt_gl_del;
782 Elm_Genlist_Item_Class *itc3 = elm_genlist_item_class_new();
783 itc3->item_style = "multiline.2text.1icon";
784 itc3->func.text_get = _gl_bt_title_get;
785 itc3->func.content_get = _gl_bt_check_get;
786 itc3->func.del = _bt_gl_del;
788 Evas_Object *layout = elm_layout_add(ad->nf);
789 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
790 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
792 genlist = elm_genlist_add(layout);
793 elm_genlist_block_count_set(genlist, 14);
794 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
796 menu_its = bt_menu_its;
798 Elm_Genlist_Item_Class *itc_arr[3] = { itc, itc2, itc3 };
800 for (idx = 0; idx < BT_LIST_ITEM_COUNT; idx++) {
801 /* if bt headset is disable, continue */
802 if (idx == BT_MENU_TYPE_BT_HEADSET && !is_add_BT_headset())
805 Bt_Item_Data *id = calloc(sizeof(Bt_Item_Data), 1);
808 id->item = elm_genlist_item_append(
809 genlist, /* genlist object */
810 itc_arr[idx], /* item class */
813 ELM_GENLIST_ITEM_NONE,
814 menu_its[idx].func, /* call back */
817 if (idx == BT_MENU_TYPE_BT_ON_OFF) {
819 } else if (idx == BT_MENU_TYPE_BT_HEADSET) {
826 elm_genlist_item_class_free(itc);
827 elm_genlist_item_class_free(itc2);
828 elm_genlist_item_class_free(itc3);
830 bt_genlist = genlist;
832 elm_object_part_content_set(layout, "elm.genlist", genlist);