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();
81 _gl_menu_title_text_get(void *data, Evas_Object *obj, const char *part)
85 snprintf(buf, 1023, "%s", _("IDS_QP_BUTTON_BLUETOOTH"));
90 static void sap_state_vconf_change_cb(keynode_t *key, void *data)
92 _update_visibility_item_view(is_handsfree_connected());
95 static void _bt_adapter_state_enabled_cb(int result, bt_adapter_state_e adapter_state, void *user_data)
97 DBG("Setting - _bt_adapter_state_enabled_cb() is called!");
99 if (adapter_state == BT_ADAPTER_ENABLED) {
100 DBG("Setting - BT adapter state : BT_ADAPTER_ENABLED");
102 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 1;
104 _bt_genlist_update();
105 } else if (adapter_state == BT_ADAPTER_DISABLED) {
106 DBG("Setting - BT adapter state : BT_ADAPTER_DISABLED");
108 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 0;
109 is_connected_hf = FALSE;
111 _bt_genlist_update();
118 DBG("Setting - initialize_bt()");
120 if (bt_initialize() != BT_ERROR_NONE) {
121 ERR("Setting - bt_initialize() is failed....");
124 DBG("Setting - bt_initialize() is success");
126 if (bt_adapter_set_state_changed_cb(_bt_adapter_state_enabled_cb, NULL) != BT_ERROR_NONE) {
127 ERR("[%s] bt_adapter_set_state_changed_cb() failed.", __FUNCTION__);
130 DBG("bt_adapter_set_state_changed_cb() is success!");
133 bluetooth_hf_init(hf_event_handler, NULL);
135 register_vconf_changing("memory/private/sap/conn_status", sap_state_vconf_change_cb, NULL);
138 ret = feedback_initialize();
139 if (ret != FEEDBACK_ERROR_NONE) {
140 DBG("feedback_initialize failed");
144 Eina_Bool _clear_bluetooth_cb(void *data, Elm_Object_Item *it)
151 static void _disable_visibility_item_view()
153 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
154 timeout_seconds = VISIBILITY_TIMEOUT;
156 _update_visibility_view();
159 static void hf_event_handler(int event, void *data, void *user_data)
162 case BLUETOOTH_EVENT_HF_CONNECTED:
163 DBG("Setting - BLUETOOTH_EVENT_HF_CONNECTED");
164 _update_visibility_item_view(TRUE);
167 case BLUETOOTH_EVENT_HF_DISCONNECTED:
168 DBG("Setting - BLUETOOTH_EVENT_HF_DISCONNECTED");
169 _update_visibility_item_view(is_handsfree_connected());
174 void _update_visibility_item_view(int is_hf_connected)
176 DBG("Setting - _update_view() is called!!");
178 if (is_hf_connected) {
179 is_connected_hf = TRUE;
182 ecore_timer_del(vb_timer);
186 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
187 timeout_seconds = VISIBILITY_TIMEOUT;
189 _update_visibility_view();
191 is_connected_hf = FALSE;
193 _update_visibility_view();
197 void clear_bt_resource()
199 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = DISABLE;
200 is_bt_operating = BT_NON_OPERATING;
202 if (timeout_seconds == 0 && vb_timer) {
203 ecore_timer_del(vb_timer);
206 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
207 timeout_seconds = VISIBILITY_TIMEOUT;
210 bluetooth_hf_deinit();
212 int ret = bt_adapter_unset_state_changed_cb();
214 if (ret != BT_ERROR_NONE) {
215 ERR("Setting - bt adapter unset state changed cb is fail");
218 if (bt_deinitialize() < 0) {
219 ERR("Setting - bt_deinitialize() failed.");
222 DBG("Setting - bt_deinitialize() is success");
230 /* Unregister SAP status vconf changeing callback */
231 unregister_vconf_changing("memory/private/sap/conn_status", sap_state_vconf_change_cb);
233 ret = feedback_deinitialize();
234 if (ret != FEEDBACK_ERROR_NONE) {
235 DBG("feedback_deinitialize failed");
239 static void _init_bt_value()
243 timeout_seconds = VISIBILITY_TIMEOUT;
244 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
245 is_bt_operating = BT_NON_OPERATING;
248 static void _alternate_bt_mode(void *data)
251 bt_adapter_state_e value;
253 /*appdata * ad = data; */
255 int prev_bt_enable = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
256 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = 2;
258 elm_genlist_item_fields_update(bt_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
259 elm_check_state_set(g_bt_check, !prev_bt_enable);
260 edje_object_signal_emit(elm_layout_edje_get(g_bt_check), "elm,state,disabled", "elm");
263 if (bt_adapter_get_state(&value) != BT_ERROR_NONE) {
264 ERR("Setting - bt_adapter_get_state() is failed ");
269 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();
277 elm_genlist_item_update(hf_it);
280 ret = bt_adapter_disable();
282 timeout_seconds = 0; /* vb_timer stop!! */
284 DBG("Setting - Current bt is off....enable...");
285 ret = bt_adapter_enable();
288 if (ret != BT_ERROR_NONE) {
289 DBG("Setting - Enalbe or Disable failed.... : %d", ret);
291 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = origin_bt_enable;
293 _bt_genlist_update();
300 static void _blutooth_cb(void *data, Evas_Object *obj, void *event_info)
302 DBG("Setting - %s", "Setting - _blutooth_cb is called");
304 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
305 elm_genlist_item_selected_set(it, EINA_FALSE);
307 if (is_bt_operating == BT_OPERATING) {
308 DBG("Setting - _blutooth_cb() is same status ");
312 is_bt_operating = BT_OPERATING;
316 DBG("%s", "Setting - _blutooth_cb - ad or check is null");
320 /* previous state backup */
321 origin_bt_enable = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
323 if (vb_timer != NULL && vb_it != NULL) {
324 DBG("Setting - vb_it is disabled");
326 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
329 ecore_timer_del(vb_timer);
332 _update_visibility_view();
334 /*elm_genlist_item_update(vb_it); */
337 _alternate_bt_mode(data);
340 static int is_valid_timeout(int seconds)
342 return ((seconds > 0) && (seconds <= VISIBILITY_TIMEOUT));
345 static void _bt_genlist_update()
348 elm_genlist_item_fields_update(bt_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
350 int bt_enable = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
351 edje_object_signal_emit(elm_layout_edje_get(g_bt_check), "elm,state,enabled", "elm");
352 elm_check_state_set(g_bt_check, (bt_enable == 1) ? EINA_TRUE : EINA_FALSE);
355 elm_genlist_item_update(hf_it);
358 elm_genlist_item_fields_update(vb_it, "elm.text.1", ELM_GENLIST_ITEM_FIELD_TEXT);
359 elm_genlist_item_fields_update(vb_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
361 elm_check_state_set(g_vb_check, (bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable == 1) ? EINA_TRUE : EINA_FALSE);
363 if (is_disable_visibility_item_view()) {
364 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,disabled", "elm");
366 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,enabled", "elm");
371 static void _update_visibility_view()
373 DBG("Setting - _update_visibility_view()");
376 elm_genlist_item_fields_update(vb_it, "elm.text.1", ELM_GENLIST_ITEM_FIELD_TEXT);
377 elm_genlist_item_fields_update(vb_it, "elm.text.2", ELM_GENLIST_ITEM_FIELD_TEXT);
379 elm_check_state_set(g_vb_check, (bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable == TRUE)
380 ? EINA_TRUE : EINA_FALSE);
382 if (is_disable_visibility_item_view()) {
383 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,disabled", "elm");
385 edje_object_signal_emit(elm_layout_edje_get(g_vb_check), "elm,state,enabled", "elm");
390 static void _update_visibility_item_update(void *data)
394 DBG("Setting - ad is null.");
398 if (ad->MENU_TYPE == SETTING_BLUETOOTH) {
399 DBG("Setting - update_visibility_item_update");
401 _update_visibility_view();
402 /*_bt_genlist_update(); */
406 static void _init_vb_data(void *data)
408 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
409 timeout_seconds = VISIBILITY_TIMEOUT;
410 _update_visibility_item_update(data);
414 static Eina_Bool __vb_timeout(void *data)
416 if (is_valid_timeout(timeout_seconds)) {
417 DBG("Setting - %d seconds", timeout_seconds);
421 _update_visibility_item_update(data);
423 return ECORE_CALLBACK_RENEW;
426 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
427 _update_visibility_item_update(data);
429 DBG("Setting - visibility time is out.");
431 if (visibility_mode != BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE) {
432 if (bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE, 0) != BT_ERROR_NONE) {
433 DBG("[%s] Setting - bt_adapter_set_visibility(NON) failed.", __FUNCTION__);
435 return ECORE_CALLBACK_CANCEL;
437 visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
438 DBG("[%s] Setting - bt_adapter_set_visibility(NON) success.", __FUNCTION__);
443 return ECORE_CALLBACK_CANCEL;
446 static void _start_visibility_timer(void *data)
448 if (vb_timer) { /* Timer Start */
449 ecore_timer_del(vb_timer);
452 vb_timer = ecore_timer_add(1.0, (Ecore_Task_Cb) __vb_timeout, data);
455 static void _bt_visibility_mode(void *data)
457 bt_adapter_state_e bt_state;
459 if (bt_adapter_get_state(&bt_state) != BT_ERROR_NONE) {
460 DBG("[%s] Setting - bt_adapter_get_state() failed.", __FUNCTION__);
465 vconf_get_int(VCONFKEY_BT_STATUS, &state);
467 DBG("Setting - bt state : %d", state);
469 if (bt_state == BT_ADAPTER_ENABLED) {
470 if (bt_adapter_get_visibility(&visibility_mode, NULL) != BT_ERROR_NONE) {
471 DBG("[%s] Setting - bt_adapter_get_visibility() failed.", __FUNCTION__);
475 DBG("Setting - visibility_mode : %d", visibility_mode);
477 if (visibility_mode == BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE) {
478 if (bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE, 0) != BT_ERROR_NONE) {
479 DBG("[%s] Setting - bt_adapter_set_visibility(VISIBLE) failed.", __FUNCTION__);
481 visibility_mode = BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE;
482 DBG("[%s] Setting - bt_adapter_set_visibility(VISIBLE) success.", __FUNCTION__);
484 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = ENABLE;
485 timeout_seconds = VISIBILITY_TIMEOUT;
487 _update_visibility_view();
489 _start_visibility_timer(data); /* Timer start */
491 } else if (visibility_mode == BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE) {
492 DBG("[%s] Setting - Visibility mode was already set as BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE.", __FUNCTION__);
494 timeout_seconds = 0; /* Timer stop; */
496 if (bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE, 0) != BT_ERROR_NONE) {
497 DBG("[%s] Setting - bt_adapter_set_visibility(NON) failed.", __FUNCTION__);
499 visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
500 DBG("[%s] Setting - bt_adapter_set_visibility(NON) success.", __FUNCTION__);
506 static int is_disable_visibility_item_view()
508 return (!bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable || is_connected_hf);
511 static void _visibility_cb(void *data, Evas_Object *obj, void *event_info)
513 DBG("%s", "Setting - _visibility_cb is called");
515 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
516 elm_genlist_item_selected_set(it, EINA_FALSE);
518 bool touch_sound_enable = false;
519 if (get_sound_mode() == SOUND_MODE_SOUND) {
520 vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &touch_sound_enable);
521 if (touch_sound_enable) {
522 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
526 if (is_disable_visibility_item_view()) {
527 DBG("Setting - disable visibility!!");
533 DBG("%s", "Setting - _visibility_cb - ad or check is null");
537 _bt_visibility_mode(data);
540 static int _is_enable_BT_headset()
544 vconf_get_int(VCONFKEY_BT_STATUS, &enable);
546 return (enable != VCONFKEY_BT_STATUS_OFF) && bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
549 static void _BT_headset_cb(void *data, Evas_Object *obj, void *event_info)
551 DBG("%s", "Setting - _BT_headset_cb is called");
553 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
554 elm_genlist_item_selected_set(it, EINA_FALSE);
556 if (!_is_enable_BT_headset())
559 app_control_h service;
560 app_control_create(&service);
561 app_control_set_app_id(service, "org.tizen.bluetooth");
562 app_control_add_extra_data(service, "launch-type", "setting");
563 app_control_send_launch_request(service, NULL, NULL);
564 app_control_destroy(service);
567 static char *_get_device_name()
569 char *bt_adapter_name = NULL;
572 bt_adapter_state_e bt_state;
573 if (bt_adapter_get_state(&bt_state) != BT_ERROR_NONE) {
574 DBG("[%s] Setting - bt_adapter_get_state() failed.", __FUNCTION__);
577 if (bt_adapter_get_name(&bt_adapter_name) != BT_ERROR_NONE) {
578 ERR("%s,%d: bt get name fail", __func__, __LINE__);
582 bt_adapter_name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
584 return strdup(bt_adapter_name);
587 static char *_gl_bt_title_get(void *data, Evas_Object *obj, const char *part)
589 char buf[1024] = {0,};
590 Bt_Item_Data *id = data;
591 int index = id->index;
594 if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.text")) {
595 if (index == BT_MENU_TYPE_BT_ON_OFF) {
596 snprintf(buf, sizeof(buf) - 1, "%s", _(bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].name));
597 } else if (index == BT_MENU_TYPE_VISIBLE_ON_OFF) {
598 if (is_disable_visibility_item_view()) {
599 strcpy(expression, "<font color=#515151>%s</font>");
601 strcpy(expression, "%s");
603 snprintf(buf, sizeof(buf) - 1, expression, _(bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].name));
605 if (!_is_enable_BT_headset()) {
606 strcpy(expression, "<font color=#515151>%s</font>");
608 strcpy(expression, "%s");
610 snprintf(buf, sizeof(buf) - 1, expression, _(bt_menu_its[BT_MENU_TYPE_BT_HEADSET].name));
612 } else if (!strcmp(part, "elm.text.2")) {
613 if (index == BT_MENU_TYPE_BT_ON_OFF) {
614 DBG("BT item subtitle updated!!");
615 int sub_title_type = bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable;
616 char *subtitle = _(bluetooth_enable_str[sub_title_type]);
617 snprintf(buf, sizeof(buf) - 1, "%s", subtitle);
618 } else if (index == BT_MENU_TYPE_VISIBLE_ON_OFF) {
619 if (is_disable_visibility_item_view()) {
620 strcpy(expression, "<font color=#515151>%s</font>");
622 if (g_device_name == NULL) {
623 g_device_name = _get_device_name();
624 if (g_device_name == NULL) {
625 g_device_name = _(visible_str[bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable]);
629 snprintf(buf, sizeof(buf) - 1, expression, g_device_name);
631 if (bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable) {
632 int hour = timeout_seconds / 60;
633 int minutes = timeout_seconds % 60;
635 char time_buf[16] = {0,};
636 snprintf(time_buf, sizeof(time_buf) - 1, "%02d:%02d", hour, minutes);
638 snprintf(buf, sizeof(buf) - 1, _(visible_str[bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable]), time_buf);
640 g_device_name = _get_device_name();
641 if (g_device_name == NULL) {
642 g_device_name = _(visible_str[bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable]);
645 snprintf(buf, sizeof(buf) - 1, "%s", g_device_name);
653 static Evas_Object *_get_emtpy_layout(Evas_Object *parent)
658 Evas_Object *layout = elm_layout_add(parent);
659 elm_layout_file_set(layout, EDJE_PATH, "setting-empty/swallow");
665 static Evas_Object *_gl_bt_check_get(void *data, Evas_Object *obj, const char *part)
667 Evas_Object *check = NULL;
669 Bt_Item_Data *id = data;
670 int index = id->index;
672 if (!strcmp(part, "elm.icon")) {
673 check = elm_check_add(obj);
674 elm_object_style_set(check, "list");
675 elm_check_state_set(check, (bt_menu_its[index].is_enable == TRUE) ? EINA_TRUE : EINA_FALSE);
676 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
677 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
678 evas_object_propagate_events_set(check, EINA_FALSE);
679 evas_object_repeat_events_set(check, EINA_TRUE);
681 if (index == BT_MENU_TYPE_VISIBLE_ON_OFF) {
682 if (is_disable_visibility_item_view()) {
683 edje_object_signal_emit(elm_layout_edje_get(check), "elm,state,disabled", "elm");
686 } else if (index == BT_MENU_TYPE_BT_ON_OFF) {
693 static void _bt_gl_del(void *data, Evas_Object *obj)
695 Bt_Item_Data *id = data;
700 static void init_values()
703 bt_menu_its[BT_MENU_TYPE_VISIBLE_ON_OFF].is_enable = DISABLE;
707 static int is_handsfree_connected()
710 int headset_connected = FALSE;
711 int sap_connected = FALSE;
713 vconf_get_int(VCONFKEY_BT_DEVICE, &headset_connected);
714 DBG("Heaadset connected : %x", headset_connected);
716 if (headset_connected & VCONFKEY_BT_DEVICE_AG_CONNECTED) {
717 DBG("Setting - Heaadset connected");
721 vconf_get_int("memory/private/sap/conn_status", &sap_connected);
722 DBG("Sap connected : %d", sap_connected);
725 DBG("Setting - Sap connected");
732 static int is_add_BT_headset()
734 /* temporary code!! */
735 /* this code will be changed!! */
739 static int is_BT_enable()
741 int enable = DISABLE;
743 if (bt_adapter_get_state(&enable) != BT_ERROR_NONE) {
744 ERR("Setting - bt_adapter_get_state() is failed ");
752 Evas_Object *_create_bt_list(void *data)
756 DBG("%s", "_create_bluetooth_list - appdata is null");
760 Evas_Object *genlist = NULL;
761 struct _bt_menu_item *menu_its = NULL;
762 Elm_Genlist_Item_Class *temp_itc = NULL;
767 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = is_BT_enable();
769 DBG("Setting - BT status is %d", bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable);
771 if (bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable > 1) {
772 bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable = ENABLE;
775 if (bt_menu_its[BT_MENU_TYPE_BT_ON_OFF].is_enable) {
776 is_connected_hf = is_handsfree_connected();
778 is_connected_hf = FALSE;
781 elm_theme_extension_add(NULL, EDJE_PATH);
782 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
783 itc->item_style = "2text.1icon.1";
784 itc->func.text_get = _gl_bt_title_get;
785 itc->func.content_get = _gl_bt_check_get;
786 itc->func.del = _bt_gl_del;
788 Elm_Genlist_Item_Class *itc2 = elm_genlist_item_class_new();
789 itc2->item_style = "1text";
790 itc2->func.text_get = _gl_bt_title_get;
791 itc2->func.del = _bt_gl_del;
793 Elm_Genlist_Item_Class *itc3 = elm_genlist_item_class_new();
794 itc3->item_style = "2text.1icon.1";
795 itc3->func.text_get = _gl_bt_title_get;
796 itc3->func.content_get = _gl_bt_check_get;
797 itc3->func.del = _bt_gl_del;
799 Evas_Object *layout = elm_layout_add(ad->nf);
800 elm_layout_file_set(layout, EDJE_PATH, "setting/genlist/layout");
801 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
803 genlist = elm_genlist_add(layout);
804 elm_genlist_block_count_set(genlist, 14);
805 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
807 menu_its = bt_menu_its;
810 Elm_Genlist_Item_Class *title_item = elm_genlist_item_class_new();
811 title_item ->func.text_get = _gl_menu_title_text_get;
812 title_item->item_style = "title";
813 title_item->func.del = _bt_gl_del;
815 elm_genlist_item_append(genlist, title_item, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
817 elm_genlist_item_class_free(title_item);
819 Elm_Genlist_Item_Class *itc_arr[3] = { itc, itc2, itc3 };
821 for (idx = 0; idx < BT_LIST_ITEM_COUNT; idx++) {
822 /* if bt headset is disable, continue */
823 if (idx == BT_MENU_TYPE_BT_HEADSET && !is_add_BT_headset())
826 Bt_Item_Data *id = calloc(sizeof(Bt_Item_Data), 1);
829 id->item = elm_genlist_item_append(
830 genlist, /* genlist object */
831 itc_arr[idx], /* item class */
834 ELM_GENLIST_ITEM_NONE,
835 menu_its[idx].func, /* call back */
838 if (idx == BT_MENU_TYPE_BT_ON_OFF) {
840 } else if (idx == BT_MENU_TYPE_BT_HEADSET) {
847 elm_genlist_item_class_free(itc);
848 elm_genlist_item_class_free(itc2);
849 elm_genlist_item_class_free(itc3);
852 Elm_Genlist_Item_Class *padding = elm_genlist_item_class_new();
853 padding->item_style = "padding";
854 padding->func.del = _bt_gl_del;
856 elm_genlist_item_append(genlist, padding, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
857 elm_genlist_item_class_free(padding);
859 bt_genlist = genlist;
861 elm_object_part_content_set(layout, "elm.genlist", genlist);