Implement BT emulator UI 73/98273/1 accepted/tizen/common/20161117.085316 accepted/tizen/common/20161118.090607 accepted/tizen/ivi/20161121.012007 accepted/tizen/mobile/20161121.011719 accepted/tizen/tv/20161121.011823 accepted/tizen/wearable/20161121.011913 submit/tizen/20161117.015745 submit/tizen/20161118.002314
authorDoHyun Pyun <dh79.pyun@samsung.com>
Wed, 16 Nov 2016 10:59:53 +0000 (19:59 +0900)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Thu, 17 Nov 2016 00:37:18 +0000 (09:37 +0900)
Change-Id: I768b29d676d21f6e784b95016956c66384a5f781
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
43 files changed:
CMakeLists.txt
common/CMakeLists.txt [new file with mode: 0644]
common/include/bt-callback.h [moved from include/bt-callback.h with 100% similarity]
common/include/bt-debug.h [moved from include/bt-debug.h with 100% similarity]
common/include/bt-ipc-handler.h [moved from include/bt-ipc-handler.h with 100% similarity]
common/include/bt-main-ug.h [moved from include/bt-main-ug.h with 100% similarity]
common/include/bt-main-view.h [moved from include/bt-main-view.h with 100% similarity]
common/include/bt-net-connection.h [moved from include/bt-net-connection.h with 100% similarity]
common/include/bt-profile-view.h [moved from include/bt-profile-view.h with 100% similarity]
common/include/bt-resource.h [moved from include/bt-resource.h with 100% similarity]
common/include/bt-string-define.h [moved from include/bt-string-define.h with 100% similarity]
common/include/bt-type-define.h [moved from include/bt-type-define.h with 100% similarity]
common/include/bt-util.h [moved from include/bt-util.h with 100% similarity]
common/include/bt-wearable.h [moved from include/bt-wearable.h with 100% similarity]
common/include/bt-widget.h [moved from include/bt-widget.h with 100% similarity]
common/src/libraries/bt-callback.c [moved from src/libraries/bt-callback.c with 99% similarity]
common/src/libraries/bt-ipc-handler.c [moved from src/libraries/bt-ipc-handler.c with 100% similarity]
common/src/libraries/bt-net-connection.c [moved from src/libraries/bt-net-connection.c with 100% similarity]
common/src/libraries/bt-util.c [moved from src/libraries/bt-util.c with 100% similarity]
common/src/ui/bt-main-ug.c [moved from src/ui/bt-main-ug.c with 100% similarity]
common/src/ui/bt-main-view.c [moved from src/ui/bt-main-view.c with 100% similarity]
common/src/ui/bt-profile-view.c [moved from src/ui/bt-profile-view.c with 100% similarity]
common/src/ui/bt-widget.c [moved from src/ui/bt-widget.c with 100% similarity]
emulator/CMakeLists.txt [new file with mode: 0644]
emulator/include/bt-callback.h [new file with mode: 0644]
emulator/include/bt-debug.h [new file with mode: 0644]
emulator/include/bt-emulator-api.h [new file with mode: 0644]
emulator/include/bt-event-manager.h [new file with mode: 0644]
emulator/include/bt-main-ug.h [new file with mode: 0644]
emulator/include/bt-main-view.h [new file with mode: 0644]
emulator/include/bt-resource.h [new file with mode: 0644]
emulator/include/bt-string-define.h [new file with mode: 0644]
emulator/include/bt-type-define.h [new file with mode: 0644]
emulator/include/bt-util.h [new file with mode: 0644]
emulator/include/bt-widget.h [new file with mode: 0644]
emulator/src/libraries/bt-callback.c [new file with mode: 0644]
emulator/src/libraries/bt-emulator-api.c [new file with mode: 0644]
emulator/src/libraries/bt-event-manager.c [new file with mode: 0644]
emulator/src/libraries/bt-util.c [new file with mode: 0644]
emulator/src/ui/bt-main-ug.c [new file with mode: 0644]
emulator/src/ui/bt-main-view.c [new file with mode: 0644]
emulator/src/ui/bt-widget.c [new file with mode: 0644]
packaging/ug-bluetooth-efl.spec

index c6b11d2..9822820 100644 (file)
@@ -13,109 +13,11 @@ SET(IMAGEDIR "${RESDIR}/images/${PROJECT_NAME}")
 SET(HELPDIR "${RESDIR}/help/${PROJECT_NAME}")
 SET(TABLEDIR "${RESDIR}/tables/${PROJECT_NAME}")
 
-SET(SRCS
-src/ui/bt-main-ug.c
-src/ui/bt-widget.c
-src/ui/bt-main-view.c
-src/ui/bt-profile-view.c
-src/libraries/bt-util.c
-src/libraries/bt-callback.c
-src/libraries/bt-ipc-handler.c
-src/libraries/bt-net-connection.c
-)
-
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-
-IF(TIZEN_TV)
-SET(PKG_MODULES
-       elementary
-       appcore-efl
-       ui-gadget-1
-       dlog
-       vconf
-       edbus
-       evas
-       edje
-       ecore
-       eina
-       aul
-       syspopup-caller
-       gobject-2.0
-       motion
-       capi-network-bluetooth
-       capi-network-connection
-       capi-system-device
-       capi-appfw-application
-       notification
-       efl-extension
-       glib-2.0
-       gio-2.0
-       dpm
-)
-ADD_DEFINITIONS("-DTIZEN_TV")
-ELSE(TIZEN_TV)
-SET(PKG_MODULES
-       elementary
-       appcore-efl
-       ui-gadget-1
-       dlog
-       vconf
-       edbus
-       evas
-       edje
-       ecore
-       eina
-       aul
-       syspopup-caller
-       gobject-2.0
-       motion
-       capi-network-bluetooth
-       capi-network-connection
-       capi-system-device
-       capi-appfw-application
-       notification
-       efl-extension
-       glib-2.0
-       gio-2.0
-       dpm
-       contacts-service2
-)
-ENDIF(TIZEN_TV)
-
-INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs REQUIRED ${PKG_MODULES})
-
-FOREACH(flag ${pkgs_CFLAGS})
-       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
-ENDFOREACH(flag)
-
-SET(GC_SECTIONS_FLAGS "-fdata-sections -ffunction-sections -Wl,--gc-sections")
-SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} -fvisibility=hidden -Wall")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} ${GC_SECTIONS_FLAGS}")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} ${GC_SECTIONS_FLAGS} -fPIC -Werror")
-
-ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
-ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
-ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
-ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"")
-ADD_DEFINITIONS("-DBT_USE_PLATFORM_DBG")
-#ADD_DEFINITIONS("-D__TIZEN_OPEN__")
-
-INSTALL(FILES ${CMAKE_BINARY_DIR}/data/ug-bluetooth-efl.xml DESTINATION /usr/share/packages/)
-INSTALL(FILES ${CMAKE_BINARY_DIR}/data/images/ug-bluetooth-efl.png DESTINATION /usr/share/icons/default/small)
-
-ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.1.0)
-TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
-
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/ug/lib)
-
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/images/ug-bluetooth-efl.png DESTINATION ${IMAGEDIR})
-INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/images/ DESTINATION ${IMAGEDIR} FILES_MATCHING PATTERN "*.png")
-INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/images/ DESTINATION ${IMAGEDIR} FILES_MATCHING PATTERN "*.jpg")
-INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/help/ DESTINATION ${HELPDIR} FILES_MATCHING PATTERN "*help_*")
-INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tables/WVGA/ DESTINATION ${TABLEDIR} FILES_MATCHING PATTERN "*.xml")
-
+IF("$ENV{CFLAGS}" MATCHES "-DTIZEN_TEST_EMUL")
+ADD_SUBDIRECTORY(emulator)
+ELSE()
+ADD_SUBDIRECTORY(common)
+ENDIF()
 
 ADD_SUBDIRECTORY(po)
-ADD_SUBDIRECTORY(data)
\ No newline at end of file
+ADD_SUBDIRECTORY(data)
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c5312f8
--- /dev/null
@@ -0,0 +1,104 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+SET(SRCS
+src/ui/bt-main-ug.c
+src/ui/bt-widget.c
+src/ui/bt-main-view.c
+src/ui/bt-profile-view.c
+src/libraries/bt-util.c
+src/libraries/bt-callback.c
+src/libraries/bt-ipc-handler.c
+src/libraries/bt-net-connection.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+IF(TIZEN_TV)
+SET(PKG_MODULES
+       elementary
+       appcore-efl
+       ui-gadget-1
+       dlog
+       vconf
+       edbus
+       evas
+       edje
+       ecore
+       eina
+       aul
+       syspopup-caller
+       gobject-2.0
+       motion
+       capi-network-bluetooth
+       capi-network-connection
+       capi-system-device
+       capi-appfw-application
+       notification
+       efl-extension
+       glib-2.0
+       gio-2.0
+       dpm
+)
+ADD_DEFINITIONS("-DTIZEN_TV")
+ELSE(TIZEN_TV)
+SET(PKG_MODULES
+       elementary
+       appcore-efl
+       ui-gadget-1
+       dlog
+       vconf
+       edbus
+       evas
+       edje
+       ecore
+       eina
+       aul
+       syspopup-caller
+       gobject-2.0
+       motion
+       capi-network-bluetooth
+       capi-network-connection
+       capi-system-device
+       capi-appfw-application
+       notification
+       efl-extension
+       glib-2.0
+       gio-2.0
+       dpm
+       contacts-service2
+)
+ENDIF(TIZEN_TV)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED ${PKG_MODULES})
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(GC_SECTIONS_FLAGS "-fdata-sections -ffunction-sections -Wl,--gc-sections")
+SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} -fvisibility=hidden -Wall")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} ${GC_SECTIONS_FLAGS}")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} ${GC_SECTIONS_FLAGS} -fPIC -Werror")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"")
+ADD_DEFINITIONS("-DBT_USE_PLATFORM_DBG")
+#ADD_DEFINITIONS("-D__TIZEN_OPEN__")
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/ug-bluetooth-efl.xml DESTINATION /usr/share/packages/)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/images/ug-bluetooth-efl.png DESTINATION /usr/share/icons/default/small)
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.1.0)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/ug/lib)
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/images/ug-bluetooth-efl.png DESTINATION ${IMAGEDIR})
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/data/images/ DESTINATION ${IMAGEDIR} FILES_MATCHING PATTERN "*.png")
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/data/images/ DESTINATION ${IMAGEDIR} FILES_MATCHING PATTERN "*.jpg")
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/data/help/ DESTINATION ${HELPDIR} FILES_MATCHING PATTERN "*help_*")
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/tables/WVGA/ DESTINATION ${TABLEDIR} FILES_MATCHING PATTERN "*.xml")
similarity index 100%
rename from include/bt-debug.h
rename to common/include/bt-debug.h
similarity index 100%
rename from include/bt-util.h
rename to common/include/bt-util.h
similarity index 99%
rename from src/libraries/bt-callback.c
rename to common/src/libraries/bt-callback.c
index d383e43..36f6331 100644 (file)
@@ -330,6 +330,10 @@ static void __bt_cb_new_device_found(bt_adapter_device_discovery_info_s *info,
        ugd = (bt_ug_data *)data;
        ret_if(ugd->op_status != BT_SEARCHING);
 
+       BT_DBG("major_device_class: %d, %x", info->bt_class.major_device_class);
+       BT_DBG("minor_device_class: %d, %x", info->bt_class.minor_device_class);
+       BT_DBG("major_service_class_mask: %d, %x", info->bt_class.major_service_class_mask);
+
        /* Check the service_class */
        if (__bt_cb_match_discovery_type(
                                info->bt_class.major_device_class,
similarity index 100%
rename from src/ui/bt-widget.c
rename to common/src/ui/bt-widget.c
diff --git a/emulator/CMakeLists.txt b/emulator/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a3ef4ec
--- /dev/null
@@ -0,0 +1,69 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+SET(SRCS
+src/ui/bt-main-ug.c
+src/ui/bt-widget.c
+src/ui/bt-main-view.c
+src/libraries/bt-util.c
+src/libraries/bt-callback.c
+src/libraries/bt-event-manager.c
+src/libraries/bt-emulator-api.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+SET(PKG_MODULES
+       elementary
+       appcore-efl
+       ui-gadget-1
+       dlog
+       vconf
+       edbus
+       evas
+       edje
+       ecore
+       eina
+       aul
+       syspopup-caller
+       gobject-2.0
+       capi-network-bluetooth
+       capi-appfw-application
+       notification
+       efl-extension
+       glib-2.0
+       gio-2.0
+)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED ${PKG_MODULES})
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(GC_SECTIONS_FLAGS "-fdata-sections -ffunction-sections -Wl,--gc-sections")
+SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} -fvisibility=hidden -Wall")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} ${GC_SECTIONS_FLAGS}")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} ${GC_SECTIONS_FLAGS} -fPIC -Werror")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"")
+ADD_DEFINITIONS("-DBT_USE_PLATFORM_DBG")
+#ADD_DEFINITIONS("-D__TIZEN_OPEN__")
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/ug-bluetooth-efl.xml DESTINATION /usr/share/packages/)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/images/ug-bluetooth-efl.png DESTINATION /usr/share/icons/default/small)
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.1.0)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/ug/lib)
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/images/ug-bluetooth-efl.png DESTINATION ${IMAGEDIR})
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/data/images/ DESTINATION ${IMAGEDIR} FILES_MATCHING PATTERN "*.png")
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/data/images/ DESTINATION ${IMAGEDIR} FILES_MATCHING PATTERN "*.jpg")
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/data/help/ DESTINATION ${HELPDIR} FILES_MATCHING PATTERN "*help_*")
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/tables/WVGA/ DESTINATION ${TABLEDIR} FILES_MATCHING PATTERN "*.xml")
diff --git a/emulator/include/bt-callback.h b/emulator/include/bt-callback.h
new file mode 100644 (file)
index 0000000..ed52629
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_CALLBACK_H
+#define __BT_CALLBACK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <bluetooth.h>
+
+void _bt_cb_state_changed(int result,
+                       bt_adapter_state_e adapter_state,
+                       void *user_data);
+
+void _bt_cb_discovery_state_changed(int result,
+                       bt_adapter_device_discovery_state_e discovery_state,
+                       bt_adapter_device_discovery_info_s *discovery_info,
+                       void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+#endif                         /* __BT_CALLBACK_H */
diff --git a/emulator/include/bt-debug.h b/emulator/include/bt-debug.h
new file mode 100644 (file)
index 0000000..e5c175d
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_DEBUG_H
+#define __BT_DEBUG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <dlog.h>
+#include <stdio.h>
+#include <string.h>
+
+#undef LOG_TAG
+#define LOG_TAG "BLUETOOTH_SETTING_UG"
+
+#define BT_INFO(fmt, arg...) SLOGI(fmt, ##arg)
+
+#define BT_ERR(fmt, arg...) SLOGE(fmt, ##arg)
+
+#define BT_DBG(fmt, arg...) SLOGD(fmt, ##arg)
+
+
+#define DBG_SECURE(fmt, args...) SECURE_SLOGD(fmt, ##args)
+#define ERR_SECURE(fmt, args...) SECURE_SLOGE(fmt, ##args)
+#define INFO_SECURE(fmt, args...) SECURE_SLOGI(fmt, ##args)
+
+#define FUNCTION_TRACE
+#ifdef FUNCTION_TRACE
+#define        FN_START BT_DBG("[ENTER FUNC]");
+#define        FN_END BT_DBG("[EXIT FUNC]");
+#else
+#define        FN_START
+#define        FN_END
+#endif
+
+#define warn_if(expr, fmt, arg...) \
+       do { \
+               if (expr) { \
+                       BT_ERR("(%s) -> "fmt, #expr, ##arg); \
+               } \
+       } while (0);
+
+#define ret_if(expr) \
+       do { \
+               if (expr) { \
+                       BT_ERR("(%s) return", #expr); \
+                       return; \
+               } \
+       } while (0);
+
+#define retv_if(expr, val) \
+       do { \
+               if (expr) { \
+                       BT_ERR("(%s) return", #expr); \
+                       return (val); \
+               } \
+       } while (0);
+
+#define retm_if(expr, fmt, arg...) \
+       do { \
+               if (expr) { \
+                       BT_ERR(fmt, ##arg); \
+                       BT_ERR("(%s) return", #expr); \
+                       return; \
+               } \
+       } while (0);
+
+#define retvm_if(expr, val, fmt, arg...) \
+       do { \
+               if (expr) { \
+                       BT_ERR(fmt, ##arg); \
+                       BT_ERR("(%s) return", #expr); \
+                       return (val); \
+               } \
+       } while (0);
+
+#ifdef __cplusplus
+}
+#endif
+#endif                         /* __BT_DEBUG_H */
diff --git a/emulator/include/bt-emulator-api.h b/emulator/include/bt-emulator-api.h
new file mode 100644 (file)
index 0000000..0167480
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_EMULATOR_API_H__
+#define __BT_EMULATOR_API_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <bluetooth.h>
+
+int bt_emulator_start_device_discovery(void);
+
+int bt_emulator_stop_device_discovery(void);
+
+int bt_emulator_get_state(bt_adapter_state_e *adapter_state);
+
+int bt_emulator_is_discovering(bool *is_discovering);
+
+int bt_emulator_get_name(char **name);
+
+int bt_emulator_enable(void);
+
+int bt_emulator_disable(void);
+
+#endif                         /* __BT_EMULATOR_API_H__ */
diff --git a/emulator/include/bt-event-manager.h b/emulator/include/bt-event-manager.h
new file mode 100644 (file)
index 0000000..8159cb1
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+
+#ifndef _BT_EVENT_MANAGER_H_
+#define _BT_EVENT_MANAGER_H_
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+       BT_EVENT_TIMER_ENABLE = 0x00,
+       BT_EVENT_TIMER_DISABLE,
+       BT_EVENT_TIMER_START_DISCOVERY,
+       BT_EVENT_TIMER_STOP_DISCOVERY,
+       BT_EVENT_TIMER_FOUND_DEVICE,
+       BT_EVENT_MAX
+} bt_event_timer_e;
+
+
+void _bt_create_event_timer(int event_id, int interval, void *event_cb, void *user_data);
+
+void _bt_delete_event_timer(int event_id);
+
+void _bt_delete_all_event_timer(void);
+
+int _bt_get_sample_device_number(void);
+
+void* _bt_get_sample_device(int index);
+
+void _bt_free_device_discovery_info_s(void *info);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /*_BT_EVENT_MANAGER_H_*/
+
diff --git a/emulator/include/bt-main-ug.h b/emulator/include/bt-main-ug.h
new file mode 100644 (file)
index 0000000..30a0a93
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_MAIN_UG_H__
+#define __BT_MAIN_UG_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdbool.h>
+#include <libintl.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <efl_extension.h>
+#include <ui-gadget-module.h>
+#include <dlog.h>
+#include <E_DBus.h>
+#include <bundle.h>
+#include <gio/gio.h>
+
+#include "bt-type-define.h"
+
+#ifndef UG_MODULE_API
+#define UG_MODULE_API __attribute__ ((visibility("default")))
+#endif
+
+#define PKGNAME "ug-setting-bluetooth-efl"
+
+#ifdef PREFIX
+#undef PREFIX
+#endif
+#define PREFIX "/usr/ug/"
+
+#define LOCALEDIR PREFIX"/res/locale"
+
+#define BT_EDJ_PATH PREFIX"/res/edje/ug-setting-bluetooth-efl"
+
+#define _EDJ(o)                        elm_layout_edje_get(o)
+#define BT_ICON_EDJ BT_EDJ_PATH"/bluetooth_images.edj"
+#define BT_GENLIST_EDJ BT_EDJ_PATH"/bluetooth_genlist.edj"
+
+#ifdef _
+#undef _
+#endif
+#define _(s)                   dgettext(PKGNAME, s)
+
+#define dgettext_noop(s)       (s)
+
+#ifdef N_
+#undef N_
+#endif
+#define N_(s)                  dgettext_noop(s)
+
+#define BT_UG_VCONF_PRINTSETTING               "memory/bluetooth/printsetting"
+
+typedef struct {
+       /* UI gadget data */
+       ui_gadget_h ug;
+       Evas_Object *base;
+       Evas_Object *win_main;
+       Elm_Theme *theme;
+
+       bt_launch_mode_t bt_launch_mode;
+
+       /* Request timer */
+       Ecore_Timer *request_timer;
+
+       /*************************
+       *          Main View objects
+       ************************ */
+       Evas_Object *navi_bar;
+       Evas_Object *main_layout;
+       Elm_Object_Item *navi_it;
+       Elm_Object_Item *service_navi_it;
+       /* Genlist */
+       Evas_Object *main_genlist;
+
+
+       /* Paired / Searched devices */
+       Evas_Object *searched_dlggrp;
+
+       /* Selected device's genlist items */
+       Elm_Object_Item *searched_item;
+
+       /* Help object */
+       Evas_Object *help_more_popup;
+       Evas_Object *help_popup;
+
+       /* Rename Device object*/
+       Evas_Object *rename_popup;
+       Evas_Object *rename_entry;
+       Evas_Object *rename_button;
+
+       /* Paired / Searched device list */
+       Eina_List *searched_device;
+
+       /* Button */
+       Evas_Object *onoff_btn;
+       Evas_Object *scan_btn;
+
+       /* Genlist Item class */
+       Elm_Genlist_Item_Class *device_name_itc;
+       Elm_Genlist_Item_Class *rename_entry_itc;
+       Elm_Genlist_Item_Class *rename_desc_itc;
+       Elm_Genlist_Item_Class *searched_title_itc;
+       Elm_Genlist_Item_Class *searched_device_itc;
+       Elm_Genlist_Item_Class *no_device_itc;
+       Elm_Genlist_Item_Class *on_itc;
+       Elm_Genlist_Item_Class *off_itc;
+
+       /* Genlist Items */
+       Elm_Object_Item *onoff_item;
+       Elm_Object_Item *device_name_item;
+       Elm_Object_Item *searched_title;
+       Elm_Object_Item *no_device_item;
+       Elm_Object_Item *visible_exp_item[BT_MAX_TIMEOUT_ITEMS + 1];
+       Elm_Object_Item *empty_status_item;
+       Elm_Object_Item *rename_entry_item;
+
+       /*************************
+       *           Popup objects
+       ************************ */
+       Evas_Object *popup;
+       bt_popup_data popup_data;
+       Evas_Object *popup_menu;
+
+       /*************************
+       *          Status Variables
+       ************************ */
+       bool waiting_service_response;
+       bool disconn_req;
+       bool connect_req;
+       bool aul_launching_req;
+       bool is_discovery_started;
+       unsigned int op_status;
+       unsigned int ug_status;
+       unsigned int help_status;
+       unsigned int search_type;
+
+       /*************************
+       *          Grobal variables
+       ************************ */
+       app_control_h service;
+       bundle *popup_bundle;
+       void *handle;
+       char phone_name[BT_GLOBALIZATION_STR_LENGTH];
+       int timeout_id;
+       int popup_timer;
+       bt_dev_t *pick_device;
+       void *connection;
+       bool is_popup_exist;
+
+       GDBusConnection *g_conn;
+       guint gdbus_owner_id;
+
+       /* End key callback */
+       bt_app_back_cb back_cb;
+
+       Ecore_Timer *timer;
+} bt_ug_data;
+
+
+typedef enum _bt_cfg_item_reset_type {
+       BT_CFG_ITEM_UNRESETABLE = 0,
+       BT_CFG_ITEM_RESETABLE = 1,
+} bt_cfg_item_reset_type;
+
+typedef enum _bt_cfg_item_type {
+       BT_CFG_ITEM_NODE_ERROR = 0,     /** Error */
+       BT_CFG_ITEM_UG_NODE = 1,                /** general UG */
+       BT_CFG_ITEM_UI_NODE = 2,                /** no UG, no app launching, just menu name */
+       BT_CFG_ITEM_TITLE_NODE = 3,     /** view name */
+       BT_CFG_ITEM_APP_NODE = 4,               /** app type - by launcher - read doc '4' */
+       BT_CFG_ITEM_VIEW_NODE = 5,              /** view name - 2depth search */
+} bt_cfg_item_type;
+
+typedef struct {
+       char *key_name;                         /** key name */
+       char *icon_path;                        /** icon path */
+       char *ug_args;                          /** UG path or hyperlink */
+       int pos;                                /** position : 1st, 2st -- deprecated */
+       bt_cfg_item_reset_type reset_type;      /** if ug supports Reset function */
+       int click_times;                        /** UG menu need to check */
+       bt_cfg_item_type item_type;     /** 0:item 1:header title */
+       void *data;
+} bt_setting_cfg_node_t;
+
+void _bt_ug_destroy(void *data, void *result);
+
+bt_ug_data* _bt_ug_get_user_data(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif                         /* __BT_MAIN_UG_H__ */
diff --git a/emulator/include/bt-main-view.h b/emulator/include/bt-main-view.h
new file mode 100644 (file)
index 0000000..b1bb17a
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_MAIN_VIEW_H__
+#define __BT_MAIN_VIEW_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <glib.h>
+
+#include "bt-type-define.h"
+#include "bt-main-ug.h"
+
+typedef struct _bt_radio_item bt_radio_item;
+
+struct _bt_radio_item {
+       Elm_Object_Item *it;    /* Genlist Item pointer */
+       int index;              /* Index*/
+       void *ugd;
+};
+
+int _bt_main_enable_bt(void *data);
+
+int _bt_main_disable_bt(void *data);
+
+void _bt_main_phone_name_changing_btn_cb(void *data, Evas_Object *obj,
+                                                void *event_info);
+
+void _bt_main_popup_del_cb(void *data, Evas_Object *obj, void *event_info);
+
+void _bt_back_btn_popup_del_cb(void *data, Evas_Object *obj, void *event_info);
+
+void _bt_main_create_information_popup(void *data, char *msg);
+
+int _bt_main_draw_list_view(bt_ug_data *ugd);
+
+Elm_Object_Item *_bt_main_add_searched_device(bt_ug_data *ugd,
+                                               bt_dev_t *dev);
+
+Elm_Object_Item *_bt_main_add_no_device_found(bt_ug_data *ugd);
+
+void _bt_main_remove_searched_device(bt_ug_data *ugd, bt_dev_t *dev);
+
+void _bt_main_remove_all_searched_devices(bt_ug_data *ugd);
+
+bt_dev_t *_bt_main_get_dev_info(Eina_List *list,
+                               Elm_Object_Item *genlist_item);
+
+bt_dev_t *_bt_main_get_dev_info_by_address(Eina_List *list,
+                                               char *address);
+
+void _bt_main_init_status(bt_ug_data *ugd, void *data);
+
+bt_dev_t *_bt_main_create_searched_device_item(void *data);
+
+void _bt_main_get_paired_device(bt_ug_data *ugd);
+
+void _bt_main_scan_device(bt_ug_data *ugd);
+
+int _bt_main_service_request_cb(void *data);
+
+char *_bt_main_get_device_icon(int major_class, int minor_class,
+                               int connected, gboolean highlighted);
+
+int _bt_main_check_and_update_device(Eina_List *list,
+                                       char *addr, char *name);
+
+void _bt_main_launch_syspopup(void *data, char *event_type,
+                               char *title, char *type);
+
+gboolean _bt_main_is_matched_profile(unsigned int search_type,
+                               unsigned int major_class,
+                               unsigned int service_class,
+                               app_control_h service,
+                               unsigned int minor_class);
+
+void _bt_main_add_searched_title(bt_ug_data *ugd);
+
+void _bt_main_add_device_name_item(bt_ug_data *ugd, Evas_Object *genlist);
+
+void _bt_update_device_list(bt_ug_data *ugd);
+
+Evas_Object * _bt_main_create_scan_button(bt_ug_data *ugd);
+
+int _bt_idle_destroy_ug(void *data);
+
+#ifdef __cplusplus
+}
+#endif
+#endif                         /* __BT_MAIN_VIEW_H__ */
diff --git a/emulator/include/bt-resource.h b/emulator/include/bt-resource.h
new file mode 100644 (file)
index 0000000..fb7d48f
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_RESOURCE_H
+#define __BT_RESOURCE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "bt-main-ug.h"
+
+/* Define icons */
+#define BT_ICON_UNKNOWN "buluetooth_Device_type_icon_unknown.png"
+#define BT_ICON_PHONE "buluetooth_Device_type_icon_mobilephone.png"
+#define BT_ICON_HEADSET "buluetooth_Device_type_icon_headset.png"
+#define BT_ICON_HEADPHONE "buluetooth_Device_type_icon_headphone.png"
+#define BT_ICON_PC "buluetooth_Device_type_icon_computer.png"
+#define BT_ICON_KEYBOARD "buluetooth_Device_type_icon_keyboard.png"
+#define BT_ICON_MOUSE "buluetooth_Device_type_icon_mouse.png"
+#define BT_ICON_PRINTER "buluetooth_Device_type_icon_printer.png"
+#define BT_ICON_HEALTH "bt_device_Medical.png"
+#define BT_ICON_NETWORK "buluetooth_Device_type_icon_network_infrastructure.png"
+#define BT_ICON_GAMING "buluetooth_Device_type_icon_gaming.png"
+#define BT_ICON_DISPLAY "buluetooth_Device_type_icon_display.png"
+#define BT_ICON_CAMERA "buluetooth_Device_type_icon_camera.png"
+#define BT_ICON_WATCH "buluetooth_Device_type_icon_wrist.png"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BT_RESOURCE_H */
diff --git a/emulator/include/bt-string-define.h b/emulator/include/bt-string-define.h
new file mode 100644 (file)
index 0000000..986e413
--- /dev/null
@@ -0,0 +1,331 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_STRING_DEFINE_H__
+#define __BT_STRING_DEFINE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Not included in excel file, but it exist in STMS */
+#define BT_STR_ALLOW_TO_DELETE_YOUR_FILE_Q \
+       _("IDS_BT_BODY_ALLOW_PS_TO_DELETE_YOUR_FILE_Q")
+#define BT_STR_ALLOW_TO_GET_YOUR_FILE_Q \
+       _("IDS_BT_BODY_ALLOW_PS_TO_GET_YOUR_FILE_Q")
+#define BT_STR_ALLOW_TO_PUT_A_FILE_IN_Q \
+       _("IDS_BT_BODY_ALLOW_PS_TO_PUT_A_FILE_IN_Q")
+#define BT_STR_ALWAYS_ON _("IDS_BT_BODY_ALWAYS_ON")
+#define BT_STR_CANCELLED _("IDS_BT_BODY_CANCELLED")
+#define BT_STR_CONTACT_ALREADY_EXISTS \
+       _("IDS_BT_BODY_CONTACT_ALREADY_EXISTS")
+#define BT_STR_FILE_SENT _("IDS_BT_BODY_FILE_SENT")
+#define BT_STR_HEADSET _("IDS_BT_BODY_HEADSET")
+#define BT_STR_INVALID_TIME_ENTER_NUMBER_BETWEEN_1_AND_60 \
+       _("IDS_BT_BODY_INVALID_TIME_ENTER_NUMBER_BETWEEN_1_AND_60")
+#define BT_STR_MINUTE _("IDS_BT_BODY_MINUTE_LC")
+#define BT_STR_MY_PHONES_NAME _("IDS_BT_BODY_MY_PHONES_NAME")
+#define BT_STR_MY_PHONES_VISIBILITY _("IDS_BT_BODY_MY_PHONES_VISIBILITY")
+#define BT_STR_NO_MORE_CONNECTIONS_POSSIBLE \
+       _("IDS_BT_BODY_NO_MORE_CONNECTIONS_POSSIBLE_VODA")
+#define BT_STR_PAIRED_DEVICES _("IDS_BT_BODY_PAIRED_DEVICES")
+#define BT_STR_PRINTER _("IDS_BT_BODY_PRINTER")
+#define BT_STR_RECEIVCED _("IDS_BT_BODY_RECEIVED")
+#define BT_STR_SERVICES _("IDS_BT_BODY_SERVICES")
+#define BT_STR_UPDATING _("IDS_BT_BODY_UPDATING_ING")
+#define BT_STR_BLUETOOTH_DEVICES _("IDS_BT_HEADER_BLUETOOTH_DEVICES")
+#define BT_STR_ENTER_PIN _("IDS_BT_HEADER_ENTERPIN")
+#define BT_STR_NEW_DEVICE _("IDS_BT_HEADER_NEW_DEVICE")
+#define BT_STR_PRINTING         _("IDS_BT_HEADER_PRINTING")
+#define BT_STR_CONNECT_STEREO _("IDS_BT_OPT_CONNECT_STEREO")
+#define BT_STR_DOWNLOAD _("IDS_BT_OPT_DOWNLOAD")
+#define BT_STR_PC _("IDS_BT_OPT_PC")
+#define BT_STR_PRINT _("IDS_BT_OPT_PRINT")
+#define BT_STR_SEARCH_OPTIONS _("IDS_BT_OPT_SEARCH_OPTIONS")
+#define BT_STR_ALLOW_PS_TO_CONNECT_Q _("IDS_BT_POP_ALLOW_PS_TO_CONNECT_Q")
+#define BT_STR_BLUETOOTH_ERROR_TRY_AGAIN_Q \
+       _("IDS_BT_POP_BLUETOOTH_ERROR_TRY_AGAIN_Q")
+#define BT_STR_BLUETOOTH_TIMEOUT_TRY_AGAIN_Q \
+       _("IDS_BT_POP_BLUETOOTH_TIMEOUT_TRY_AGAIN_Q")
+#define BT_STR_CONFIRM_PASSKEY_IS_PS_TO_PAIR_WITH_PS \
+       _("IDS_BT_POP_CONFIRM_PASSKEY_IS_PS_TO_PAIR_WITH_PS")
+#define BT_STR_UNABLE_TO_CONNECT_TRY_Q _("IDS_BT_POP_CONNECTAGAIN")
+#define BT_STR_DELETE_QUESTION _("IDS_BT_POP_DELETE_Q")
+#define BT_STR_DELETING _("IDS_BT_POP_DELETING_ING")
+#define BT_STR_DEVICE_DELETED _("IDS_BT_POP_DEVICEDELETED")
+#define BT_STR_DOWNLOADED _("IDS_BT_POP_DOWNLOADED")
+#define BT_STR_DOWNLOADING_FAILED _("IDS_BT_POP_DOWNLOADING_FAILED")
+#define BT_STR_DOWNLOADING _("IDS_BT_POP_DOWNLOADING_ING")
+#define BT_STR_ENTER_DEVICE_NAME _("IDS_ST_POP_ENTER_DEVICE_NAME")
+#define BT_STR_ENTER_NUMBER_BETWEEN_PD_AND_PD \
+       _("IDS_BT_POP_ENTER_NUMBER_BETWEEN_PD_AND_PD")
+#define BT_STR_INCORRECT_PIN_TRY_AGAIN_Q \
+       _("IDS_BT_POP_INCORRECT_PIN_TRY_AGAIN_Q")
+#define BT_STR_PD_FILES_RECEIVED _("IDS_BT_POP_PD_FILES_RECEIVED")
+#define BT_STR_SENDING_CANCELLED _("IDS_BT_POP_SENDINGCANCEL")
+#define BT_STR_UNABLE_TO_SEND _("IDS_BT_POP_SENDINGFAIL")
+#define BT_STR_SERIAL_CONNECT_WITH_PS_Q _("IDS_BT_POP_SERIAL_CONNECT_WITH_PS_Q")
+#define BT_STR_FILE_RECEIVED _("IDS_BT_POP_SUBFILERECEIVED")
+#define BT_STR_UNABLE_TO_GET_SERVICE_LIST \
+       _("IDS_BT_POP_UNABLE_TO_GET_SERVICE_LIST")
+#define BT_STR_CONNECT _("IDS_BT_SK_CONNECT")
+#define BT_STR_DISCONNECT _("IDS_BT_SK_DISCONNECT")
+#define BT_STR_DISCONNECT_DEVICE _("IDS_BT_HEADER_DISCONNECT_DEVICE_ABB")
+#define BT_STR_DOWNLOAD_CANCELLED _("IDS_BR_POP_DOWNLOAD_CANCELLED")
+#define BT_STR_SEARCHING _("IDS_BT_BODY_SEARCHINGDEVICE")
+#define BT_STR_CONNECTED _("IDS_BT_SBODY_CONNECTED_M_STATUS")
+#define BT_STR_DEVICE_NAME _("IDS_BT_BODY_DEVICENAME")
+#define BT_STR_NO_DEVICE _("IDS_BT_BODY_NO_DEVICES")
+#define BT_STR_GETTING_SERVICE_LIST _("IDS_BT_POP_GETTINGSERVICELIST")
+#define BT_STR_HEADSET_INFO _("IDS_BT_BODY_INFOHEADSET")
+#define BT_STR_SELECT_DEVICES _("IDS_BT_HEADER_SELECT_DEVICE")
+
+#define BT_STR_CONNECT_TO_DEVICE \
+       _("IDS_BT_BODY_CONNECT_TO_BLUETOOTH_DEVICE")
+
+#define BT_STR_UNABLE_TO_GET_THE_SERVICE_LIST \
+       _("IDS_BT_POP_UNABLE_TO_GET_SERVICE_LIST")
+
+#define BT_STR_FLIGHT_MODE \
+       _("IDS_BT_POP_UNABLE_TO_ACTIVATE_BLUETOOTH_WHEN_FLIGHT_MODE_IS_ON")
+
+#define BT_STR_CONNECTED_PHONE_AND_MEDIO_AUDIO \
+       _("IDS_BT_BODY_CONNECTED_TO_PHONE_AND_MEDIA_AUDIO")
+
+#define BT_STR_CONNECTED_PHONE_AUDIO \
+       _("IDS_BT_BODY_CONNECTED_TO_PHONE_AUDIO")
+
+#define BT_STR_CONNECTED_MEDIA_AUDIO \
+       _("IDS_BT_BODY_CONNECTED_TO_MEDIA_AUDIO")
+
+#define BT_STR_CONNECTED_HID_DEVICE \
+       _("IDS_BT_POP_CONNECTED_TO_HID_DEVICE")
+
+#define BT_STR_SCANNING \
+       _("IDS_BT_BODY_SCANNING_FOR_DEVICES_ING")
+
+#define BT_STR_SCAN \
+       _("IDS_BT_SK_SCAN")
+
+
+#define BT_STR_SVC_HEADSET  _("IDS_BT_BODY_HEADSET")
+#define BT_STR_SVC_HEADSET_D _("IDS_BT_BODY_INFOHEADSET")
+
+#define BT_STR_SVC_HF  _("IDS_BT_BODY_HANDSFREE")
+#define BT_STR_SVC_HF_D _("IDS_BT_BODY_INFOHANDSFREE")
+
+#define BT_STR_SVC_STEREO  _("IDS_BT_OPT_STEREO_HEADSET")
+#define BT_STR_SVC_STEREO_D _("IDS_BT_BODY_INFOAVHEADSET")
+
+#define BT_STR_SVC_FT  _("IDS_ST_BODY_TRANSFER_FILES")
+#define BT_STR_SVC_FT_D _("IDS_BT_BODY_INFOFILETRANSFER")
+
+#define BT_STR_SVC_OP  _("IDS_BT_BODY_OBJECT_PUSH")
+#define BT_STR_SVC_OP_D _("IDS_BT_BODY_INFOOBJECTPUSH")
+
+#define BT_STR_SVC_BPP  _("IDS_BT_BODY_BASIC_PRINTING")
+#define BT_STR_SVC_BPP_D  _("IDS_BT_BODY_PRINTER_SERVICEINFO")
+
+#define BT_STR_SVC_DUN  _("IDS_BT_BODY_DIAL_UP_NETWORKING")
+#define BT_STR_SVC_DUN_D _("IDS_BT_BODY_INFODIALUP")
+
+#define BT_STR_SVC_HID  _("IDS_BT_POP_HID_DEVICE")
+#define BT_STR_SVC_HID_D _("IDS_BT_BODY_HID_HKEYBOARD_MOUSE_ETC")
+
+#define BT_STR_SVC_SPP _("IDS_BT_BODY_SERIAL_PORT")
+
+#define BT_STR_SVC_SPP_D  \
+       _("IDS_BT_BODY_THIS_IS_USED_TO_CONNECT_TO_OTHER_BLUETOOTH_DEVICES_VIA_A_VIRTUAL_SERIAL_PORT")
+
+#define BT_STR_CONNECTION_EXISTS \
+       _("IDS_BT_POP_FAILED_TO_CONNECT_HEADSET_OTHER_DEVICE_REFUSED_CONNECTION")
+
+#define BT_STR_VISIBLE_TO_ALL_NEARBY _("IDS_ST_BODY_VISIBLE_TO_ALL_NEARBY_BLUETOOTH_DEVICES")
+#define BT_STR_ONLY_VISIBLE_TO_PAIRED_DEVICES _("IDS_BT_SBODY_ONLY_VISIBLE_TO_PAIRED_BLUETOOTH_DEVICES_ABB")
+#define BT_STR_VISIBLE _("IDS_BT_POP_VISIBILITY_TIMEOUT")
+#define BT_STR_TWO_MINUTES _("IDS_BT_BODY_2_MINUTES")
+#define BT_STR_UNPAIR _("IDS_BT_OPT_UNPAIR")
+#define BT_STR_CONNECTION_OPTIONS _("IDS_BT_BODY_CONNECTION_OPTIONS")
+#define BT_STR_CALL_AUDIO _("IDS_BT_BODY_CALL_AUDIO")
+#define BT_STR_MEDIA_AUDIO _("IDS_BT_BODY_MEDIA_AUDIO")
+#define BT_STR_PS_REMAINING _("IDS_BT_BODY_PS_REMAINING")
+#define BT_STR_PSD_PSD_REMAINING _("IDS_BT_MBODY_P1SD_CP2SD_REMAINING")
+#define BT_STR_TAP_TO_CONNECT _("IDS_BT_BODY_TAP_TO_CONNECT")
+#define BT_STR_TAP_TO_DISCONNECT _("IDS_BT_BODY_TAP_TO_DISCONNECT")
+#define BT_STR_AVAILABLE_DEVICES _("IDS_BT_BODY_AVAILABLE_DEVICES")
+#define BT_STR_FIVE_MINUTES _("IDS_BT_BODY_5_MINUTES")
+#define BT_STR_ONE_HOUR _("IDS_BT_BODY_1_HOUR")
+#define BT_STR_DISCONNECTING _("IDS_BT_BODY_DISCONNECTING")
+#define BT_STR_END_CONNECTION _("IDS_WMGR_POP_THIS_WILL_END_YOUR_CONNECTION_WITH_PS")
+#define BT_STR_DISCONNECT_P_FROM_THE_P_CONNECTION \
+               _("IDS_BT_BODY_DISCONNECT_P2SS_FROM_THE_P1SS_CONNECTION_Q")
+#define BT_STR_DISCONNECT_Q _("IDS_BT_POP_DISCONNECT")
+#define BT_STR_DETAILS _("IDS_BT_BODY_DETAILS")
+#define BT_STR_INPUT_DEVICE _("IDS_BT_BODY_INPUT_DEVICE")
+#define BT_STR_NO_DEVICE_FOUND _("IDS_BT_BODY_NO_DEVICES_FOUND_ABB")
+#define BT_STR_PAIRED _("IDS_BT_BODY_PAIRED")
+#define BT_STR_SEARCHING_SERVICES _("IDS_BT_POP_SEARCHING_SERVICES_ING")
+#define BT_STR_RENAME_DEVICE_TITLE _("IDS_ST_HEADER_RENAME_DEVICE")
+#define BT_STR_RENAME_DEVICE_LABEL \
+       _("IDS_BT_POP_DEVICE_NAMES_ARE_DISPLAYED_TO_DISTINGUISH_EACH_OF_THE_DEVICES_AVAILABLE_IN_THE_NEARBY_DEVICES_LIST_AND_VIA_BLUETOOTH_AND_OTHER_METHODS")
+#define BT_STR_BLUETOOTH_ERROR _("IDS_BT_HEADER_BLUETOOTH_ERROR_ABB")
+#define BT_STR_MAX_CHARACTER_REACHED _("IDS_CLOG_POP_MAXIMUM_NUMBER_OF_CHARACTERS_HPD_REACHED")
+#define BT_STR_NAME_IN_USE _("IDS_YSM_POP_THIS_NAME_IS_ALREADY_IN_USE_NENTER_ANOTHER_NAME")
+#define BT_STR_BLUETOOTH_TETHERING_CONNECTION_ERROR _("IDS_MOBILEAP_POP_UNABLE_TO_USE_BLUETOOTH_TETHERING_WHILE_CONNECTED_TO_WI_FI_NETWORK")
+
+/* We need to change this design ID */
+#define BT_STR_INTERNET_ACCESS _("IDS_BT_BODY_INTERNET_ACCESS_ABB2")
+
+/* System string */
+#define BT_STR_SEARCH _("IDS_BT_OPT_SEARCH")
+#define BT_STR_STOP _("IDS_BT_SK4_STOP")
+#define BT_STR_DONE _("IDS_BR_SK_DONE")
+#define BT_STR_OK _("IDS_BT_BUTTON_OK")
+#define BT_STR_CANCEL _("IDS_BR_SK_CANCEL")
+#define BT_STR_RENAME _("IDS_BT_OPT_RENAME")
+#define BT_STR_NO _("IDS_BR_SK_NO")
+#define BT_STR_BLUETOOTH _("IDS_BT_HEADER_BLUETOOTH")
+#define BT_STR_LOW_BATTERY _("IDS_ST_BODY_LEDOT_LOW_BATTERY")
+#define BT_STR_OFF _("IDS_BT_BUTTON_OFF")
+#define BT_STR_PHONE _("IDS_BT_OPT_PLAYVIAPHONE")
+
+#define BT_STR_RETRY _("IDS_ST_BUTTON_RETRY")
+#define BT_STR_INCORRECT_PIN_MESSAGE _("IDS_BT_POP_AN_INCORRECT_PIN_HAS_BEEN_ENTERED_TRY_AGAIN")
+#define BT_STR_UNABLE_TO_PAIR_WITH_PS _("IDS_BT_POP_UNABLE_TO_PAIR_WITH_PS")
+#define BT_STR_UNABLE_TO_CONNECT_TO_PS _("IDS_BT_POP_UNABLE_TO_CONNECT_TO_PS")
+
+#define BT_STR_CONNECTING _("IDS_BT_SBODY_CONNECTING_ING")
+#define BT_STR_BLUETOOTH_HELP _("IDS_BT_OPT_HELP")
+#define BT_STR_BLUETOOTH_CLOSE _("IDS_CAM_SK_CLOSE")
+#define BT_STR_MORE _("IDS_BT_BUTTON_MORE")
+
+/* Below needs to be added to PO files for use in bt-syspopup */
+#define BT_STR_RECEIVE_PS_FROM_PS_Q _("IDS_BT_POP_RECEIVE_PS_FROM_PS_Q?")
+#define BT_STR_OVERWRITE_FILE_Q _("IDS_BT_POP_PS_ALREADY_EXISTS_OVERWRITE_Q")
+#define BT_STR_PASSKEY_MATCH_Q _("IDS_BT_POP_MATCH_PASSKEYS_ON_PS_Q?")
+#define BT_STR_ENTER_PS_ON_PS_TO_PAIR \
+       _("IDS_BT_BODY_ENTER_P1SS_ON_P2SS_TO_PAIR_THEN_TAP_RETURN_OR_ENTER")
+
+#define BT_STR_RECEIVE_FILE_FROM_PS_Q \
+       _("IDS_BT_POP_RECEIVE_FILE_FROM_PS_Q")
+
+#define BT_STR_BLUETOOTH_PAIRING_REQUEST \
+       _("IDS_BT_HEADER_BLUETOOTH_PAIRING_REQUEST")
+
+#define BT_STR_SHOW_PASSWORD \
+       _("IDS_BT_BODY_SHOW_PASSWORD")
+
+/* Below needs to be added to PO files for use in bluetooth-share-ui */
+#define BT_STR_SHARING_FN  _("IDS_BT_POP_SHARING_ING")
+
+/* Below needs to be added to PO files for use in bluetooth-share */
+#define BT_STR_FILE_EXSIST_MSG _("IDS_BT_POP_PS_ALREADY_EXISTS_OVERWRITE_Q")
+#define BT_STR_FILE_DELETE_AUTHORIZE_MSG       _("Delete %s by %s ?")
+#define BT_STR_SENDING _("IDS_BT_POP_SENDING_ING")
+#define BT_STR_RECEIVING _("IDS_BT_POP_RECEIVING")
+#define BT_STR_MEMORY_FULL _("IDS_BT_POP_MEMORYFULL")
+
+/* Below needs to be added to PO files for use in beat-bluetooth */
+#define BT_STR_BLUETOOTH_ON            _("IDS_BT_POP_ACTIVATED")
+#define BT_STR_BLUETOOTH_AVAILABLE     _("IDS_BT_BODY_BLUETOOTH_AVAILABLE")
+
+/* String access info */
+#define BT_STR_DOUBLE_TAP_RENAME _("Double Tap to rename")
+#define BT_STR_DOUBLE_TAP_UNPAIR _("Double Tap to unpair device")
+#define BT_STR_RADIO_BUTTON _("IDS_TPLATFORM_BODY_RADIO_BUTTON_T_TTS")
+#define BT_STR_RADIO_SELECTED _("IDS_TPLATFORM_BODY_SELECTED_T_TTS")
+#define BT_STR_RADIO_UNSELECTED _("IDS_TPLATFORM_BODY_NOT_SELECTED_T_TTS")
+#define BT_STR_EXP_LIST _("Expandable list")
+#define BT_STR_EXP_LIST_OPEN _("IDS_ST_BODY_DOUBLE_TAP_TO_OPEN_THE_LIST_T_TTS")
+#define BT_STR_EXP_LIST_CLOSE _("IDS_ST_BODY_DOUBLE_TAP_TO_CLOSE_THE_LIST_T_TTS")
+#define BT_STR_ON_OFF_BUTTON _("IDS_TPLATFORM_BODY_ON_OFF_BUTTON_T_TTS")
+#define BT_STR_MORE_BUTTON _("More button")
+#define BT_STR_DOUBLE_TAP_CONNECT _("Double tap to connect")
+#define BT_STR_DOUBLE_TAP_CONNECT_D _("Double tap to connect device")
+#define BT_STR_DOUBLE_TAP_DISCONNECT_D _("Double tap to disconnect device")
+#define BT_STR_CAMERA _("IDS_TPLATFORM_BODY_CAMERA")
+#define BT_STR_DISPLAY _("Display device")
+#define BT_STR_KEYBOARD _("IDS_BT_OPT_KEYBOARD")
+#define BT_STR_MOUSE _("Mouse")
+#define BT_STR_GAMING_DEVICE _("IDS_ST_BODY_GAME_CONTROLLER")
+#define BT_STR_HEALTH_DEVICE _("Health device")
+#define BT_STR_COMPUTER _("IDS_BT_OPT_COMPUTER")
+#define BT_STR_LAN_ACCESS_POINT _("IDS_BT_OPT_MOBILE_AP")
+#define BT_STR_UNKNOWN _("IDS_BT_BODY_UNKNOWNDEVICE")
+#define BT_ACC_STR_GROUP_INDEX _("IDS_TPLATFORM_BODY_GROUP_INDEX")
+#define BT_STR_UNAVAILABLE _("IDS_ST_BODY_UNAVAILABLE")
+#define BT_STR_MINUTES _("IDS_BT_BODY_MINUTES")
+#define BT_STR_SECONDS _("IDS_ST_BODY_SECONDS")
+#define BT_STR_1_MINUTE _("IDS_BT_POP_1_MINUTE")
+#define BT_STR_1_SECOND _("IDS_ST_BODY_1_SECOND")
+
+/* Help */
+#define BT_STR_OPEN_PS_SETTINGS        \
+       _("IDS_HELP_BODY_OPEN_PS_SETTINGS")
+#define BT_STR_SET_UP_BLUETOOTH        \
+       _("IDS_HELP_MBODY_SET_UP_BLUETOOTH")
+#define BT_STR_SEND_PICTURES_VIA_BLUETOOTH     \
+       _("IDS_HELP_HEADER_SEND_PICTURES_VIA_BLUETOOTH")
+#define BT_STR_OPEN_PS_GALLERY         \
+       _("IDS_HELP_BODY_OPEN_PS_GALLERY")
+#define BT_STR_SELECT_THE_PICTURE_OR_ALBUM_YOU_WANT_TO_SEND            \
+       _("IDS_HELP_BODY_SELECT_THE_PICTURE_OR_ALBUM_YOU_WANT_TO_SEND")
+#define BT_STR_TAP_THE_SHARE_BUTTON_AND_SELECT_PS_BLUETOOTH            \
+       _("IDS_HELP_BODY_TAP_THE_SHARE_BUTTON_AND_SELECT_PS_BLUETOOTH")
+#define BT_STR_SELECT_THE_DEVICE_THAT_YOU_WANT_TO_SEND_THE_IMAGE_TO            \
+       _("IDS_HELP_BODY_SELECT_THE_DEVICE_THAT_YOU_WANT_TO_SEND_THE_IMAGE_TO")
+#define BT_STR_SEND_THE_PICTURE_YOU_CAN_TRACK_ITS_PROGRESS_IN_THE_NOTIFICATION_PANEL           \
+       _("IDS_HELP_BODY_SEND_THE_PICTURE_YOU_CAN_TRACK_ITS_PROGRESS_IN_THE_NOTIFICATION_PANEL")
+#define BT_STR_MAKE_THE_DEVICE_YOU_ARE_CONNECTING_TO_VISIBLE           \
+       _("IDS_HELP_BODY_MAKE_THE_DEVICE_YOU_ARE_CONNECTING_TO_VISIBLE")
+#define BT_STR_MAKE_THE_DEVICE_YOU_ARE_CONNECTING_TO_VISIBLE_THEN_TAP_SCAN             \
+       _("IDS_HELP_BODY_MAKE_THE_DEVICE_YOU_ARE_CONNECTING_TO_VISIBLE_THEN_TAP_SCAN")
+#define BT_STR_TOGGLE_THE_BUTTON_AND_TAP_SCAN_TO_TURN_ON_BLUETOOTH_AND_SCAN_FOR_DEVICES                \
+       _("IDS_HELP_BODY_TOGGLE_THE_BUTTON_AND_TAP_SCAN_TO_TURN_ON_BLUETOOTH_AND_SCAN_FOR_DEVICES")
+#define BT_STR_SELECT_PS_BLUETOOTH             \
+       _("IDS_HELP_BODY_SELECT_PS_BLUETOOTH")
+#define BT_STR_SELECT_THE_DEVICE_YOU_WANT_TO_CONNECT_TO_FROM_LIST              \
+       _("IDS_HELP_BODY_SELECT_THE_DEVICE_YOU_WANT_TO_CONNECT_TO_FROM_LIST")
+#define BT_STR_TAP_THE_DEVICE_YOU_WANT_TO_PAIR_WITH_OR_CONNECT_TO_IF_THE_DEVICE_IS_NOT_IN_THE_LIST_MAKE_SURE_IT_IS_VISIBLE_THEN_TAP_SCAN               \
+       _("IDS_HELP_BODY_TAP_THE_DEVICE_YOU_WANT_TO_PAIR_WITH_OR_CONNECT_TO_IF_THE_DEVICE_IS_NOT_IN_THE_LIST_MAKE_SURE_IT_IS_VISIBLE_THEN_TAP_SCAN")
+#define BT_STR_PAIRED_WITH_OR_CONNECTED_TO_SELECTED_DEVICE_SUCCESSFULLY_TAP_THE_CONFIGURATION_ICON_TO_CONFIGURE_THE_DEVICE_PROFILE             \
+       _("IDS_HELP_POP_PAIRED_WITH_OR_CONNECTED_TO_SELECTED_DEVICE_SUCCESSFULLY_TAP_THE_CONFIGURATION_ICON_TO_CONFIGURE_THE_DEVICE_PROFILE")
+#define BT_STR_YOUVE_COMPLETED_THE_STEP_BY_STEP_GUIDE_RETURN_TO_HELP           \
+       _("IDS_HELP_POP_YOUVE_COMPLETED_THE_STEP_BY_STEP_GUIDE_RETURN_TO_HELP")
+#define BT_STR_TUTORIAL_COMPLETED              \
+       _("IDS_HELP_POP_TUTORIAL_COMPLETE")
+#define BT_STR_SCANNING_DEVICES_ING            \
+       _("IDS_PB_MBODY_SCANNING_DEVICES_ING")
+#define BT_STR_INVALID_ACTION_TRY_AGAIN        \
+       _("IDS_HELP_POP_INVALID_ACTION_TRY_AGAIN")
+#define BT_STR_TURN_ON_BLUETOOTH_TO_SEE_A_LIST_OF_AVAILABLE_DEVICES    \
+       _("IDS_BT_BODY_TURN_ON_BLUETOOTH_TO_SEE_A_LIST_OF_DEVICES_YOU_CAN_PAIR_WITH_OR_HAVE_ALREADY_PAIRED_WITH")
+
+#define BT_STR_MY_DEVICE _("IDS_ST_HEADER_MY_DEVICE_NAME")
+
+#define BT_STR_TURNING_ON_BLUETOOTH _("IDS_BT_BODY_TURNING_ON_BLUETOOTH_ING")
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BT_STRING_DEFINE_H__ */
diff --git a/emulator/include/bt-type-define.h b/emulator/include/bt-type-define.h
new file mode 100644 (file)
index 0000000..6612f32
--- /dev/null
@@ -0,0 +1,584 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_TYPE_DEFINE_H__
+#define __BT_TYPE_DEFINE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <glib.h>
+#include <bluetooth.h>
+
+/**************************************************
+*                             Constant Value
+***************************************************/
+
+#define BT_GLOBALIZATION_STR_LENGTH 256
+#define BT_MAX_CHARS_IN_FTP_TITLE 12
+#define BT_MAX_MENU_NAME_LEN 64
+#define BT_MAX_SERVICE_LIST 9
+#define DEVICE_NAME_MAX_CHARACTER 32
+#define DEVICE_NAME_MAX_LEN 100
+#define BT_ADDRESS_LENGTH_MAX 6
+#define BT_ADDRESS_STR_LEN 18
+#define BT_FILE_NAME_LEN_MAX 255
+#define BT_IMG_PATH_MAX 256
+#define BT_HTML_EXTRA_TAG_LENGTH 20
+#define BT_SERVICE_NAME_LENGTH 30
+#define BT_SERVICE_CONTENT_LENGTH 256
+#define BT_PHONE_NUM_LEN 50
+#define BT_EXTRA_STR_LEN 10
+#define BT_BUFFER_LEN 256
+#define BT_TIMEOUT_MAX 3600
+#define BT_MAX_TIMEOUT_ITEMS 5
+#define BT_GLOBALIZATION_TEXT_LENGTH \
+       (BT_GLOBALIZATION_STR_LENGTH+BT_EXTRA_STR_LEN)
+#define BT_DISCONNECT_TEXT_LENGTH \
+               ((2*BT_GLOBALIZATION_STR_LENGTH)+DEVICE_NAME_MAX_LEN)
+#define BT_SERVICE_TEXT_LENGTH \
+       (BT_SERVICE_CONTENT_LENGTH+BT_HTML_EXTRA_TAG_LENGTH)* \
+       BT_MAX_SERVICE_LIST
+#define BT_UG_SYSPOPUP_TIMEOUT_FOR_MULTIPLE_POPUPS 200
+
+
+/* Timeout Value */
+#define BT_SEARCH_SERVICE_TIMEOUT 5
+#define BT_SELECTED_TIMEOUT 5
+#define BT_DELETED_TIMEOUT 2
+#define BT_VISIBILITY_TIMEOUT  1000
+#define BT_HELP_TIMEOUT        3000
+
+/* Define Error type */
+#define BT_UG_FAIL -1
+#define BT_UG_ERROR_NONE 0
+
+#define BT_TWO_MINUTES 120
+#define BT_FIVE_MINUTES 300
+#define BT_ONE_HOUR 3600
+#define BT_ZERO 0
+#define BT_ALWAYS_ON -1
+
+#define BT_RESULT_STR_MAX 256
+
+#define BT_GENLIST_FONT_32_INC 32
+
+/**************************************************
+*                              String define
+***************************************************/
+
+#define BT_SET_FONT_SIZE \
+"<font_size=%d>%s</font_size>"
+
+#define BT_SET_FONT_SIZE_COLOR \
+"<font_size=%d><color=%s>%s</color></font_size>"
+
+/* GENLIST_TEXT_COLOR_LIST_SUB_TEXT_SETTINGS 42 137 194 255 */
+#define BT_GENLIST_SUBTEXT_COLOR "#2A89C2FF"
+#define BT_GENLIST_WHITE_SUBTEXT_COLOR "#FFFFFFFF"
+
+#define BT_RESULT_SUCCESS "success"
+#define BT_RESULT_FAIL "fail"
+
+#define BT_ADAPTER_ON "on"
+#define BT_ADAPTER_OFF "off"
+
+#define BT_DEFAULT_PHONE_NAME "Kiran"
+
+#define BT_SYSPOPUP_REQUEST_NAME "app-confirm-request"
+#define BT_SYSPOPUP_TWO_BUTTON_TYPE "twobtn"
+#define BT_SYSPOPUP_ONE_BUTTON_TYPE "onebtn"
+
+#define BT_FILE_VISIBLE_TIME "file/private/libug-setting-bluetooth-efl/visibility_time"
+
+/* AppControl Operation */
+#define BT_APPCONTROL_PICK_OPERATION "http://tizen.org/appcontrol/operation/bluetooth/pick"
+
+#define BT_APPCONTROL_VISIBILITY_OPERATION "http://tizen.org/appcontrol/operation/configure/bluetooth/visibility"
+
+#define BT_APPCONTROL_ONOFF_OPERATION "http://tizen.org/appcontrol/operation/configure/bluetooth/onoff"
+
+#define APP_CONTROL_OPERATION_SETTING_BT_ENABLE "http://tizen.org/appcontrol/operation/setting/bt_enable"
+
+#define APP_CONTROL_OPERATION_SETTING_BT_VISIBILITY "http://tizen.org/appcontrol/operation/setting/bt_visibility"
+
+#define BT_APPCONTROL_EDIT_OPERATION "http://tizen.org/appcontrol/operation/edit"
+
+#define BT_APPCONTROL_ONOFF_MIME "application/x-bluetooth-on-off"
+
+#define BT_APPCONTROL_VISIBILITY_MIME "application/x-bluetooth-visibility"
+
+/* AppControl Output */
+#define BT_APPCONTROL_ADDRESS "http://tizen.org/appcontrol/data/bluetooth/address"
+#define BT_APPCONTROL_NAME "http://tizen.org/appcontrol/data/bluetooth/name"
+#define BT_APPCONTROL_RSSI "http://tizen.org/appcontrol/data/bluetooth/rssi"
+#define BT_APPCONTROL_IS_PAIRED "http://tizen.org/appcontrol/data/bluetooth/is_paired"
+#define BT_APPCONTROL_MAJOR_CLASS "http://tizen.org/appcontrol/data/bluetooth/major_class"
+#define BT_APPCONTROL_MINOR_CLASS "http://tizen.org/appcontrol/data/bluetooth/minor_class"
+#define BT_APPCONTROL_SERVICE_CLASS "http://tizen.org/appcontrol/data/bluetooth/service_class"
+#define BT_APPCONTROL_SERVICE_TYPE "http://tizen.org/appcontrol/data/bluetooth/service_type"
+#define BT_APPCONTROL_UUID_LIST "http://tizen.org/appcontrol/data/bluetooth/uuid_list"
+#define BT_APPCONTROL_VISIBILITY "http://tizen.org/appcontrol/data/bluetooth/visibility"
+
+/* Access information */
+#define BT_STR_ACCES_INFO_MAX_LEN 512
+#define BT_STR_ACC_ICON "Icon"
+
+/**************************************************
+*                                  Enum type
+***************************************************/
+
+typedef enum {
+       BT_CONNECTION_REQ,
+       BT_PAIRING_REQ,
+       BT_NONE_REQ,
+} bt_confirm_req_t;
+
+/* Visible timout value (sec)*/
+typedef enum {
+       BT_2MIN = 120,
+       BT_5MIN = 300,
+       BT_1HOUR = 3600,
+       BT_NO_TIMEOUT = 0,
+} bt_visible_time_t;
+
+typedef enum {
+       BT_VISIBLE_OFF = 0,
+       BT_VISIBLE_ALWAYS = 1,
+       BT_VISIBLE_TIME_LIMITED = 2,
+} bt_visible_result_t;
+
+typedef enum {
+       BT_SEARCH_ALL_DEVICE = 0,
+       BT_SEARCH_PHONE,
+       BT_SEARCH_HEADSET,
+       BT_SEARCH_PC,
+       BT_SEARCH_HID,
+} bt_search_option_t;
+
+typedef enum {
+       BT_CONNECT_MENU = 1,
+       BT_SEND_MENU,
+       BT_RENAME_MENU,
+       BT_DELETE_MENU,
+       BT_SERVICE_LIST_MENU,
+} bt_menu_index_t;
+
+typedef enum {
+       BT_PAIRED_DEVICE_DISABLE,
+       BT_PAIRED_DEVICE_ENABLE,
+} bt_app_paired_device_status_t;
+
+typedef enum {
+       BT_STATUS_OFF         = 0x0000,
+       BT_STATUS_ON          = 0x0001,
+       BT_STATUS_BT_VISIBLE  = 0x0002,
+       BT_STATUS_TRANSFER    = 0x0004,
+} bt_status_t;
+
+typedef enum {
+       BT_POPUP_PAIRING_ERROR = 0,
+       BT_POPUP_GET_SERVICE_LIST_ERROR,
+       BT_POPUP_GETTING_SERVICE_LIST,
+       BT_POPUP_CONNECTION_ERROR,
+       BT_POPUP_DISCONNECT,
+       BT_POPUP_ENTER_DEVICE_NAME,
+       BT_POPUP_LOW_BATTERY,
+} bt_popup_t;
+
+typedef enum {
+       BT_LAUNCH_NORMAL = 0,
+       BT_LAUNCH_SEND_FILE,
+       BT_LAUNCH_PRINT_IMAGE,
+       BT_LAUNCH_CONNECT_HEADSET,
+       BT_LAUNCH_CONNECT_AUDIO_SOURCE,
+       BT_LAUNCH_USE_NFC,
+       BT_LAUNCH_PICK,
+       BT_LAUNCH_VISIBILITY,
+       BT_LAUNCH_SHARE_CONTACT,
+       BT_LAUNCH_HELP,
+       BT_LAUNCH_ONOFF,
+} bt_launch_mode_t;
+
+typedef enum {
+       BT_HELP_VIEW_NONE = 0x00,
+       BT_HELP_VIEW_1 = 0x01,
+       BT_HELP_VIEW_2 = 0x02,
+       BT_HELP_VIEW_3 = 0x03,
+       BT_HELP_VIEW_4 = 0x04,
+} bt_help_view_t;
+
+typedef enum {
+       BT_CONTROL_BAR_DISABLE,
+       BT_CONTROL_BAR_ENABLE,
+} bt_control_bar_status_t;
+
+typedef enum {
+       BT_NOCONTENT_HIDE,
+       BT_NOCONTNET_SHOW,
+} bt_nocontent_mode_t;
+
+typedef enum {
+       BT_STORE_BOOLEAN,
+       BT_STORE_INT,
+       BT_STORE_STRING,
+} bt_store_type_t;
+
+typedef enum {
+       BT_ACTIVATED = 0,
+       BT_ACTIVATING,
+       BT_DEACTIVATED,
+       BT_DEACTIVATING,
+       BT_SEARCHING,
+       BT_PAIRING,
+} bt_oper_t;
+
+typedef enum {
+       BT_UG_CREATE = 0,
+       BT_UG_START,
+       BT_UG_PAUSE,
+       BT_UG_RESUME,
+       BT_UG_DESTORY
+} bt_ug_status_t;
+
+
+typedef enum {
+       BT_IDLE = 0,
+       BT_DEV_PAIRING,
+       BT_DEV_UNPAIRING,
+       BT_CONNECTING,
+       BT_DISCONNECTING,
+       BT_SERVICE_SEARCHING
+} bt_dev_status_t;
+
+typedef enum {
+       BT_RUN_STATUS_NO_CHANGE = 0x00, /* No Change BT status*/
+       BT_RUN_STATUS_ACTIVATE = 0x01,  /* BT Activate*/
+       BT_RUN_STATUS_DEACTIVATE = 0x02,        /* BT Deactivate*/
+       BT_RUN_STATUS_SEARCH_TEST = 0x03,       /* BT Search Test*/
+       BT_RUN_STATUS_TERMINATE = 0x04, /* BT Terminate*/
+       BT_RUN_STATUS_MAX = 0x05,               /* Max val*/
+} bt_run_status_t;
+
+typedef enum {
+       BT_ON_CURRENTVIEW = 0x00,       /* Run BT on current view*/
+       BT_ON_FOREGROUND = 0x01,        /* Run BT on foreground*/
+       BT_ON_BACKGROUND = 0x02,        /* Run BT on background*/
+} bt_on_t;
+
+typedef enum {
+       BT_HEADSET_CONNECTED = 0x01,
+       BT_STEREO_HEADSET_CONNECTED = 0x02,
+       BT_HID_CONNECTED = 0x04,
+       BT_NETWORK_CONNECTED = 0x08,
+       BT_NETWORK_SERVER_CONNECTED = 0x10,
+       BT_MUSIC_PLAYER_CONNECTED = 0x20,
+} bt_connected_mask_t;
+
+/**
+ * This enum indicates  Device states.
+ */
+
+typedef enum {
+       BT_DEVICE_NONE,        /** < None*/
+       BT_DEVICE_PAIRED,     /** < Device Paired*/
+       BT_DEVICE_CONNECTED/** <Device Connected*/
+} bt_device_state_t;
+
+typedef enum {
+       BT_ITEM_NO_TYPE,
+       BT_ITEM_TOP,
+       BT_ITEM_CENTER,
+       BT_ITEM_BOTTOM,
+} bt_item_type_t;
+
+typedef enum {
+       BT_ITEM_NONE,
+       BT_ITEM_NAME,
+       BT_ITEM_UNPAIR,
+       BT_ITEM_CALL,
+       BT_ITEM_MEDIA,
+       BT_ITEM_HID,
+       BT_ITEM_NETWORK,
+} bt_profile_view_item_type_t;
+
+typedef enum {
+       BT_DEVICE_MAJOR_MASK_MISC = 0x00,
+       BT_DEVICE_MAJOR_MASK_COMPUTER = 0x0001,
+       BT_DEVICE_MAJOR_MASK_PHONE = 0x0002,
+       BT_DEVICE_MAJOR_MASK_LAN_ACCESS_POINT = 0x0004,
+       BT_DEVICE_MAJOR_MASK_AUDIO = 0x0008,
+       BT_DEVICE_MAJOR_MASK_PERIPHERAL = 0x0010,
+       BT_DEVICE_MAJOR_MASK_IMAGING = 0x0020,
+       BT_DEVICE_MAJOR_MASK_WEARABLE = 0x0040,
+       BT_DEVICE_MAJOR_MASK_TOY = 0x0080,
+       BT_DEVICE_MAJOR_MASK_HEALTH = 0x0100,
+} bt_device_major_mask_t;
+
+/*
+ * Major device class (part of Class of Device)
+ */
+typedef enum {
+       BT_MAJOR_DEV_CLS_MISC = 0x00,/**<miscellaneous */
+       BT_MAJOR_DEV_CLS_COMPUTER = 0x01, /**<Computer */
+       BT_MAJOR_DEV_CLS_PHONE = 0x02, /**<Phone */
+       BT_MAJOR_DEV_CLS_LAN_ACCESS_POINT = 0x03,/**<LAN access point */
+       BT_MAJOR_DEV_CLS_AUDIO = 0x04,/**<AudioDevice */
+       BT_MAJOR_DEV_CLS_PERIPHERAL = 0x05,/**<Peripheral Device  */
+       BT_MAJOR_DEV_CLS_IMAGING = 0x06,/**<Imaging Device */
+       BT_MAJOR_DEV_CLS_WEARABLE = 0x07,/**<Wearable Device */
+       BT_MAJOR_DEV_CLS_TOY = 0x08,/**<Toy Device */
+       BT_MAJOR_DEV_CLS_HEALTH = 0x09,/**<Health Device */
+       BT_MAJOR_DEV_CLS_UNCLASSIFIED = 0x1F/**<Unclassified device  */
+} bt_major_class_t;
+
+/*
+ * Minor device class (part of Class of Device)
+ */
+typedef enum {
+       BTAPP_MIN_DEV_CLS_UNCLASSIFIED = 0x00,
+       BTAPP_MIN_DEV_CLS_DESKTOP_WORKSTATION = 0x04,
+       BTAPP_MIN_DEV_CLS_SERVER_CLASS_COMPUTER = 0x08,
+       BTAPP_MIN_DEV_CLS_LAPTOP = 0x0C,
+       BTAPP_MIN_DEV_CLS_HANDHELD_PC_OR_PDA = 0x10,
+       BTAPP_MIN_DEV_CLS_PALM_SIZED_PC_OR_PDA = 0x14,
+       BTAPP_MIN_DEV_CLS_WEARABLE_COMPUTER = 0x18,
+
+       BTAPP_MIN_DEV_CLS_CELLULAR = 0x04,
+       BTAPP_MIN_DEV_CLS_CORDLESS = 0x08,
+       BTAPP_MIN_DEV_CLS_SMART_PHONE = 0x0C,
+       BTAPP_MIN_DEV_CLS_WIRED_MODEM_OR_VOICE_GATEWAY = 0x10,
+       BTAPP_MIN_DEV_CLS_COMMON_ISDN_ACCESS = 0x14,
+       BTAPP_MIN_DEV_CLS_SIM_CARD_READER = 0x18,
+       BTAPP_MID_DEV_CLS_PRINTER = 0x80,
+
+       BTAPP_MIN_DEV_CLS_FULLY_AVAILABLE = 0x04,
+       BTAPP_MIN_DEV_CLS_1_TO_17_PERCENT_UTILIZED = 0x20,
+       BTAPP_MIN_DEV_CLS_17_TO_33_PERCENT_UTILIZED = 0x40,
+       BTAPP_MIN_DEV_CLS_33_TO_50_PERCENT_UTILIZED = 0x60,
+       BTAPP_MIN_DEV_CLS_50_to_67_PERCENT_UTILIZED = 0x80,
+       BTAPP_MIN_DEV_CLS_67_TO_83_PERCENT_UTILIZED = 0xA0,
+       BTAPP_MIN_DEV_CLS_83_TO_99_PERCENT_UTILIZED = 0xC0,
+       BTAPP_MIN_DEV_CLS_NO_SERVICE_AVAILABLE = 0xE0,
+
+       BTAPP_MIN_DEV_CLS_HEADSET_PROFILE = 0x04,
+       BTAPP_MIN_DEV_CLS_HANDSFREE = 0x08,
+       BTAPP_MIN_DEV_CLS_MICROPHONE = 0x10,
+       BTAPP_MIN_DEV_CLS_LOUD_SPEAKER = 0x14,
+       BTAPP_MIN_DEV_CLS_HEADPHONES = 0x18,
+       BTAPP_MIN_DEV_CLS_PORTABLE_AUDIO = 0x1C,
+       BTAPP_MIN_DEV_CLS_CAR_AUDIO = 0x20,
+       BTAPP_MIN_DEV_CLS_SET_TOP_BOX = 0x24,
+       BTAPP_MIN_DEV_CLS_HIFI_AUDIO_DEVICE = 0x28,
+       BTAPP_MIN_DEV_CLS_VCR = 0x2C,
+       BTAPP_MIN_DEV_CLS_VIDEO_CAMERA = 0x30,
+       BTAPP_MIN_DEV_CLS_CAM_CORDER = 0x34,
+       BTAPP_MIN_DEV_CLS_VIDEO_MONITOR = 0x38,
+       BTAPP_MIN_DEV_CLS_VIDEO_DISPLAY_AND_LOUD_SPEAKER = 0x3C,
+       BTAPP_MIN_DEV_CLS_VIDEO_CONFERENCING = 0x40,
+       BTAPP_MIN_DEV_CLS_GAMING_OR_TOY = 0x48,
+
+       BTAPP_MIN_DEV_CLS_KEY_BOARD = 0x40,
+       BTAPP_MIN_DEV_CLS_POINTING_DEVICE = 0x80,
+       BTAPP_MIN_DEV_CLS_COMBO_KEYBOARD_OR_POINTING_DEVICE = 0xC0,
+
+       BTAPP_MIN_DEV_CLS_JOYSTICK = 0x04,
+       BTAPP_MIN_DEV_CLS_GAME_PAD = 0x08,
+       BTAPP_MIN_DEV_CLS_REMOTE_CONTROL = 0x0C,
+       BTAPP_MIN_DEV_CLS_SENSING_DEVICE = 0x10,
+       BTAPP_MIN_DEV_CLS_DIGITIZER_TABLET = 0x14,
+       BTAPP_MIN_DEV_CLS_CARD_READER = 0x18,
+
+       BTAPP_MIN_DEV_CLS_DISPLAY = 0x10,
+       BTAPP_MIN_DEV_CLS_CAMERA = 0x20,
+       BTAPP_MIN_DEV_CLS_SCANNER = 0x40,
+       BTAPP_MIN_DEV_CLS_PRINTER = 0x80,
+
+       BTAPP_MIN_DEV_CLS_WRIST_WATCH = 0x04,
+       BTAPP_MIN_DEV_CLS_PAGER = 0x08,
+       BTAPP_MIN_DEV_CLS_JACKET = 0x0C,
+       BTAPP_MIN_DEV_CLS_HELMET = 0x10,
+       BTAPP_MIN_DEV_CLS_GLASSES = 0x14,
+
+       BTAPP_MIN_DEV_CLS_ROBOT = 0x04,
+       BTAPP_MIN_DEV_CLS_VEHICLE = 0x08,
+       BTAPP_MIN_DEV_CLS_DOLL_OR_ACTION = 0x0C,
+       BTAPP_MIN_DEV_CLS_CONTROLLER = 0x10,
+       BTAPP_MIN_DEV_CLS_GAME = 0x14,
+
+       BTAPP_MIN_DEV_CLS_BLOOD_PRESSURE_MONITOR = 0x04,
+       BTAPP_MIN_DEV_CLS_THERMOMETER = 0x08,
+       BTAPP_MIN_DEV_CLS_WEIGHING_SCALE = 0x0C,
+       BTAPP_MIN_DEV_CLS_GLUCOSE_METER = 0x10,
+       BTAPP_MIN_DEV_CLS_PULSE_OXIMETER = 0x14,
+       BTAPP_MIN_DEV_CLS_HEART_OR_PULSE_RATE_MONITOR = 0x18,
+       BTAPP_MIN_DEV_CLS_MEDICAL_DATA_DISPLAY = 0x1C,
+} bt_minor_class_t;
+
+
+/*
+ * Service class part of class of device returned from device discovery
+ */
+
+/**
+  * This enum indicates  Service calls part  of device returned from device discovery.
+  */
+typedef enum {
+       BT_COD_SC_ALL = 0x000000, /**< ALL*/
+       BT_COD_SC_LIMITED_DISCOVERABLE_MODE = 0x002000,
+       BT_COD_SC_POSITIONING = 0x010000,/**< POSITIONING*/
+       BT_COD_SC_NETWORKING = 0x020000,/**< NETWORKING*/
+       BT_COD_SC_RENDERING = 0x040000,/**< RENDERING*/
+       BT_COD_SC_CAPTURING = 0x080000,/**< CAPTURING*/
+       BT_COD_SC_OBJECT_TRANSFER = 0x100000,/**< OBJECT_TRANSFER*/
+       BT_COD_SC_AUDIO = 0x200000,/**< AUDIO*/
+       BT_COD_SC_TELEPHONY = 0x400000,/**< TELEPHONY*/
+       BT_COD_SC_INFORMATION = 0x800000,/**< INFORMATION*/
+       BT_COD_SC_UNKNOWN = 0x1FF000/**< UNKNOWN */
+} bt_cod_service_class_t;
+
+typedef enum {
+       BT_SPP_PROFILE_UUID = ((unsigned short)0x1101),                 /**<SPP*/
+       BT_LAP_PROFILE_UUID = ((unsigned short)0x1102),                 /**<LAP*/
+       BT_DUN_PROFILE_UUID = ((unsigned short)0x1103),                 /**<DUN*/
+       BT_OBEX_IR_MC_SYNC_SERVICE_UUID = ((unsigned short)0x1104),     /**<OBEX IR MC SYNC*/
+       BT_OBEX_OBJECT_PUSH_SERVICE_UUID = ((unsigned short)0x1105),    /**<OPP*/
+       BT_OBEX_FILE_TRANSFER_UUID = ((unsigned short)0x1106),          /**<FTP*/
+       BT_IRMC_SYNC_COMMAND_UUID = ((unsigned short)0x1107),           /**<IRMC SYNC COMMAND*/
+       BT_HS_PROFILE_UUID = ((unsigned short)0x1108),                  /**<HS*/
+       BT_CTP_PROFILE_UUID = ((unsigned short)0x1109),                 /**<CTP*/
+       BT_AUDIO_SOURCE_UUID = ((unsigned short)0x110A),                        /**<AUDIO SOURCE*/
+       BT_AUDIO_SINK_UUID = ((unsigned short)0x110B),                  /**<AUDIO SINK*/
+       BT_AV_REMOTE_CONTROL_TARGET_UUID = ((unsigned short)0x110C),    /**<AV REMOTE CONTROL
+                                                                               TARGET*/
+       BT_ADVANCED_AUDIO_PROFILE_UUID = ((unsigned short)0x110D),      /**<A2DP*/
+       BT_AV_REMOTE_CONTROL_UUID = ((unsigned short)0x110E),           /**<AV REMOTE CONTROL UUID*/
+       BT_AV_REMOTE_CONTROL_CONTROLLER_UUID = ((unsigned short)0x110F),        /**<AV REMOTE CONTROLLER UUID*/
+       BT_ICP_PROFILE_UUID = ((unsigned short)0x1110),                 /**<ICP*/
+       BT_FAX_PROFILE_UUID = ((unsigned short)0x1111),                 /**<FAX*/
+       BT_HEADSET_AG_SERVICE_UUID = ((unsigned short)0x1112),          /**<HS AG */
+       BT_PAN_PANU_PROFILE_UUID = ((unsigned short)0x1115),            /**<PAN*/
+       BT_PAN_NAP_PROFILE_UUID = ((unsigned short)0x1116),             /**<PAN*/
+       BT_PAN_GN_PROFILE_UUID = ((unsigned short)0x1117),              /**<PAN*/
+       BT_DIRECT_PRINTING = ((unsigned short)0x1118),
+       BT_OBEX_BPPS_PROFILE_UUID = ((unsigned short)0x1118),           /**<OBEX BPPS*/ /* Will be removed */
+       BT_REFERENCE_PRINTING = ((unsigned short)0x1119),
+       BT_OBEX_IMAGING_UUID = ((unsigned short)0x111A),                        /**<OBEX_IMAGING*/
+       BT_OBEX_IMAGING_RESPONDER_UUID = ((unsigned short)0x111B),      /**<OBEX_IMAGING
+                                                                               RESPONDER*/
+       BT_IMAGING_AUTOMATIC_ARCHIVE_UUID = ((unsigned short)0x111C),   /**<IMAGING AUTOMATIC ARCHIVE*/
+       BT_IMAGING_REFERENCED_OBJECTS_UUID = ((unsigned short)0x111D),  /**<IMAGING REFERENCED OBJECTS*/
+       BT_HF_PROFILE_UUID = ((unsigned short)0x111E),                  /**<HF*/
+       BT_HFG_PROFILE_UUID = ((unsigned short)0x111F),                 /**<HFG*/
+       BT_DIRECT_PRINTING_REFERENCE_OBJ_UUID = ((unsigned short)0x1120),
+                                                                       /**<DIRECT PRINTING*/
+       BT_REFLECTED_UI = ((unsigned short)0x1121),             /**<REFLECTED UI*/
+       BT_BASIC_PRINTING = ((unsigned short)0x1122),           /**<BASIC PRINTING*/
+       BT_PRINTING_STATUS = ((unsigned short)0x1123),          /**<PRINTING  STATUS*/
+       BT_OBEX_PRINTING_STATUS_UUID = ((unsigned short)0x1123),        /**<OBEX PRINTING STATUS*/ /* Will be removed */
+       BT_HID_PROFILE_UUID = ((unsigned short)0x1124),         /**<HID*/
+       BT_HCR_PROFILE_UUID = ((unsigned short)0x1125),         /**<HCRP*/
+       BT_HCR_PRINT_UUID = ((unsigned short)0x1126),           /**<HCR PRINT*/
+       BT_HCR_SCAN_UUID = ((unsigned short)0x1127),            /**<HCR SCAN*/
+       BT_SIM_ACCESS_PROFILE_UUID = ((unsigned short)0x112D),  /**<SIM ACCESS PROFILE*/
+       BT_PBAP_PCE_UUID = ((unsigned short)0x112E),            /**<PBAP - PCE*/
+       BT_PBAP_PSE_UUID = ((unsigned short)0x112F),            /**<OBEX PBA*/
+       BT_OBEX_PBA_PROFILE_UUID = ((unsigned short)0x112F),    /**<OBEX PBA*/ /* Will be removed */
+       BT_OBEX_PBAP_UUID = ((unsigned short)0x1130),           /**<OBEX PBA*/
+       BT_HEADSET_HS_UUID = ((unsigned short)0x1131),          /**<HEADSET HS*/
+       BT_MESSAGE_ACCESS_SERVER_UUID = ((unsigned short)0x1132),/**<MESSAGE ACCESS SERVER*/
+       BT_MESSAGE_NOTIFICATION_SERVER_UUID = ((unsigned short)0x1133),/**<MESSAGE NOTIFICATION SERVER*/
+       BT_MESSAGE_ACCESS_PROFILE_UUID = ((unsigned short)0x1134),/**<MESSAGE ACCESS PROFILE*/
+       BT_PNP_INFORMATION_UUID = ((unsigned short)0x1200),     /**<PNP*/
+       BT_GENERIC_NETWORKING_UUID = ((unsigned short)0x1201),  /**<GENERIC NETWORKING*/
+       BT_GENERIC_FILE_TRANSFER_UUID = ((unsigned short)0x1202),/**<GENERIC FILE TRANSFER*/
+       BT_GENERIC_AUDIO_UUID = ((unsigned short)0x1203),       /**<GENERIC AUDIO*/
+       BT_GENERIC_TELEPHONY_UUID = ((unsigned short)0x1204),   /**<GENERIC TELEPHONY*/
+       BT_VIDEO_SOURCE_UUID = ((unsigned short)0x1303),        /**<VEDIO SOURCE*/
+       BT_VIDEO_SINK_UUID = ((unsigned short)0x1304),          /**<VEDIO SINK*/
+       BT_VIDEO_DISTRIBUTION_UUID = ((unsigned short)0x1305),  /**<VEDIO DISTRIBUTION*/
+       BT_HDP_UUID = ((unsigned short)0x1400),                 /**<HDP*/
+       BT_HDP_SOURCE_UUID = ((unsigned short)0x1401),          /**<HDP SOURCE*/
+       BT_HDP_SINK_UUID = ((unsigned short)0x1402),            /**<HDP SINK*/
+       BT_OBEX_SYNCML_TRANSFER_UUID = ((unsigned short)0x0000) /**<OBEX_SYNC*/ /* Will be removed */
+} bluetooth_service_uuid_list_t;
+
+
+/**************************************************
+*                             Struct define
+***************************************************/
+
+typedef struct {
+       unsigned char bd_addr[BT_ADDRESS_LENGTH_MAX];
+       char addr_str[BT_ADDRESS_STR_LEN + 1];
+       char name[DEVICE_NAME_MAX_LEN + 1];/**<  Device Name */
+       bt_service_class_t service_list;  /**< type of service */
+       bt_major_class_t major_class; /**< major class of the device */
+       bt_minor_class_t minor_class; /**< minor class of the device */
+       int authorized;    /**< authorized ? */
+       bt_cod_service_class_t service_class; /**< service class of device */
+       int rssi;        /**< Received signal strength indicator */
+       int is_connected;
+       int connected_mask;
+       int status;
+       int item_type;
+       int uuid_count;
+       char **uuids;
+       void *layout;
+       void *entry;
+       void *genlist_item;
+       void *icon;
+       void *net_profile;
+       gboolean is_bonded;
+       gboolean call_checked;
+       gboolean media_checked;
+       gboolean hid_checked;
+       gboolean network_checked;
+       gboolean highlighted;
+       void *ugd;
+       int pan_connection_result;
+} bt_dev_t;
+
+typedef struct {
+       bt_popup_t type;
+       void *data;
+} bt_popup_data;
+
+typedef struct {
+       unsigned char bd_addr[BT_ADDRESS_LENGTH_MAX];
+} bt_address_t;
+
+/**************************************************
+*                              Callback type
+***************************************************/
+
+typedef void (*bt_app_back_cb)(void *, void *, void *);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BT_TYPE_DEFINE_H__ */
diff --git a/emulator/include/bt-util.h b/emulator/include/bt-util.h
new file mode 100644 (file)
index 0000000..80c18b8
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_UTIL_H__
+#define __BT_UTIL_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <glib.h>
+#include <bundle.h>
+#include <Elementary.h>
+
+#include "bt-type-define.h"
+
+/* Major Device Mask */
+#define MISCELLANEOUS_MAJOR_DEVICE_MASK (0x000000)
+#define COMPUTER_MAJOR_DEVICE_MASK (0x000100)
+#define PHONE_MAJOR_DEVICE_MASK (0x000200)
+#define LAN_MAJOR_DEVICE_MASK (0x000300)
+#define AV_MAJOR_DEVICE_MASK (0x000400)
+#define PERIPHERAL_MAJOR_DEVICE_MASK (0x000500)
+#define IMAGING_MAJOR_DEVICE_MASK (0x000600)
+#define WEARABLE_MAJOR_DEVICE_MASK (0x000700)
+#define TOY_MAJOR_DEVICE_MASK (0x000800)
+#define UNCLASSIFIED_MAJOR_DEVICE_MASK (0x001F00)
+#define OBJECT_TRANSFER_MAJOR_SERVICE_MASK (0x100000)
+
+gboolean _bt_util_update_class_of_device_by_service_list(bt_service_class_t service_list,
+                                                bt_major_class_t *major_class,
+                                                bt_minor_class_t *minor_class);
+
+void _bt_util_set_value(const char *req, unsigned int *search_type,
+                       unsigned int *op_mode);
+
+gboolean _bt_util_store_get_value(const char *key,
+                             bt_store_type_t store_type,
+                             unsigned int size, void *value);
+
+void _bt_util_launch_no_event(void *data, void *obj, void *event);
+
+void _bt_util_set_list_disabled(Evas_Object *genlist, Eina_Bool disable);
+
+void _bt_util_set_phone_name(void);
+
+int _bt_util_get_phone_name(char *phone_name, int size);
+
+char * _bt_util_get_timeout_string(int timeout);
+
+int _bt_util_get_timeout_value(int index);
+
+int _bt_util_get_timeout_index(int timeout);
+
+void _bt_util_addr_type_to_addr_string(char *address,
+                                              unsigned char *addr);
+
+void _bt_util_addr_type_to_addr_result_string(char *address,
+                                              unsigned char *addr);
+
+void _bt_util_addr_type_to_addr_net_string(char *address,
+                                              unsigned char *addr);
+
+void _bt_util_addr_string_to_addr_type(unsigned char *addr,
+                                                 const char *address);
+
+void _bt_util_convert_time_to_string(unsigned int remain_time,
+                                       char *text_display, char *text_read,
+                                       int size_display, int size_read);
+
+void _bt_util_free_device_uuids(bt_dev_t *item);
+
+void _bt_util_free_device_item(bt_dev_t *item);
+
+gboolean _bt_util_is_space_str(const char *name_str);
+
+void _bt_util_max_len_reached_cb(void *data, Evas_Object *obj,
+                                       void *event_info);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif                         /* __BT_UTIL_H__ */
diff --git a/emulator/include/bt-widget.h b/emulator/include/bt-widget.h
new file mode 100644 (file)
index 0000000..8416005
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef __BT_WIDGET_H__
+#define __BT_WIDGET_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "Elementary.h"
+#include <efl_extension.h>
+
+#define BT_GENLIST_1LINE_TEXT_STYLE "type1"
+#define BT_GENLIST_1LINE_TEXT_ICON_STYLE "type1"
+#define BT_GENLIST_2LINE_TOP_TEXT_STYLE "type1"
+#define BT_GENLIST_2LINE_TOP_TEXT_ICON_STYLE "type1"
+#define BT_GENLIST_2LINE_BOTTOM_TEXT_STYLE "type2"
+#define BT_GENLIST_2LINE_BOTTOM_TEXT_ICON_STYLE "type2"
+#define BT_GENLIST_MULTILINE_TEXT_STYLE "multiline"
+#define BT_GENLIST_GROUP_INDEX_STYLE "group_index"
+#define BT_GENLIST_FULL_CONTENT_STYLE "full"
+
+#define BT_POPUP_STR_MAX_LEN 512
+
+Evas_Object *_bt_create_naviframe(Evas_Object *parent);
+
+Evas_Object *_bt_create_icon(Evas_Object *parent, char *img);
+
+Evas_Object *_bt_create_progressbar(Evas_Object *parent,
+                               const char *style);
+
+void _bt_update_genlist_item(Elm_Object_Item *item);
+
+Evas_Object *_bt_main_base_layout_create(Evas_Object *parent, void *data);
+
+void _bt_set_popup_text(void *data, Evas_Object *popup);
+
+Evas_Object *_bt_create_popup(void *data, void *cb, void *cb_data,
+                                       int timer_val);
+#ifdef __cplusplus
+}
+#endif
+#endif                         /* __BT_WIDGET_H__ */
diff --git a/emulator/src/libraries/bt-callback.c b/emulator/src/libraries/bt-callback.c
new file mode 100644 (file)
index 0000000..01a3949
--- /dev/null
@@ -0,0 +1,409 @@
+/*
+* ug-setting-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <bluetooth.h>
+#include <efl_extension.h>
+#include <bundle.h>
+
+#include "bt-debug.h"
+#include "bt-main-ug.h"
+#include "bt-main-view.h"
+#include "bt-util.h"
+#include "bt-widget.h"
+#include "bt-string-define.h"
+#include "bt-resource.h"
+#include "bt-emulator-api.h"
+#include "syspopup_caller.h"
+
+/**********************************************************************
+*                                                 Static Functions
+***********************************************************************/
+
+static Eina_Bool __bt_cb_auto_discovery(void *data)
+{
+       FN_START;
+
+       int ret;
+       bt_ug_data *ugd = NULL;
+
+       retv_if(data == NULL, ECORE_CALLBACK_CANCEL);
+
+       ugd = (bt_ug_data *)data;
+
+       retv_if((elm_win_focus_get(ugd->win_main) == FALSE), ECORE_CALLBACK_CANCEL);
+
+       _bt_main_remove_all_searched_devices(ugd);
+
+       ret = bt_emulator_start_device_discovery();
+       if (!ret) {
+               ugd->op_status = BT_SEARCHING;
+               elm_object_text_set(ugd->scan_btn, BT_STR_STOP);
+
+               if (ugd->searched_title == NULL)
+                               _bt_main_add_searched_title(ugd);
+       } else {
+               BT_ERR("Discovery failed : Error Cause[%d]", ret);
+       }
+
+       FN_END;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void __bt_cb_enable(int result, void *data)
+{
+       FN_START;
+
+       int timeout = 0;
+       bt_ug_data *ugd = NULL;
+
+       ret_if(data == NULL);
+
+       ugd = (bt_ug_data *)data;
+
+       if (ugd->op_status == BT_ACTIVATED) {
+               BT_DBG("Already enabled state");
+               return;
+       }
+
+       if (result != BT_ERROR_NONE) {
+               BT_ERR("Failed to enable Bluetooth [%d]", result);
+               ugd->op_status = BT_DEACTIVATED;
+               _bt_update_genlist_item(ugd->onoff_item);
+               return;
+       } else {
+               ugd->op_status = BT_ACTIVATED;
+               elm_genlist_item_item_class_update(ugd->onoff_item,
+                                               ugd->on_itc);
+               _bt_update_genlist_item(ugd->onoff_item);
+       }
+
+       if (vconf_get_int(BT_FILE_VISIBLE_TIME, &timeout) != 0)
+               BT_ERR("Fail to get the timeout value");
+
+       _bt_util_set_phone_name();
+
+       if (!ugd->device_name_item)
+               _bt_main_add_device_name_item(ugd, ugd->main_genlist);
+
+       if (ugd->empty_status_item) {
+               elm_object_item_del(ugd->empty_status_item);
+               ugd->empty_status_item = NULL;
+       }
+
+       if (ugd->bt_launch_mode == BT_LAUNCH_ONOFF) {
+               g_idle_add((GSourceFunc) _bt_idle_destroy_ug, ugd);
+               return;
+       } else if (ugd->bt_launch_mode == BT_LAUNCH_VISIBILITY) {
+               return;
+       }
+
+       ugd->scan_btn = _bt_main_create_scan_button(ugd);
+
+       _bt_update_genlist_item(ugd->searched_title);
+
+       if (!ecore_idler_add(__bt_cb_auto_discovery, ugd))
+               BT_ERR("idler can not be added\n\n");
+
+       FN_END;
+}
+
+static void __bt_cb_disable(int result, void *data)
+{
+       FN_START;
+       bt_ug_data *ugd = NULL;
+       ret_if(data == NULL);
+
+       ugd = (bt_ug_data *)data;
+       int ret = 0;
+
+       if (ugd->op_status == BT_DEACTIVATED) {
+               BT_DBG("Already disabled state");
+               return;
+       }
+
+       if (ugd->help_more_popup) {
+               evas_object_del(ugd->help_more_popup);
+               ugd->help_more_popup = NULL;
+       }
+
+       if (ugd->popup) {
+               evas_object_del(ugd->popup);
+               ugd->popup = NULL;
+       }
+
+       if (ugd->rename_popup) {
+               evas_object_del(ugd->rename_popup);
+               ugd->rename_popup = NULL;
+               ugd->rename_entry = NULL;
+       }
+
+       if (result != BT_ERROR_NONE) {
+               BT_ERR("Failed to disable Bluetooth [%d]", result);
+               ugd->op_status = BT_ACTIVATED;
+       } else {
+               if (ugd->timeout_id) {
+                       g_source_remove(ugd->timeout_id);
+                       ugd->timeout_id = 0;
+               }
+
+               ugd->op_status = BT_DEACTIVATED;
+
+               evas_object_del(ugd->scan_btn);
+               ugd->scan_btn = NULL;
+               elm_genlist_item_item_class_update(ugd->onoff_item,
+                                               ugd->off_itc);
+
+               if (ugd->device_name_item) {
+                       elm_object_item_del(ugd->device_name_item);
+                       ugd->device_name_item = NULL;
+               }
+
+               if (ugd->bt_launch_mode != BT_LAUNCH_VISIBILITY &&
+                    ugd->bt_launch_mode != BT_LAUNCH_ONOFF) {
+                       elm_object_disabled_set(ugd->scan_btn, EINA_FALSE);
+                       _bt_main_remove_all_searched_devices(ugd);
+               }
+
+               if (ugd->bt_launch_mode == BT_LAUNCH_ONOFF) {
+                       ret = _bt_idle_destroy_ug((void *)ugd);
+                       if (ret != BT_UG_ERROR_NONE)
+                               BT_DBG("fail to destory ug");
+                       return;
+               }
+       }
+
+       _bt_update_genlist_item(ugd->onoff_item);
+       _bt_update_genlist_item(ugd->searched_title);
+
+       FN_END;
+}
+
+static void __bt_cb_search_completed(int result, void *data)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+
+       ret_if(data == NULL);
+
+       ugd = (bt_ug_data *)data;
+
+       if (ugd->op_status == BT_SEARCHING)
+               ugd->op_status = BT_ACTIVATED;
+
+       ugd->is_discovery_started = FALSE;
+
+       elm_object_text_set(ugd->scan_btn, BT_STR_SCAN);
+
+       _bt_update_genlist_item(ugd->searched_title);
+
+       if (ugd->searched_device == NULL ||
+               eina_list_count(ugd->searched_device) == 0) {
+               /* Don't add the no device item, if no device item already exist */
+               ret_if(ugd->no_device_item != NULL);
+
+               if (ugd->op_status != BT_DEACTIVATED)
+                       ugd->no_device_item = _bt_main_add_no_device_found(ugd);
+
+               _bt_update_genlist_item(ugd->no_device_item);
+       }
+
+       FN_END;
+}
+
+
+static bool __bt_cb_match_discovery_type(unsigned int major_class,
+                                               unsigned int service_class,
+                                               unsigned int mask)
+{
+       FN_START;
+
+       bt_device_major_mask_t major_mask = BT_DEVICE_MAJOR_MASK_MISC;
+
+       if (mask == 0x000000)
+               return TRUE;
+
+       BT_DBG("mask: %x", mask);
+
+       BT_DBG("service_class: %x", service_class);
+
+       /* Check the service_class */
+       if (service_class & mask)
+               return TRUE;
+
+       /* Check the major class */
+       switch (major_class) {
+       case BT_MAJOR_DEV_CLS_COMPUTER:
+               major_mask = BT_DEVICE_MAJOR_MASK_COMPUTER;
+               break;
+       case BT_MAJOR_DEV_CLS_PHONE:
+               major_mask = BT_DEVICE_MAJOR_MASK_PHONE;
+               break;
+       case BT_MAJOR_DEV_CLS_LAN_ACCESS_POINT:
+               major_mask = BT_DEVICE_MAJOR_MASK_LAN_ACCESS_POINT;
+               break;
+       case BT_MAJOR_DEV_CLS_AUDIO:
+               major_mask = BT_DEVICE_MAJOR_MASK_AUDIO;
+               break;
+       case BT_MAJOR_DEV_CLS_PERIPHERAL:
+               major_mask = BT_DEVICE_MAJOR_MASK_PERIPHERAL;
+               break;
+       case BT_MAJOR_DEV_CLS_IMAGING:
+               major_mask = BT_DEVICE_MAJOR_MASK_IMAGING;
+               break;
+       case BT_MAJOR_DEV_CLS_WEARABLE:
+               major_mask = BT_DEVICE_MAJOR_MASK_WEARABLE;
+               break;
+       case BT_MAJOR_DEV_CLS_TOY:
+               major_mask = BT_DEVICE_MAJOR_MASK_TOY;
+               break;
+       case BT_MAJOR_DEV_CLS_HEALTH:
+               major_mask = BT_DEVICE_MAJOR_MASK_HEALTH;
+               break;
+       default:
+               major_mask = BT_DEVICE_MAJOR_MASK_MISC;
+               break;
+       }
+
+       BT_DBG("major_mask: %x", major_mask);
+
+       if (mask & major_mask)
+               return TRUE;
+
+       FN_END;
+
+       return FALSE;
+}
+
+static void __bt_cb_new_device_found(bt_adapter_device_discovery_info_s *info,
+                                    void *data)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+       bt_dev_t *dev = NULL;
+       ret_if(info == NULL);
+       ret_if(data == NULL);
+
+       ugd = (bt_ug_data *)data;
+       ret_if(ugd->op_status != BT_SEARCHING);
+
+       BT_DBG("major_device_class: %d, %x", info->bt_class.major_device_class);
+       BT_DBG("minor_device_class: %d, %x", info->bt_class.minor_device_class);
+       BT_DBG("major_service_class_mask: %d, %x", info->bt_class.major_service_class_mask);
+
+       /* Check the service_class */
+       if (__bt_cb_match_discovery_type(
+                               info->bt_class.major_device_class,
+                               info->bt_class.major_service_class_mask,
+                               ugd->search_type) == FALSE) {
+               BT_DBG("No matched device type");
+               return;
+       }
+
+       if (ugd->searched_device == NULL)
+               _bt_update_genlist_item(ugd->searched_title);
+
+       if (_bt_main_check_and_update_device(ugd->searched_device,
+                                       info->remote_address,
+                                       info->remote_name) >= 0) {
+               _bt_update_device_list(ugd);
+       } else {
+               dev = _bt_main_create_searched_device_item((void *)info);
+               if (NULL == dev) {
+                       BT_ERR("Create new device item failed");
+                       return;
+               }
+
+               if (_bt_main_is_matched_profile(ugd->search_type,
+                                               dev->major_class,
+                                               dev->service_class,
+                                               ugd->service,
+                                               dev->minor_class) == TRUE) {
+                       if (_bt_main_add_searched_device(ugd, dev) == NULL) {
+                               BT_ERR("Fail to add the searched device");
+                               return;
+                       }
+
+                       ugd->searched_device =
+                           eina_list_append(ugd->searched_device, dev);
+
+               } else {
+                       BT_DBG("Searched device does not match the profile");
+                       free(dev);
+               }
+       }
+
+       FN_END;
+}
+
+/**********************************************************************
+*                                                Common Functions
+***********************************************************************/
+
+void _bt_cb_state_changed(int result,
+                       bt_adapter_state_e adapter_state,
+                       void *user_data)
+{
+       BT_INFO("bluetooth %s", adapter_state == BT_ADAPTER_ENABLED ?
+                               "enabled" : "disabled");
+
+       if (adapter_state == BT_ADAPTER_ENABLED)
+               __bt_cb_enable(result, user_data);
+       else
+               __bt_cb_disable(result, user_data);
+}
+
+void _bt_cb_discovery_state_changed(int result,
+                       bt_adapter_device_discovery_state_e discovery_state,
+                       bt_adapter_device_discovery_info_s *discovery_info,
+                       void *user_data)
+{
+       bt_ug_data *ugd = NULL;
+
+       ret_if(user_data == NULL);
+
+       ugd = (bt_ug_data *)user_data;
+
+       if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_STARTED) {
+               BT_INFO("BR/EDR discovery started");
+               ugd->is_discovery_started = TRUE;
+               /*Now enable the Scan button, so that user may call cancel discovery */
+                       elm_object_disabled_set(ugd->scan_btn, EINA_FALSE);
+       } else if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FOUND)
+               __bt_cb_new_device_found(discovery_info, user_data);
+       else if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FINISHED) {
+               BT_INFO("BR/EDR discovery finished");
+               ret_if(ugd->is_discovery_started == FALSE);
+
+               __bt_cb_search_completed(result, user_data);
+               if (ugd->op_status == BT_PAIRING)
+                       elm_object_disabled_set(ugd->scan_btn, EINA_TRUE);
+               else
+                       elm_object_disabled_set(ugd->scan_btn, EINA_FALSE);
+       } else
+               BT_ERR("Unknown device discovery state");
+
+}
diff --git a/emulator/src/libraries/bt-emulator-api.c b/emulator/src/libraries/bt-emulator-api.c
new file mode 100644 (file)
index 0000000..531d5cf
--- /dev/null
@@ -0,0 +1,315 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <glib.h>
+#include <string.h>
+#include <bluetooth.h>
+#include <bluetooth_internal.h>
+#include <vconf.h>
+
+#include "bt-main-ug.h"
+#include "bt-debug.h"
+#include "bt-callback.h"
+#include "bt-event-manager.h"
+#include "bt-emulator-api.h"
+
+static bool g_is_discovering;
+static int g_found_cnt;
+
+#define BT_DEFAULT_NAME "Tizen Emulator"
+
+int bt_emulator_check_adapter(void)
+{
+       FN_START;
+
+       int value = VCONFKEY_BT_STATUS_OFF;
+
+       /* check VCONFKEY_BT_STATUS */
+       if (vconf_get_int(VCONFKEY_BT_STATUS, &value) != 0) {
+               BT_ERR("fail to get vconf key!");
+               return BT_ADAPTER_DISABLED;
+       }
+
+       FN_END;
+
+       return (value == VCONFKEY_BT_STATUS_OFF) ? BT_ADAPTER_DISABLED
+                                                                       : BT_ADAPTER_ENABLED;
+}
+
+#define BT_EMUL_CHECK_ENABLED(func) \
+do { \
+       if (bt_emulator_check_adapter() == BT_ADAPTER_DISABLED) { \
+               BT_ERR("BT BREDR is not enabled"); \
+               func BT_ERROR_NOT_ENABLED; \
+       } \
+} while (0)
+
+static gboolean __bt_adapter_device_found_cb(gpointer user_data)
+{
+       FN_START;
+
+       bt_adapter_device_discovery_info_s *info;
+       bt_ug_data *ugd;
+       BT_DBG("+");
+
+       BT_DBG("found count: %d", g_found_cnt);
+
+       ugd = _bt_ug_get_user_data();
+
+       if (g_found_cnt >= _bt_get_sample_device_number()) {
+               BT_DBG("Finish creating devices");
+               goto done;
+       }
+
+       BT_DBG("[%d] device found", g_found_cnt);
+
+       info = (bt_adapter_device_discovery_info_s *)_bt_get_sample_device(g_found_cnt);
+       if (info == NULL) {
+               BT_DBG("Fail to get the sample device");
+               goto done;
+       }
+
+       _bt_cb_discovery_state_changed(BT_ERROR_NONE,
+                                                               BT_ADAPTER_DEVICE_DISCOVERY_FOUND,
+                                                               info,
+                                                               ugd);
+
+       _bt_free_device_discovery_info_s(info);
+
+       g_found_cnt++;
+
+       FN_END;
+
+       return TRUE;
+done:
+       _bt_delete_event_timer(BT_EVENT_TIMER_FOUND_DEVICE);
+
+       _bt_cb_discovery_state_changed(BT_ERROR_NONE,
+                                                               BT_ADAPTER_DEVICE_DISCOVERY_FINISHED,
+                                                               NULL,
+                                                               ugd);
+
+       g_is_discovering = FALSE;
+       g_found_cnt = 0;
+
+       FN_END;
+
+       return FALSE;
+}
+
+static gboolean __bt_adapter_start_discovery_cb(gpointer user_data)
+{
+       FN_START;
+
+       bt_ug_data *ugd = _bt_ug_get_user_data();
+
+       _bt_cb_discovery_state_changed(BT_ERROR_NONE,
+                                                               BT_ADAPTER_DEVICE_DISCOVERY_STARTED,
+                                                               NULL,
+                                                               ugd);
+
+       _bt_delete_event_timer(BT_EVENT_TIMER_START_DISCOVERY);
+
+       g_found_cnt = 0;
+
+       _bt_create_event_timer(BT_EVENT_TIMER_FOUND_DEVICE, 500,
+                               __bt_adapter_device_found_cb, NULL);
+
+       FN_END;
+
+       return FALSE;
+}
+
+int bt_emulator_start_device_discovery(void)
+{
+       FN_START;
+
+       BT_EMUL_CHECK_ENABLED(return);
+
+       if (g_is_discovering == TRUE) {
+               BT_ERR("BT is already in discovering");
+               return BT_ERROR_NOW_IN_PROGRESS;
+       }
+
+       g_is_discovering = TRUE;
+
+       _bt_create_event_timer(BT_EVENT_TIMER_START_DISCOVERY, 100,
+                                       __bt_adapter_start_discovery_cb, NULL);
+
+       FN_END;
+
+       return BT_ERROR_NONE;
+}
+
+static gboolean __bt_adapter_stop_discovery_cb(gpointer user_data)
+{
+       FN_START;
+
+       bt_ug_data *ugd = _bt_ug_get_user_data();
+
+       BT_DBG("Discovery stopped");
+
+       _bt_cb_discovery_state_changed(BT_ERROR_NONE,
+                                                               BT_ADAPTER_DEVICE_DISCOVERY_FINISHED,
+                                                               NULL,
+                                                               ugd);
+
+       _bt_delete_event_timer(BT_EVENT_TIMER_FOUND_DEVICE);
+       _bt_delete_event_timer(BT_EVENT_TIMER_STOP_DISCOVERY);
+
+       FN_END;
+
+       return FALSE;
+}
+
+int bt_emulator_stop_device_discovery(void)
+{
+       FN_START;
+
+       BT_EMUL_CHECK_ENABLED(return);
+
+       if (g_is_discovering == FALSE) {
+               BT_ERR("BT is not in discovering");
+               return BT_ERROR_NOT_IN_PROGRESS;
+       }
+
+       g_is_discovering = FALSE;
+       g_found_cnt = 0;
+
+       _bt_delete_event_timer(BT_EVENT_TIMER_START_DISCOVERY);
+       _bt_delete_event_timer(BT_EVENT_TIMER_FOUND_DEVICE);
+
+       _bt_create_event_timer(BT_EVENT_TIMER_STOP_DISCOVERY, 100,
+                                       __bt_adapter_stop_discovery_cb, NULL);
+
+       FN_END;
+
+       return BT_ERROR_NONE;
+}
+
+int bt_emulator_get_state(bt_adapter_state_e *adapter_state)
+{
+       FN_START;
+
+       *adapter_state = bt_emulator_check_adapter();
+
+       FN_END;
+
+       return BT_ERROR_NONE;
+}
+
+int bt_emulator_is_discovering(bool *is_discovering)
+{
+       FN_START;
+
+       *is_discovering = g_is_discovering;
+
+       FN_END;
+
+       return BT_ERROR_NONE;
+}
+
+int bt_emulator_get_name(char **name)
+{
+       FN_START;
+
+       BT_EMUL_CHECK_ENABLED(return);
+
+       *name = strdup(BT_DEFAULT_NAME);
+
+       FN_END;
+
+       return BT_ERROR_NONE;
+}
+
+static gboolean __bt_adapter_enable_cb(gpointer user_data)
+{
+       FN_START;
+
+       bt_ug_data *ugd = _bt_ug_get_user_data();
+
+       BT_DBG("+");
+
+       if (vconf_set_int(VCONFKEY_BT_STATUS, VCONFKEY_BT_STATUS_ON) != 0)
+               BT_ERR("Set vconf failed\n");
+
+       if (vconf_set_int(VCONFKEY_BT_DEVICE, VCONFKEY_BT_DEVICE_NONE) != 0)
+               BT_ERR("Set vconf failed\n");
+
+       _bt_cb_state_changed(BT_ERROR_NONE, BT_ADAPTER_ENABLED, ugd);
+
+       _bt_delete_event_timer(BT_EVENT_TIMER_ENABLE);
+
+       FN_END;
+
+       return FALSE;
+}
+
+int bt_emulator_enable(void)
+{
+       FN_START;
+
+       _bt_create_event_timer(BT_EVENT_TIMER_ENABLE, 2000,
+                                       __bt_adapter_enable_cb, NULL);
+
+       FN_END;
+
+       return BT_ERROR_NONE;
+}
+
+static gboolean __bt_adapter_disable_cb(gpointer user_data)
+{
+       FN_START;
+
+       bt_ug_data *ugd = _bt_ug_get_user_data();
+
+       /* Update Bluetooth Status to notify other modules */
+       if (vconf_set_int(VCONFKEY_BT_STATUS, VCONFKEY_BT_STATUS_OFF) != 0)
+               BT_ERR("Set vconf failed");
+
+       if (vconf_set_int(VCONFKEY_BT_DEVICE, VCONFKEY_BT_DEVICE_NONE) != 0)
+               BT_ERR("Set vconf failed\n");
+
+       _bt_cb_state_changed(BT_ERROR_NONE, BT_ADAPTER_DISABLED, ugd);
+
+       _bt_delete_event_timer(BT_EVENT_TIMER_DISABLE);
+
+       FN_END;
+
+       return FALSE;
+}
+
+int bt_emulator_disable(void)
+{
+       FN_START;
+
+       BT_EMUL_CHECK_ENABLED(return);
+
+       _bt_create_event_timer(BT_EVENT_TIMER_DISABLE, 1000,
+                                       __bt_adapter_disable_cb, NULL);
+
+       FN_END;
+
+       return BT_ERROR_NONE;
+}
+
diff --git a/emulator/src/libraries/bt-event-manager.c b/emulator/src/libraries/bt-event-manager.c
new file mode 100644 (file)
index 0000000..ad2dffc
--- /dev/null
@@ -0,0 +1,253 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <glib.h>
+#include <bluetooth.h>
+
+#include "bt-debug.h"
+#include "bt-event-manager.h"
+
+#define MAX_DEVICES 100
+
+struct uuid_def {
+       char *uuid;
+};
+
+static struct uuid_def hid_uuids[] = {
+       { "00001124-0000-1000-8000-00805f9b34fb"        },
+       { "00001200-0000-1000-8000-00805f9b34fb"        },
+};
+
+static struct uuid_def tizen_mobile_uuids[] = {
+       { "00001800-0000-1000-8000-00805f9b34fb" },
+       { "00001801-0000-1000-8000-00805f9b34fb" },
+       { "0000110c-0000-1000-8000-00805f9b34fb" },
+       { "0000110a-0000-1000-8000-00805f9b34fb" },
+       { "00001132-0000-1000-8000-00805f9b34fb" },
+       { "00001133-0000-1000-8000-00805f9b34fb" },
+       { "0000112f-0000-1000-8000-00805f9b34fb" },
+       { "00001105-0000-1000-8000-00805f9b34fb" },
+       { "0000111f-0000-1000-8000-00805f9b34fb" },
+       { "00001112-0000-1000-8000-00805f9b34fb" },
+};
+
+static struct uuid_def mobile_uuids[] = {
+       { "00001105-0000-1000-8000-00805f9b34fb" },
+       { "0000110a-0000-1000-8000-00805f9b34fb" },
+       { "0000110c-0000-1000-8000-00805f9b34fb" },
+       { "00001112-0000-1000-8000-00805f9b34fb" },
+       { "00001115-0000-1000-8000-00805f9b34fb" },
+       { "00001116-0000-1000-8000-00805f9b34fb" },
+       { "0000111f-0000-1000-8000-00805f9b34fb" },
+       { "0000112d-0000-1000-8000-00805f9b34fb" },
+       { "0000112f-0000-1000-8000-00805f9b34fb" },
+       { "00001132-0000-1000-8000-00805f9b34fb" },
+       { "00001200-0000-1000-8000-00805f9b34fb" },
+       { "00001800-0000-1000-8000-00805f9b34fb" },
+       { "00001801-0000-1000-8000-00805f9b34fb" },
+};
+
+static struct uuid_def a2dp_only_uuids[] = {
+       { "0000110b-0000-1000-8000-00805f9b34fb" },
+       { "0000110c-0000-1000-8000-00805f9b34fb" },
+       { "0000110d-0000-1000-8000-00805f9b34fb" },
+       { "0000110e-0000-1000-8000-00805f9b34fb" },
+};
+
+static struct uuid_def headset_uuids[] = {
+       { "0000111e-0000-1000-8000-00805f9b34fb" },
+       { "00001108-0000-1000-8000-00805f9b34fb" },
+       { "0000110d-0000-1000-8000-00805f9b34fb" },
+       { "0000110b-0000-1000-8000-00805f9b34fb" },
+       { "0000110e-0000-1000-8000-00805f9b34fb" },
+};
+
+struct bt_sample_dev_info_t {
+       char *remote_address;
+       char *remote_name;
+       int major_device_class;
+       int minor_device_class;
+       int major_service_class_mask;
+       int rssi;
+       bool is_bonded;
+       struct uuid_def *uuids;
+       int service_count;
+       int appearance;
+       int manufacturer_data_len;
+       char *manufacturer_data;
+};
+
+static struct bt_sample_dev_info_t sample_devices[] = {
+       { "00:1B:66:01:23:1C", "Sennheiser P", 0x04, 0x28, 0x200000, -69, false, a2dp_only_uuids, sizeof(a2dp_only_uuids) / sizeof(a2dp_only_uuids[0]), 0, 0, NULL},
+       { "A8:7C:01:EF:3C:73", "Galaxy S6 edge", 0x02, 0x0C, 0x100000, -70, false, mobile_uuids, sizeof(mobile_uuids) / sizeof(mobile_uuids[0]), 0, 0, NULL},
+       { "50:C9:71:56:30:5A", "Jabra SUPREME a4.18.0", 0x04, 0x28, 0x200000, -58, false, headset_uuids, sizeof(headset_uuids) / sizeof(headset_uuids[0]), 0, 0, NULL},
+       { "AC:5A:14:24:B9:33", "Tizen 3.0 Mobile", 0x02, 0x0C, 0x100000, -75, false, tizen_mobile_uuids, sizeof(tizen_mobile_uuids) / sizeof(tizen_mobile_uuids[0]), 0, 0, NULL},
+       { "34:15:9E:D4:83:B3", "Apple Wireless Mouse", 0x05, 0x80, 0x000000, -60, false, hid_uuids, sizeof(hid_uuids) / sizeof(hid_uuids[0]), 0, 0, NULL},
+};
+
+typedef struct {
+       int event_id;
+       guint timer_id;
+} bt_timer_info_t;
+
+static GSList *timer_list = NULL;
+static int sample_device_num = sizeof(sample_devices) / sizeof(sample_devices[0]);
+
+void _bt_create_event_timer(int event_id, int interval, void *event_cb, void *user_data)
+{
+       bt_timer_info_t *event_info = NULL;
+
+       FN_START;
+
+       event_info = g_malloc0(sizeof(bt_timer_info_t));
+       /* Fix : NULL_RETURNS */
+       ret_if(event_info == NULL);
+
+       _bt_delete_event_timer(event_id);
+
+       event_info->event_id = event_id;
+
+       /* Assign a timer id  */
+       event_info->timer_id = g_timeout_add(interval, (GSourceFunc)event_cb, (gpointer)user_data);
+
+       BT_DBG("Create event timer. event id: %d, timer id: %d", event_id, event_info->timer_id);
+
+       timer_list = g_slist_append(timer_list, event_info);
+
+       FN_END;
+}
+
+void _bt_delete_event_timer(int event_id)
+{
+       GSList *l;
+
+       FN_START;
+
+       BT_DBG("Remove event timer. event id: %d", event_id);
+
+       for (l = timer_list; l != NULL; l = g_slist_next(l)) {
+               bt_timer_info_t *info = l->data;
+               if (info == NULL)
+                       continue;
+
+               if (info->event_id == event_id) {
+                       BT_DBG("Found the event id");
+                       /* Remove the previous timer */
+                       g_source_remove(info->timer_id);
+                       timer_list = g_slist_remove(timer_list, info);
+                       g_free(info);
+                       break;
+               }
+       }
+
+       FN_END;
+}
+
+void _bt_delete_all_event_timer(void)
+{
+       GSList *l;
+
+       FN_START;
+
+       for (l = timer_list; l != NULL; l = g_slist_next(l)) {
+               bt_timer_info_t *info = l->data;
+               if (info == NULL)
+                       continue;
+
+               g_source_remove(info->timer_id);
+               timer_list = g_slist_remove(timer_list, info);
+               g_free(info);
+       }
+
+       g_slist_free(timer_list);
+       timer_list = NULL;
+
+       FN_END;
+}
+
+int _bt_get_sample_device_number(void)
+{
+       return sample_device_num;
+}
+
+void* _bt_get_sample_device(int index)
+{
+       FN_START;
+
+       bt_adapter_device_discovery_info_s *dev_info;
+
+       dev_info = g_malloc0(sizeof(bt_adapter_device_discovery_info_s));
+       retv_if(dev_info == NULL, NULL);
+
+       dev_info->rssi = sample_devices[index].rssi;
+       dev_info->is_bonded = sample_devices[index].is_bonded;
+
+       dev_info->remote_name = g_strdup(sample_devices[index].remote_name);
+       dev_info->remote_address = g_strdup(sample_devices[index].remote_address);
+
+       dev_info->bt_class.major_device_class = sample_devices[index].major_device_class;
+       dev_info->bt_class.minor_device_class = sample_devices[index].minor_device_class;
+       dev_info->bt_class.major_service_class_mask = sample_devices[index].major_service_class_mask;
+
+       dev_info->service_count = sample_devices[index].service_count;
+
+       if (dev_info->service_count > 0) {
+               int i;
+               dev_info->service_uuid = g_malloc0(sizeof(char *) * dev_info->service_count);
+
+               for (i = 0; i < dev_info->service_count; i++) {
+                       BT_DBG("uuid[%d]: %s", i, sample_devices[index].uuids[i]);
+                       dev_info->service_uuid[i] = g_strdup(sample_devices[index].uuids[i].uuid);
+               }
+       }
+
+       FN_END;
+
+       return (void *)dev_info;
+}
+
+void _bt_free_device_discovery_info_s(void *info)
+{
+       FN_START;
+
+       int i;
+
+       bt_adapter_device_discovery_info_s *discovery_info = NULL;
+
+       if (info == NULL)
+               return;
+
+       discovery_info = (bt_adapter_device_discovery_info_s *)info;
+
+       g_free(discovery_info->remote_name);
+       g_free(discovery_info->remote_address);
+
+       if (discovery_info->service_uuid != NULL) {
+               for (i = 0; i < discovery_info->service_count; i++)
+                       g_free(discovery_info->service_uuid[i]);
+
+               free(discovery_info->service_uuid);
+       }
+
+       g_free(discovery_info->manufacturer_data);
+       free(discovery_info);
+
+       FN_END;
+}
+
diff --git a/emulator/src/libraries/bt-util.c b/emulator/src/libraries/bt-util.c
new file mode 100644 (file)
index 0000000..ae7baf7
--- /dev/null
@@ -0,0 +1,498 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <bluetooth.h>
+#include <bluetooth_internal.h>
+#include <vconf.h>
+#include <aul.h>
+#include <notification.h>
+#
+#include "bt-main-ug.h"
+#include "bt-util.h"
+#include "bt-debug.h"
+#include "bt-string-define.h"
+#include "bt-widget.h"
+
+/**********************************************************************
+*                                                Common Functions
+***********************************************************************/
+
+gboolean _bt_util_update_class_of_device_by_service_list(bt_service_class_t service_list,
+                                                bt_major_class_t *major_class,
+                                                bt_minor_class_t *minor_class)
+{
+       FN_START;
+
+       retvm_if(service_list == BT_SC_NONE, FALSE,
+                "Invalid argument: service_list is NULL");
+
+       /* set Major class */
+       if (service_list & BT_SC_HFP_SERVICE_MASK ||
+               service_list & BT_SC_HSP_SERVICE_MASK ||
+               service_list & BT_SC_A2DP_SERVICE_MASK) /* Handsfree device */
+               *major_class = BT_MAJOR_DEV_CLS_AUDIO;
+       else if (service_list & BT_SC_NAP_SERVICE_MASK ||
+                       service_list & BT_SC_PANU_SERVICE_MASK)
+               *major_class = BT_MAJOR_DEV_CLS_PHONE;
+
+       /* set Minor class */
+       if (service_list & BT_SC_HFP_SERVICE_MASK ||
+                       service_list & BT_SC_HSP_SERVICE_MASK)
+               *minor_class = BTAPP_MIN_DEV_CLS_HEADSET_PROFILE;
+       else if (service_list & BT_SC_A2DP_SERVICE_MASK)
+               *minor_class = BTAPP_MIN_DEV_CLS_HEADPHONES;
+       else if (service_list & BT_SC_NAP_SERVICE_MASK ||
+                       service_list & BT_SC_PANU_SERVICE_MASK)
+               *minor_class = BTAPP_MIN_DEV_CLS_SMART_PHONE;
+
+       BT_DBG("Updated major_class = %x, minor_class = %x", *major_class,
+              *minor_class);
+
+       FN_END;
+       return TRUE;
+}
+
+void _bt_util_set_value(const char *req, unsigned int *search_type,
+                       unsigned int *op_mode)
+{
+       FN_START;
+       ret_if(req == NULL);
+       ret_if(search_type == NULL);
+       ret_if(op_mode == NULL);
+
+       if (!strcasecmp(req, "send") || !strcasecmp(req, "browse")) {
+               *search_type = BT_COD_SC_OBJECT_TRANSFER;
+               *op_mode = BT_LAUNCH_SEND_FILE;
+       } else if (!strcasecmp(req, "print")) {
+               *search_type = BT_DEVICE_MAJOR_MASK_IMAGING;
+               *op_mode = BT_LAUNCH_PRINT_IMAGE;
+       } else if (!strcasecmp(req, "call") || !strcasecmp(req, "sound")) {
+               *search_type = BT_DEVICE_MAJOR_MASK_AUDIO;
+               *op_mode = BT_LAUNCH_CONNECT_HEADSET;
+       } else if (!strcasecmp(req, "connect_source")) {
+               *search_type = BT_DEVICE_MAJOR_MASK_AUDIO;
+               *op_mode = BT_LAUNCH_CONNECT_AUDIO_SOURCE;
+       } else if (!strcasecmp(req, "nfc")) {
+               *search_type = BT_DEVICE_MAJOR_MASK_MISC;
+               *op_mode = BT_LAUNCH_USE_NFC;
+       } else if (!strcasecmp(req, "pick")) {
+               *search_type = BT_DEVICE_MAJOR_MASK_MISC;
+               *op_mode = BT_LAUNCH_PICK;
+       } else if (!strcasecmp(req, "visibility")) {
+               *search_type = BT_DEVICE_MAJOR_MASK_MISC;
+               *op_mode = BT_LAUNCH_VISIBILITY;
+       } else if (!strcasecmp(req, "onoff")) {
+               *search_type = BT_DEVICE_MAJOR_MASK_MISC;
+               *op_mode = BT_LAUNCH_ONOFF;
+       } else if (!strcasecmp(req, "contact")) {
+               *search_type = BT_COD_SC_OBJECT_TRANSFER;
+               *op_mode = BT_LAUNCH_SHARE_CONTACT;
+       } else if (!strcasecmp(req, "help")) {
+               *search_type = BT_DEVICE_MAJOR_MASK_MISC;
+               *op_mode = BT_LAUNCH_HELP;
+       } else {
+               *search_type = BT_DEVICE_MAJOR_MASK_MISC;
+               *op_mode = BT_LAUNCH_NORMAL;
+       }
+
+       FN_END;
+
+       return;
+}
+
+gboolean _bt_util_store_get_value(const char *key, bt_store_type_t store_type,
+                             unsigned int size, void *value)
+{
+       FN_START;
+       retv_if(value == NULL, FALSE);
+
+       int ret = 0;
+       int int_value = 0;
+       int *intval = NULL;
+       gboolean *boolean = FALSE;
+       char *str = NULL;
+
+       switch (store_type) {
+       case BT_STORE_BOOLEAN:
+               boolean = (gboolean *)value;
+               ret = vconf_get_bool(key, &int_value);
+               if (ret != 0) {
+                       BT_ERR("Get bool is failed");
+                       *boolean = FALSE;
+                       return FALSE;
+               }
+               *boolean = (int_value != FALSE);
+               break;
+       case BT_STORE_INT:
+               intval = (int *)value;
+               ret = vconf_get_int(key, intval);
+               if (ret != 0) {
+                       BT_ERR("Get int is failed");
+                       *intval = 0;
+                       return FALSE;
+               }
+               break;
+       case BT_STORE_STRING:
+               str = vconf_get_str(key);
+               if (str == NULL) {
+                       BT_ERR("Get string is failed");
+                       return FALSE;
+               }
+               if (size > 1)
+                       strncpy((char *)value, str, size - 1);
+
+               free(str);
+               break;
+       default:
+               BT_ERR("Unknown Store Type");
+               return FALSE;
+       }
+
+       FN_END;
+       return TRUE;
+}
+
+void _bt_util_set_phone_name(void)
+{
+       char *phone_name = NULL;
+       char *ptr = NULL;
+
+       phone_name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
+       if (!phone_name)
+               return;
+
+       if (strlen(phone_name) != 0) {
+               if (!g_utf8_validate(phone_name, -1, (const char **)&ptr))
+                       *ptr = '\0';
+
+               bt_adapter_set_name(phone_name);
+       }
+
+       free(phone_name);
+}
+
+int _bt_util_get_phone_name(char *phone_name, int size)
+{
+       FN_START;
+       retv_if(phone_name == NULL, BT_UG_FAIL);
+
+       if (_bt_util_store_get_value(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
+                                BT_STORE_STRING, size,
+                                (void *)phone_name) < 0) {
+               g_strlcpy(phone_name, BT_DEFAULT_PHONE_NAME, size);
+       }
+
+       FN_END;
+       return BT_UG_ERROR_NONE;
+}
+
+char * _bt_util_get_timeout_string(int timeout)
+{
+       FN_START;
+       char *string = NULL;
+       switch (timeout) {
+       case BT_ZERO:
+               string = g_strdup(BT_STR_OFF);
+               break;
+       case BT_TWO_MINUTES:
+               string = g_strdup(BT_STR_TWO_MINUTES);
+               break;
+       case BT_FIVE_MINUTES:
+               string = g_strdup(BT_STR_FIVE_MINUTES);
+               break;
+       case BT_ONE_HOUR:
+               string = g_strdup(BT_STR_ONE_HOUR);
+               break;
+       case BT_ALWAYS_ON:
+               string = g_strdup(BT_STR_ALWAYS_ON);
+               break;
+       default:
+               string = g_strdup(BT_STR_OFF);
+               break;
+       }
+
+       FN_END;
+       return string;
+}
+
+int _bt_util_get_timeout_value(int index)
+{
+       FN_START;
+
+       int timeout;
+
+       switch (index) {
+       case 1:
+               timeout = BT_ZERO;
+               break;
+       case 2:
+               timeout = BT_TWO_MINUTES;
+               break;
+       case 3:
+               timeout = BT_FIVE_MINUTES;
+               break;
+       case 4:
+               timeout = BT_ONE_HOUR;
+               break;
+       case 5:
+               timeout = BT_ALWAYS_ON;
+               break;
+       default:
+               timeout = BT_ZERO;
+               break;
+       }
+
+       FN_END;
+       return timeout;
+}
+
+int _bt_util_get_timeout_index(int timeout)
+{
+       FN_START;
+
+       int index = 0;
+
+       switch (timeout) {
+       case BT_ZERO:
+               index = 1;
+               break;
+       case BT_TWO_MINUTES:
+               index = 2;
+               break;
+       case BT_FIVE_MINUTES:
+               index = 3;
+               break;
+       case BT_ONE_HOUR:
+               index = 4;
+               break;
+       case BT_ALWAYS_ON:
+               index = 5;
+               break;
+       default:
+               index = 1;
+               break;
+       }
+
+       BT_DBG("index: %d", index);
+
+       FN_END;
+       return index;
+}
+
+void _bt_util_addr_type_to_addr_string(char *address,
+                                              unsigned char *addr)
+{
+       FN_START;
+
+       ret_if(address == NULL);
+       ret_if(addr == NULL);
+
+       snprintf(address, BT_ADDRESS_STR_LEN, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", addr[0],
+               addr[1], addr[2], addr[3], addr[4], addr[5]);
+
+       FN_END;
+}
+
+void _bt_util_addr_type_to_addr_result_string(char *address,
+                                              unsigned char *addr)
+{
+       FN_START;
+
+       ret_if(address == NULL);
+       ret_if(addr == NULL);
+
+       snprintf(address, BT_ADDRESS_STR_LEN, "%2.2X-%2.2X-%2.2X-%2.2X-%2.2X-%2.2X", addr[0],
+               addr[1], addr[2], addr[3], addr[4], addr[5]);
+
+       FN_END;
+}
+
+void _bt_util_addr_type_to_addr_net_string(char *address,
+                                              unsigned char *addr)
+{
+       FN_START;
+
+       ret_if(address == NULL);
+       ret_if(addr == NULL);
+
+       snprintf(address, BT_ADDRESS_STR_LEN, "%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X", addr[0],
+               addr[1], addr[2], addr[3], addr[4], addr[5]);
+
+       FN_END;
+}
+
+void _bt_util_addr_string_to_addr_type(unsigned char *addr,
+                                                 const char *address)
+{
+       FN_START
+
+       int i;
+       char *ptr = NULL;
+
+       if (!address || !addr)
+               return;
+
+       for (i = 0; i < BT_ADDRESS_LENGTH_MAX; i++) {
+               addr[i] = strtol(address, &ptr, 16);
+               if (ptr[0] != '\0') {
+                       if (ptr[0] != ':') {
+                               BT_ERR("Unexpected string");
+                               return;
+                       }
+                       address = ptr + 1;
+               }
+       }
+
+       FN_END;
+}
+
+void _bt_util_convert_time_to_string(unsigned int remain_time,
+                                       char *text_display, char *text_read,
+                                       int size_display, int size_read)
+{
+       FN_START;
+       int minute;
+       int second;
+
+       ret_if(remain_time > BT_TIMEOUT_MAX);
+
+       /* Get seconds */
+       second = remain_time % 60;
+
+       /* Get minutes */
+       minute = remain_time / 60;
+
+       if (size_display == BT_EXTRA_STR_LEN && text_display != NULL)
+               snprintf(text_display, size_display, "%d:%02d", minute, second);
+
+       if (size_read == BT_BUFFER_LEN && text_read != NULL) {
+               char min_part[BT_BUFFER_LEN] = { 0, };
+               char sec_part[BT_BUFFER_LEN] = { 0, };
+
+               /*Set minute Text*/
+               if (minute == 1)
+                       snprintf(min_part, BT_BUFFER_LEN, "%s",
+                                       BT_STR_1_MINUTE);
+               else if (minute > 1)
+                       snprintf(min_part, BT_BUFFER_LEN, "%d %s",
+                                       minute, BT_STR_MINUTES);
+
+               /*Set second Text*/
+               if (second == 1)
+                       snprintf(sec_part, BT_BUFFER_LEN, "%s",
+                                       BT_STR_1_SECOND);
+               else if (second > 1)
+                       snprintf(sec_part, BT_BUFFER_LEN, "%d %s",
+                                       second, BT_STR_SECONDS);
+
+               snprintf(text_read, size_read, "%s %s", min_part, sec_part);
+       }
+       FN_END;
+}
+
+void _bt_util_launch_no_event(void *data, void *obj, void *event)
+{
+       FN_START;
+       BT_DBG
+           ("End key is pressed. But there is no action to process in popup");
+       FN_END;
+}
+
+void _bt_util_set_list_disabled(Evas_Object *genlist, Eina_Bool disable)
+{
+       FN_START;
+       Elm_Object_Item *item = NULL;
+       Elm_Object_Item *next = NULL;
+
+       item = elm_genlist_first_item_get(genlist);
+
+       while (item != NULL) {
+               next = elm_genlist_item_next_get(item);
+               if (item)
+                       elm_object_item_disabled_set(item, disable);
+
+               _bt_update_genlist_item(item);
+               item = next;
+       }
+       FN_END;
+}
+
+void _bt_util_free_device_uuids(bt_dev_t *item)
+{
+       int i;
+
+       ret_if(item == NULL);
+
+       if (item->uuids) {
+               for (i = 0; item->uuids[i] != NULL; i++)
+                       g_free(item->uuids[i]);
+
+               g_free(item->uuids);
+               item->uuids = NULL;
+       }
+}
+
+void _bt_util_free_device_item(bt_dev_t *item)
+{
+       ret_if(item == NULL);
+
+       _bt_util_free_device_uuids(item);
+
+       item->ugd = NULL;
+       free(item);
+}
+
+gboolean _bt_util_is_space_str(const char *name_str)
+{
+       retv_if(name_str == NULL, FALSE);
+       retv_if(*name_str == '\0', FALSE);
+
+       while (*name_str) {
+               if (*name_str != '\0' && *name_str != ' ')
+                       return FALSE;
+
+               name_str++;
+       }
+
+       return TRUE;
+}
+
+void _bt_util_max_len_reached_cb(void *data, Evas_Object *obj,
+                               void *event_info)
+{
+       FN_START;
+       int ret;
+       char str[BT_STR_ACCES_INFO_MAX_LEN] = {0, };
+       char *stms_str = NULL;
+
+       stms_str = BT_STR_MAX_CHARACTER_REACHED;
+
+       snprintf(str, sizeof(str), stms_str, DEVICE_NAME_MAX_CHARACTER);
+
+       ret = notification_status_message_post(str);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               BT_ERR("notification_status_message_post() ERROR [%d]", ret);
+
+       FN_END;
+}
+
diff --git a/emulator/src/ui/bt-main-ug.c b/emulator/src/ui/bt-main-ug.c
new file mode 100644 (file)
index 0000000..4e893dd
--- /dev/null
@@ -0,0 +1,531 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <aul.h>
+#include <vconf.h>
+#include <vconf-internal-setting-keys.h>
+#include <Evas.h>
+#include <Edje.h>
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib-bindings.h>
+#include <notification.h>
+#include <efl_extension.h>
+#include <bundle.h>
+
+#include "bt-main-ug.h"
+#include "bt-util.h"
+#include "bt-widget.h"
+#include "bt-main-view.h"
+#include "bt-debug.h"
+#include "bt-resource.h"
+#include "bt-callback.h"
+#include "bt-string-define.h"
+#include "bt-emulator-api.h"
+#include "bluetooth_internal.h"
+
+static bt_ug_data *g_ugd;
+
+static void __on_destroy(ui_gadget_h ug, app_control_h service, void *priv);
+
+
+/**********************************************************************
+*                                               Static Functions
+***********************************************************************/
+
+static void bt_ug_change_language(bt_ug_data *ugd)
+{
+       FN_START;
+
+       ret_if(ugd == NULL);
+
+       if (ugd->main_genlist)
+               elm_genlist_realized_items_update(ugd->main_genlist);
+
+       if (ugd->navi_it)
+               elm_object_item_text_set(ugd->navi_it, BT_STR_BLUETOOTH);
+       if (ugd->scan_btn) {
+               if (ugd->op_status == BT_SEARCHING)
+                       elm_object_text_set(ugd->scan_btn, BT_STR_STOP);
+               else
+                       elm_object_text_set(ugd->scan_btn, BT_STR_SCAN);
+       }
+
+       if (ugd->popup)
+               _bt_set_popup_text(ugd, ugd->popup);
+
+       FN_END;
+}
+
+static void __bt_ug_release_memory(bt_ug_data *ugd)
+{
+       FN_START;
+
+       bt_dev_t *dev = NULL;
+       Eina_List *l = NULL;
+       Eina_List *l_next = NULL;
+
+       ret_if(ugd == NULL);
+       ret_if(ugd->main_genlist == NULL);
+
+       elm_genlist_clear(ugd->main_genlist);
+       evas_object_del(ugd->main_genlist);
+       ugd->main_genlist = NULL;
+
+       /* Release searched device items */
+       EINA_LIST_FOREACH_SAFE(ugd->searched_device, l, l_next, dev) {
+               ugd->searched_device =
+                   eina_list_remove_list(ugd->searched_device, l);
+               _bt_util_free_device_item(dev);
+       }
+
+       if (ugd->device_name_itc) {
+               elm_genlist_item_class_free(ugd->device_name_itc);
+               ugd->device_name_itc = NULL;
+       }
+
+       if (ugd->rename_entry_itc) {
+               elm_genlist_item_class_free(ugd->rename_entry_itc);
+               ugd->rename_entry_itc = NULL;
+       }
+
+       if (ugd->rename_desc_itc) {
+               elm_genlist_item_class_free(ugd->rename_desc_itc);
+               ugd->rename_desc_itc = NULL;
+       }
+
+       if (ugd->searched_title_itc) {
+               elm_genlist_item_class_free(ugd->searched_title_itc);
+               ugd->searched_title_itc = NULL;
+       }
+
+       if (ugd->searched_device_itc) {
+               elm_genlist_item_class_free(ugd->searched_device_itc);
+               ugd->searched_device_itc = NULL;
+       }
+
+       if (ugd->no_device_itc) {
+               elm_genlist_item_class_free(ugd->no_device_itc);
+               ugd->no_device_itc = NULL;
+       }
+
+       if (ugd->on_itc) {
+               elm_genlist_item_class_free(ugd->on_itc);
+               ugd->on_itc = NULL;
+       }
+
+       if (ugd->off_itc) {
+               elm_genlist_item_class_free(ugd->off_itc);
+               ugd->off_itc = NULL;
+       }
+
+       if (ugd->popup_bundle) {
+               free(ugd->popup_bundle);
+               ugd->popup_bundle = NULL;
+       }
+
+       if (ugd->popup)
+               _bt_main_popup_del_cb(ugd, NULL, NULL);
+
+       if (ugd->popup_timer) {
+               g_source_remove(ugd->popup_timer);
+               ugd->popup_timer = 0;
+       }
+
+       if (ugd->base) {
+               evas_object_del(ugd->base);
+               ugd->base = NULL;
+       }
+
+       FN_END;
+}
+
+static void __bt_main_vconf_change_cb(keynode_t *key, void *data)
+{
+       retm_if(NULL == key, "key is NULL");
+       retm_if(NULL == data, "data is NULL");
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       char *vconf_name = vconf_keynode_get_name(key);
+
+       if (!g_strcmp0(vconf_name, VCONFKEY_SETAPPL_DEVICE_NAME_STR)) {
+               char *name_value = NULL;
+               name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
+               retm_if(!name_value, "Get string is failed");
+               BT_INFO("name : %s", name_value);
+
+               if (ugd->device_name_item && g_strcmp0(ugd->phone_name, name_value)) {
+                       _bt_update_genlist_item(ugd->device_name_item);
+                       _bt_update_genlist_item(ugd->rename_entry_item);
+               }
+               g_free(name_value);
+       } else {
+               BT_ERR("vconf_name is error");
+       }
+}
+
+static int __bt_initialize_view(bt_ug_data *ugd)
+{
+       _bt_main_draw_list_view(ugd);
+
+       return 0;
+}
+
+static Eina_Bool __bt_launch_idler(void *data)
+{
+       FN_START;
+       BT_DBG("UG_LAUNCH_PROFILING");
+
+       int ret;
+       bt_ug_data *ugd = NULL;
+
+       retv_if(data == NULL, ECORE_CALLBACK_CANCEL);
+
+       ugd = (bt_ug_data *)data;
+
+       /* Set event callbacks */
+       __bt_initialize_view(ugd);
+
+       if (ugd->bt_launch_mode == BT_LAUNCH_VISIBILITY ||
+            ugd->bt_launch_mode == BT_LAUNCH_ONOFF) {
+               /* Don't need to register callback */
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       /* In the NFC case, we don't need to display the paired device */
+       if (ugd->op_status == BT_ACTIVATED &&
+           ugd->bt_launch_mode != BT_LAUNCH_USE_NFC &&
+           ugd->bt_launch_mode != BT_LAUNCH_ONOFF) {
+               ret = bt_emulator_start_device_discovery();
+               if (!ret) {
+                       ugd->op_status = BT_SEARCHING;
+                       elm_object_text_set(ugd->scan_btn,
+                                           BT_STR_STOP);
+
+                       if (ugd->searched_title == NULL)
+                               _bt_main_add_searched_title
+                                   (ugd);
+               } else {
+                       BT_ERR
+                           ("Operation failed : Error Cause[%d]",
+                            ret);
+               }
+       }
+       FN_END;
+       BT_DBG("UG_LAUNCH_PROFILING");
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void *__on_create(ui_gadget_h ug, enum ug_mode mode, app_control_h service,
+                        void *priv)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+       BT_DBG("UG_LAUNCH_PROFILING");
+       int ret = 0;
+
+       retv_if(!ug || !priv, NULL);
+
+       ugd = (bt_ug_data *)priv;
+       ugd->ug = ug;
+
+       bindtextdomain(PKGNAME, LOCALEDIR);
+
+       ugd->win_main = ug_get_window();
+
+       if (!ugd->win_main) {
+               __on_destroy(ug, NULL, ugd);
+               return NULL;
+       }
+
+       _bt_main_init_status(ugd, service);
+       BT_DBG("ugd->bt_launch_mode : %d", ugd->bt_launch_mode);
+
+       ugd->service = service;
+
+       ugd->base = _bt_main_base_layout_create(ugd->win_main, ugd);
+       if (!ugd->base) {
+               __on_destroy(ug, NULL, ugd);
+               return NULL;
+       }
+       /* Add layout for custom styles */
+       elm_theme_extension_add(NULL, BT_GENLIST_EDJ);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
+                       __bt_main_vconf_change_cb, ugd);
+
+       if (ret < 0)
+               BT_ERR("vconf_notify_key_changed failed");
+
+       ugd->ug_status = BT_UG_CREATE;
+
+       BT_DBG("UG_LAUNCH_PROFILING");
+       FN_END;
+       return ugd->base;
+}
+
+static void __on_start(ui_gadget_h ug, app_control_h service, void *priv)
+{
+       FN_START;
+       BT_DBG("UG_LAUNCH_PROFILING");
+
+       bt_ug_data *ugd = NULL;
+
+       ugd = priv;
+
+       if (!ecore_idler_add(__bt_launch_idler, ugd))
+               BT_ERR("idler can not be added");
+
+       ugd->ug_status = BT_UG_START;
+       BT_DBG("UG_LAUNCH_PROFILING");
+
+       FN_END;
+}
+
+static void __on_pause(ui_gadget_h ug, app_control_h service, void *priv)
+{
+       FN_START;
+       BT_DBG("UG_LAUNCH_PROFILING");
+       bt_ug_data *ugd = NULL;
+
+       retm_if(priv == NULL, "Invalid argument: priv is NULL");
+
+       BT_INFO("Pause UG");
+
+       ugd = (bt_ug_data *)priv;
+
+       if (ugd->op_status == BT_SEARCHING)
+               bt_emulator_stop_device_discovery();
+
+       ugd->ug_status = BT_UG_PAUSE;
+
+       FN_END;
+}
+
+static void __on_resume(ui_gadget_h ug, app_control_h service, void *priv)
+{
+       FN_START;
+       BT_DBG("UG_LAUNCH_PROFILING");
+
+       bt_ug_data *ugd = NULL;
+
+       retm_if(priv == NULL, "Invalid argument: priv is NULL");
+
+       BT_INFO("Resume UG");
+
+       ugd = (bt_ug_data *)priv;
+
+       if (ugd->timer) {
+               ecore_timer_del(ugd->timer);
+               ugd->timer = NULL;
+       }
+
+       ugd->ug_status = BT_UG_RESUME;
+
+       FN_END;
+}
+
+static void __on_destroy(ui_gadget_h ug, app_control_h service, void *priv)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+       int err;
+
+       if (!ug || !priv)
+               return;
+
+       ugd = priv;
+
+       ugd->ug_status = BT_UG_DESTORY;
+
+       if (ugd->timer) {
+               ecore_timer_del(ugd->timer);
+               ugd->timer = NULL;
+       }
+
+       if (ugd->request_timer) {
+               ecore_timer_del(ugd->request_timer);
+               ugd->request_timer = NULL;
+       }
+
+       if (ugd->timeout_id) {
+               g_source_remove(ugd->timeout_id);
+               ugd->timeout_id = 0;
+       }
+
+       err = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
+                       (vconf_callback_fn) __bt_main_vconf_change_cb);
+
+       if (err < 0)
+               BT_ERR("vconf_ignore_key_changed failed");
+
+       __bt_ug_release_memory(ugd);
+
+       FN_END;
+}
+
+static void __on_message(ui_gadget_h ug, app_control_h msg, app_control_h service,
+                        void *priv)
+{
+       FN_START;
+       FN_END;
+}
+
+static void __on_event(ui_gadget_h ug, enum ug_event event, app_control_h service,
+                      void *priv)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+
+       ret_if(priv == NULL);
+
+       ugd = (bt_ug_data *)priv;
+
+       BT_INFO("Event : %d", event);
+
+       switch (event) {
+       case UG_EVENT_LOW_MEMORY:
+               break;
+       case UG_EVENT_LOW_BATTERY:
+               break;
+       case UG_EVENT_LANG_CHANGE:
+               bt_ug_change_language(ugd);
+               break;
+       default:
+               break;
+       }
+       FN_END;
+}
+
+static void __on_key_event(ui_gadget_h ug, enum ug_key_event event,
+                          app_control_h service, void *priv)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+
+       BT_INFO("Key event UG : %d", event);
+
+       ugd = (bt_ug_data *)priv;
+
+       switch (event) {
+       case UG_KEY_EVENT_END:
+               _bt_ug_destroy(ugd, NULL);
+               break;
+       default:
+               break;
+       }
+       FN_END;
+}
+
+/**********************************************************************
+*                                             Common Functions
+***********************************************************************/
+
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+       FN_START;
+       BT_DBG("UG_LAUNCH_PROFILING");
+
+       bt_ug_data *ugd = NULL;
+
+       if (!ops)
+               return BT_UG_FAIL;
+
+       ugd = calloc(1, sizeof(bt_ug_data));
+       if (!ugd)
+               return BT_UG_FAIL;
+
+       g_ugd = ugd;
+
+       ops->create = __on_create;
+       ops->start = __on_start;
+       ops->pause = __on_pause;
+       ops->resume = __on_resume;
+       ops->destroy = __on_destroy;
+       ops->message = __on_message;
+       ops->event = __on_event;
+       ops->key_event = __on_key_event;
+       ops->priv = ugd;
+       ops->opt = UG_OPT_INDICATOR_ENABLE;
+
+       FN_END;
+       return BT_UG_ERROR_NONE;
+}
+
+UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+       FN_START;
+
+       bt_ug_data *ugd;
+
+       if (!ops)
+               return;
+
+       ugd = ops->priv;
+       if (ugd)
+               free(ugd);
+
+       FN_END;
+}
+
+UG_MODULE_API int setting_plugin_reset(app_control_h service, void *priv)
+{
+       FN_START;
+
+       int result = 0;
+
+       FN_END;
+       return result;
+}
+
+void _bt_ug_destroy(void *data, void *result)
+{
+       FN_START;
+       int ret = 0;
+       bt_ug_data *ugd = NULL;
+
+       BT_INFO("Destroy UG");
+
+       ret_if(data == NULL);
+
+       ugd = (bt_ug_data *)data;
+
+       if (result != NULL)
+               ug_send_result(ugd->ug, result);
+
+       if (ugd->ug)
+               ret = ug_destroy_me(ugd->ug);
+
+       if (ret < 0)
+               BT_ERR("Fail to destroy me");
+
+       FN_END;
+}
+
+bt_ug_data* _bt_ug_get_user_data(void)
+{
+       return g_ugd;
+}
diff --git a/emulator/src/ui/bt-main-view.c b/emulator/src/ui/bt-main-view.c
new file mode 100644 (file)
index 0000000..ca33939
--- /dev/null
@@ -0,0 +1,2176 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <Ecore.h>
+#include <errno.h>
+#include <eina_list.h>
+#include <aul.h>
+#include <bluetooth.h>
+#include <syspopup_caller.h>
+#include <dbus/dbus.h>
+#include <vconf.h>
+#include <app_control.h>
+#include <notification.h>
+#include <efl_extension.h>
+#include <bundle.h>
+
+#include "bt-main-ug.h"
+#include "bt-string-define.h"
+#include "bt-main-view.h"
+#include "bt-debug.h"
+#include "bt-util.h"
+#include "bt-callback.h"
+#include "bt-widget.h"
+#include "bt-resource.h"
+#include "bt-emulator-api.h"
+#include "bluetooth_internal.h"
+#include "syspopup_caller.h"
+
+#define MULTI_SHARE_SERVICE_DATA_PATH "http://tizen.org/appcontrol/data/path"
+#define APP_CONTROL_OPERATION_SHARE_CONTACT "http://tizen.org/appcontrol/operation/share_contact"
+#define SERVICE_SHARE_CONTACT_MODE "http://tizen.org/appcontrol/data/social/namecard_share_mode"
+#define SERVICE_SHARE_CONTACT_ITEM "http://tizen.org/appcontrol/data/social/item_type"
+#define SHARE_CONTACT_DATA_PATH "/opt/usr/media/Downloads/.bluetooth"
+#define SHARE_CONTACT_ITEM_ID_ARRAY "http://tizen.org/appcontrol/data/social/item_id"
+#define SHARE_CONTACT_ITEM_SHARE_MODE "http://tizen.org/appcontrol/data/social/namecard_share_mode"
+#define HELP_SETUP_BLUETOOTH_URI               "tizen-help://ug-bluetooth-efl/setupbluetooth"
+
+/**********************************************************************
+*                                      Static Functions declaration
+***********************************************************************/
+
+static void __bt_main_onoff_btn_cb(void *data, Evas_Object *obj, void *event_info);
+
+static app_control_h __bt_main_get_bt_onoff_result(bt_ug_data *ugd,
+                                               gboolean result);
+
+/**********************************************************************
+*                                               Static Functions
+***********************************************************************/
+
+static char *__bt_main_onoff_label_get(void *data, Evas_Object *obj,
+                                                               const char *part)
+{
+       FN_START;
+       bt_ug_data *ugd = NULL;
+
+       retv_if(data == NULL, NULL);
+       ugd = (bt_ug_data *)data;
+
+       if (!strcmp("elm.text", part)) {
+               return g_strdup(BT_STR_BLUETOOTH);
+       } else if (!strcmp("elm.text.multiline", part)) {
+               char buf[1024] = {0,};
+               if (ugd->op_status == BT_ACTIVATING) {
+                       snprintf(buf, sizeof(buf), "<font_size=30>%s</font_size>", BT_STR_TURNING_ON_BLUETOOTH);
+                       return g_strdup(buf);
+               } else if (ugd->op_status == BT_DEACTIVATED) {
+                       snprintf(buf, sizeof(buf), "<font_size=30>%s</font_size>", BT_STR_TURN_ON_BLUETOOTH_TO_SEE_A_LIST_OF_AVAILABLE_DEVICES);
+                       return g_strdup(buf);
+               }
+       }
+
+       FN_END;
+       return NULL;
+}
+
+static Evas_Object *__bt_main_onoff_icon_get(void *data, Evas_Object *obj,
+                                               const char *part)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+       Evas_Object *btn = NULL;
+       bool activated = false;
+
+       retv_if(data == NULL, NULL);
+
+       ugd = (bt_ug_data *)data;
+
+       if (!strcmp("elm.swallow.end", part)) {
+               if (ugd->op_status == BT_ACTIVATING
+                       || ugd->op_status == BT_DEACTIVATING) {
+                       btn = elm_progressbar_add(obj);
+                       elm_object_style_set(btn, "process_medium");
+                       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.5);
+                       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_progressbar_pulse(btn, TRUE);
+               } else {
+                       activated = ((ugd->op_status == BT_DEACTIVATED) ||
+                               (ugd->op_status == BT_ACTIVATING)) ? false : true;
+                       btn = elm_check_add(obj);
+                       elm_object_style_set(btn, "on&off");
+                       evas_object_pass_events_set(btn, EINA_TRUE);
+                       evas_object_propagate_events_set(btn, EINA_FALSE);
+                       elm_check_state_set(btn, activated);
+
+                       /* add smart callback */
+                       evas_object_smart_callback_add(btn, "changed",
+                               __bt_main_onoff_btn_cb, ugd);
+
+                       ugd->onoff_btn = btn;
+               }
+
+               evas_object_show(btn);
+       }
+
+       FN_END;
+       return btn;
+}
+
+static char *__bt_main_rename_desc_label_get(void *data, Evas_Object *obj,
+                                             const char *part)
+{
+       FN_START;
+
+       if (!strcmp("elm.text.multiline", part)) {
+               char buf[1024] = {0,};
+               snprintf(buf, sizeof(buf), "<font_size=30>%s</font_size>",
+                               BT_STR_RENAME_DEVICE_LABEL);
+               return g_strdup(buf);
+       }
+
+       FN_END;
+       return NULL;
+}
+
+static char *__bt_main_device_label_get(void *data, Evas_Object *obj,
+                                             const char *part)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+       char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
+       char *dev_name = NULL;
+       char *ptr = NULL;
+       retv_if(data == NULL, NULL);
+
+       ugd = (bt_ug_data *)data;
+       BT_DBG("part : %s", part);
+
+       if (!strcmp("elm.text", part)) {
+               memset(ugd->phone_name, 0x00, BT_GLOBALIZATION_STR_LENGTH);
+
+               _bt_util_get_phone_name(ugd->phone_name, sizeof(ugd->phone_name));
+
+               if (strlen(ugd->phone_name) == 0) {
+                       if (bt_emulator_get_name(&dev_name) == BT_ERROR_NONE) {
+                               g_strlcpy(ugd->phone_name, dev_name,
+                                         BT_GLOBALIZATION_STR_LENGTH);
+                               g_free(dev_name);
+                       }
+               }
+
+               BT_DBG("ugd->phone_name : %s[%d]", ugd->phone_name, strlen(ugd->phone_name));
+               /* Check the utf8 valitation & Fill the NULL in the invalid location */
+               if (!g_utf8_validate(ugd->phone_name, -1, (const char **)&ptr))
+                       *ptr = '\0';
+
+               dev_name = elm_entry_utf8_to_markup(ugd->phone_name);
+               if (dev_name) {
+                       g_strlcpy(buf, dev_name, BT_GLOBALIZATION_STR_LENGTH);
+                       g_free(dev_name);
+               } else
+                       g_strlcpy(buf, ugd->phone_name, BT_GLOBALIZATION_STR_LENGTH);
+
+               FN_END;
+               BT_DBG("buf : %s[%d]", buf, strlen(buf));
+               return strdup(buf);
+       } else if (!strcmp("elm.text.sub", part)) {
+               g_strlcpy(buf, BT_STR_MY_DEVICE,
+                         BT_GLOBALIZATION_STR_LENGTH);
+               FN_END;
+               return strdup(buf);
+       } else {
+               BT_ERR("This part name is not exist in style.");
+               return NULL;
+       }
+}
+
+char* __bt_convert_rgba_to_hex(int r, int g, int b, int a)
+{
+       int hexcolor = 0;
+       char* string = NULL;
+
+       string = g_try_malloc0(sizeof(char) * 255);
+       /* Fix : NULL_RETURNS */
+       if (string == NULL)
+               return NULL;
+
+       hexcolor = (r << 24) + (g << 16) + (b << 8) + a;
+       sprintf(string, "%08x", hexcolor);
+
+       return string;
+}
+
+int _bt_idle_destroy_ug(void *data)
+{
+       FN_START;
+
+       bt_ug_data *ugd = data;
+       app_control_h service = NULL;
+
+       retv_if(ugd == NULL, BT_UG_FAIL);
+
+       _bt_ug_destroy(data, (void *)service);
+
+       if (service)
+               app_control_destroy(service);
+
+       FN_END;
+       return BT_UG_ERROR_NONE;
+}
+
+static void __bt_rename_device_entry_changed_cb(void *data, Evas_Object *obj,
+                               void *event_info)
+{
+       FN_START;
+       ret_if(obj == NULL);
+       ret_if(data == NULL);
+       bt_ug_data *ugd = NULL;
+
+       ugd = (bt_ug_data *)data;
+
+       const char *entry_text = NULL;
+       char *input_str = NULL;
+
+       if (ugd->rename_entry != obj)
+               ugd->rename_entry = obj;
+       entry_text = elm_entry_entry_get(obj);
+       input_str = elm_entry_markup_to_utf8(entry_text);
+
+       if (input_str == NULL || strlen(input_str) == 0 ||
+                               _bt_util_is_space_str(input_str)) {
+               BT_DBG("");
+               elm_object_disabled_set(ugd->rename_button, EINA_TRUE);
+               elm_entry_input_panel_return_key_disabled_set(
+                               obj, EINA_TRUE);
+       } else {
+               BT_DBG("");
+               if (elm_object_disabled_get(ugd->rename_button))
+                       elm_object_disabled_set(ugd->rename_button, EINA_FALSE);
+               if (elm_entry_input_panel_return_key_disabled_get(obj))
+                       elm_entry_input_panel_return_key_disabled_set(obj, EINA_FALSE);
+       }
+       if (input_str != NULL) {
+               free(input_str);
+               input_str = NULL;
+       }
+
+       FN_END;
+}
+
+static void __bt_rename_device_cancel_cb(void *data, Evas_Object *obj,
+                               void *event_info)
+{
+       FN_START;
+       bt_ug_data *ugd = NULL;
+
+       ret_if(data == NULL);
+       ugd = (bt_ug_data *)data;
+
+       if (ugd->rename_entry) {
+               elm_entry_input_panel_hide(ugd->rename_entry);
+               elm_object_focus_set(ugd->rename_entry, EINA_FALSE);
+       }
+
+       if (ugd->rename_popup != NULL) {
+               evas_object_del(ugd->rename_popup);
+               ugd->rename_popup = NULL;
+               ugd->rename_entry_item = NULL;
+               ugd->rename_entry = NULL;
+       }
+
+       FN_END;
+}
+
+static void __bt_rename_device_ok_cb(void *data, Evas_Object *obj,
+                               void *event_info)
+{
+       FN_START;
+       bt_ug_data *ugd = (bt_ug_data *) data;
+
+       const char *entry_str = elm_entry_entry_get(ugd->rename_entry);
+       char *device_name_str = NULL;
+       device_name_str = elm_entry_markup_to_utf8(entry_str);
+       ret_if(!device_name_str);
+       BT_DBG("Device name:[%s]", device_name_str);
+
+       if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, device_name_str))
+               BT_ERR("Set vconf[%s] failed", VCONFKEY_SETAPPL_DEVICE_NAME_STR);
+
+       _bt_update_genlist_item(ugd->device_name_item);
+
+       if (ugd->rename_entry) {
+               elm_entry_input_panel_hide(ugd->rename_entry);
+               elm_object_focus_set(ugd->rename_entry, EINA_FALSE);
+       }
+
+       evas_object_del(ugd->rename_popup);
+       ugd->rename_popup = NULL;
+       ugd->rename_entry_item = NULL;
+       ugd->rename_entry = NULL;
+       g_free(device_name_str);
+
+       FN_END;
+}
+
+static void __bt_rename_entry_changed_cb(void *data, Evas_Object *obj,
+                               void *event_info)
+{
+       FN_START;
+       ret_if(!data);
+       bt_ug_data *ugd = (bt_ug_data *) data;
+       ret_if(!ugd->rename_entry_item);
+
+       if (elm_object_part_content_get(obj, "elm.icon.eraser")) {
+               if (elm_object_focus_get(obj)) {
+                       if (elm_entry_is_empty(obj)) {
+                               elm_object_item_signal_emit(ugd->rename_entry_item,
+                                       "elm,state,eraser,hide", "");
+                       } else {
+                               elm_object_item_signal_emit(ugd->rename_entry_item,
+                                       "elm,state,eraser,show", "");
+                       }
+               }
+       }
+       __bt_rename_device_entry_changed_cb(data, obj, event_info);
+
+       FN_END;
+}
+
+static void __bt_main_entry_edit_mode_show_cb(void *data, Evas *e, Evas_Object *obj,
+                               void *event_info)
+{
+       evas_object_event_callback_del(obj, EVAS_CALLBACK_SHOW,
+                                               __bt_main_entry_edit_mode_show_cb);
+
+       elm_object_focus_set(obj, EINA_TRUE);
+       elm_entry_cursor_end_set(obj);
+}
+
+static void __bt_main_popup_entry_activated_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!obj)
+               return;
+
+       elm_object_focus_set(obj, EINA_FALSE);
+}
+
+static Evas_Object *__bt_main_rename_entry_icon_get(
+                               void *data, Evas_Object *obj, const char *part)
+{
+       FN_START;
+       retv_if(obj == NULL || data == NULL, NULL);
+
+       Evas_Object *entry = NULL;
+       char *name_value = NULL;
+       char *name_value_utf = NULL;
+
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       if (!strcmp(part, "elm.swallow.content")) {
+               Evas_Object *layout = NULL;
+
+               layout = elm_layout_add(obj);
+               elm_layout_theme_set(layout, "layout", "editfield", "singleline");
+               evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 0.0);
+               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0.0);
+
+               name_value_utf = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
+               retvm_if(!name_value_utf, NULL, "Get string is failed");
+
+               name_value = elm_entry_utf8_to_markup(name_value_utf);
+
+               entry = elm_entry_add(layout);
+               elm_entry_single_line_set(entry, EINA_TRUE);
+               elm_entry_scrollable_set(entry, EINA_TRUE);
+
+               evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
+               evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0.0);
+
+               eext_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+               elm_object_signal_emit(entry, "elm,action,hide,search_icon", "");
+               elm_object_part_text_set(entry, "guide", BT_STR_DEVICE_NAME);
+               elm_object_text_set(entry, name_value);
+               elm_entry_input_panel_imdata_set(entry, "action=disable_emoticons", 24);
+
+               elm_entry_input_panel_return_key_type_set(entry, ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
+               limit_filter_data.max_char_count = DEVICE_NAME_MAX_CHARACTER;
+               elm_entry_markup_filter_append(entry,
+                       elm_entry_filter_limit_size, &limit_filter_data);
+
+               elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+               elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+               elm_entry_prediction_allow_set(entry, EINA_FALSE);
+               elm_entry_autocapital_type_set(entry, ELM_AUTOCAPITAL_TYPE_NONE);
+
+               evas_object_smart_callback_add(entry, "maxlength,reached",
+                               _bt_util_max_len_reached_cb, ugd);
+               evas_object_smart_callback_add(entry, "changed",
+                               __bt_rename_entry_changed_cb, ugd);
+               evas_object_smart_callback_add(entry, "preedit,changed",
+                               __bt_rename_entry_changed_cb, ugd);
+               evas_object_smart_callback_add(entry, "activated",
+                                               __bt_main_popup_entry_activated_cb, NULL);
+               evas_object_event_callback_add(entry, EVAS_CALLBACK_SHOW,
+                               __bt_main_entry_edit_mode_show_cb, ugd);
+
+               elm_entry_input_panel_show(entry);
+               elm_object_part_content_set(layout, "elm.swallow.content", entry);
+
+               ugd->rename_entry = entry;
+
+               if (name_value_utf)
+                       free(name_value_utf);
+               if (name_value)
+                       free(name_value);
+
+               return layout;
+       }
+
+       return NULL;
+}
+
+static char *__bt_main_searched_label_get(void *data, Evas_Object *obj,
+                                         const char *part)
+{
+       char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0 };
+       bt_dev_t *dev = NULL;
+
+       if (data == NULL)
+               return NULL;
+
+       dev = (bt_dev_t *)data;
+       if (!strcmp("elm.text", part)) {
+               char *dev_name_markup = elm_entry_utf8_to_markup(dev->name);
+
+               if (dev_name_markup) {
+                       g_strlcpy(buf, dev_name_markup,
+                                       BT_GLOBALIZATION_STR_LENGTH);
+                       free(dev_name_markup);
+               } else {
+                       g_strlcpy(buf, dev->name, BT_GLOBALIZATION_STR_LENGTH);
+               }
+
+               BT_INFO("label : %s", buf);
+       } else {
+               BT_ERR("empty text for label");
+               return NULL;
+       }
+
+       return strdup(buf);
+}
+
+static Evas_Object *__bt_main_searched_icon_get(void *data,
+                                               Evas_Object *obj,
+                                               const char *part)
+{
+       Evas_Object *icon = NULL;
+       char *dev_icon_file = NULL;
+       bt_dev_t *dev = NULL;
+
+       retv_if(data == NULL, NULL);
+
+       dev = (bt_dev_t *)data;
+
+       if (!strcmp("elm.swallow.icon", part)) {
+               dev_icon_file =
+                   _bt_main_get_device_icon(dev->major_class,
+                                            dev->minor_class,
+                                            dev->is_connected,
+                                            dev->highlighted);
+               icon = _bt_create_icon(obj, dev_icon_file);
+               if (dev->highlighted || dev->is_connected)
+                       evas_object_color_set(icon, 20, 107, 147, 255);
+               else
+                       evas_object_color_set(icon, 76, 76, 76, 255);
+               evas_object_propagate_events_set(icon, EINA_FALSE);
+       } else if (!strcmp("elm.swallow.end", part)) {
+               if (dev->status != BT_IDLE) {
+                       icon = _bt_create_progressbar(obj, "process_medium");
+                       evas_object_color_set(icon, 76, 76, 76, 255);
+               }
+       }
+
+       if (icon) {
+               evas_object_show(icon);
+               evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(40), ELM_SCALE_SIZE(40));
+       }
+
+       return icon;
+}
+
+static char *__bt_main_no_device_label_get(void *data, Evas_Object *obj,
+                                          const char *part)
+{
+       FN_START;
+
+       char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0 };
+       if (!strcmp("elm.text", part)) {
+               g_strlcpy(buf, BT_STR_NO_DEVICE_FOUND,
+                         BT_GLOBALIZATION_STR_LENGTH);
+               snprintf(buf, sizeof(buf), "<align=center>%s</align>", BT_STR_NO_DEVICE_FOUND);
+       } else {
+               BT_ERR("empty text for label");
+               return NULL;
+       }
+
+       FN_END;
+       return strdup(buf);
+}
+
+static char *__bt_main_searched_title_label_get(void *data, Evas_Object *obj,
+                                               const char *part)
+{
+       FN_START;
+
+       char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0, };
+       bt_ug_data *ugd = NULL;
+
+       retv_if(data == NULL, NULL);
+
+       ugd = (bt_ug_data *)data;
+       if (!strcmp("elm.text", part)) {
+               /* Label */
+               if (ugd->searched_device == NULL ||
+                   eina_list_count(ugd->searched_device) == 0) {
+                       if (ugd->op_status == BT_SEARCHING) {
+                               g_strlcpy(buf, BT_STR_SCANNING,
+                                         BT_GLOBALIZATION_STR_LENGTH);
+                       } else if (ugd->op_status == BT_ACTIVATED) {
+                               g_strlcpy(buf, BT_STR_BLUETOOTH_DEVICES,
+                                         BT_GLOBALIZATION_STR_LENGTH);
+                       }
+               } else {
+                       g_strlcpy(buf, BT_STR_AVAILABLE_DEVICES,
+                                 BT_GLOBALIZATION_STR_LENGTH);
+               }
+       } else {
+               return NULL;
+       }
+
+       FN_END;
+       return strdup(buf);
+}
+
+static Evas_Object *__bt_main_searched_title_icon_get(void *data, Evas_Object *obj,
+                                            const char *part)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+       Evas_Object *progressbar = NULL;
+
+       retv_if(data == NULL, NULL);
+       retv_if(obj == NULL, NULL);
+       retv_if(part == NULL, NULL);
+
+       ugd = (bt_ug_data *)data;
+
+       if (!strcmp("elm.swallow.end", part) && ugd->op_status == BT_SEARCHING)
+               progressbar = _bt_create_progressbar(obj, "process_small");
+
+       FN_END;
+       return progressbar;
+}
+
+static app_control_h __bt_main_get_bt_onoff_result(bt_ug_data *ugd,
+                                                       gboolean result)
+{
+       app_control_h service = NULL;
+       const char *result_str;
+       bt_adapter_state_e bt_state = BT_ADAPTER_DISABLED;
+
+       retv_if(ugd == NULL, NULL);
+
+       app_control_create(&service);
+
+       retv_if(service == NULL, NULL);
+
+       if (result == TRUE)
+               result_str = BT_RESULT_SUCCESS;
+       else
+               result_str = BT_RESULT_FAIL;
+
+       if (app_control_add_extra_data(service, "result", result_str) < 0)
+               BT_ERR("Fail to add extra data");
+
+       if (bt_adapter_get_state(&bt_state) == BT_ERROR_NONE) {
+               if (bt_state == BT_ADAPTER_ENABLED) {
+                       if (app_control_add_extra_data(service, "bt_status", BT_ADAPTER_ON) < 0)
+                               BT_ERR("Fail to add extra data");
+               } else {
+                       if (app_control_add_extra_data(service, "bt_status", BT_ADAPTER_OFF) < 0)
+                               BT_ERR("Fail to add extra data");
+               }
+       } else {
+               BT_ERR("Fail to bt_adapter_get_state");
+       }
+
+       return service;
+}
+
+static Eina_Bool __bt_main_quit_btn_cb(void *data, Elm_Object_Item *it)
+{
+       FN_START;
+       app_control_h reply = NULL;
+       app_control_h service = NULL;
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       retv_if(ugd == NULL, EINA_FALSE);
+
+       if (ugd->bt_launch_mode == BT_LAUNCH_PICK) {
+               app_control_create(&service);
+
+               if (service == NULL) {
+                       _bt_ug_destroy(data, NULL);
+                       return EINA_FALSE;
+               }
+
+               if (app_control_add_extra_data(service, "result",
+                                          BT_RESULT_FAIL) < 0) {
+                       BT_ERR("Fail to add extra data");
+               }
+
+               _bt_ug_destroy(data, (void *)service);
+
+               app_control_destroy(service);
+       } else if (ugd->bt_launch_mode == BT_LAUNCH_ONOFF) {
+               service = __bt_main_get_bt_onoff_result(ugd, FALSE);
+
+               app_control_create(&reply);
+               if (app_control_add_extra_data(reply, "result",
+                                                       BT_RESULT_FAIL) < 0) {
+                       BT_ERR("Fail to add extra data");
+               }
+
+               BT_DBG("BT_LAUNCH_ONOFF reply to launch request");
+               app_control_reply_to_launch_request(reply, service,
+                                               APP_CONTROL_RESULT_FAILED);
+
+               _bt_ug_destroy(data, (void *)service);
+
+               if (service)
+                       app_control_destroy(service);
+               if (reply)
+                       app_control_destroy(reply);
+       } else {
+               _bt_ug_destroy(data, NULL);
+       }
+
+       FN_END;
+       return EINA_FALSE;
+}
+
+int _bt_main_enable_bt(void *data)
+{
+       FN_START;
+       int ret;
+       retv_if(data == NULL, -1);
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       ret = bt_emulator_enable();
+       if (ret != BT_ERROR_NONE)
+               BT_ERR("Failed to enable bluetooth [%d]", ret);
+       else
+               ugd->op_status = BT_ACTIVATING;
+
+       FN_END;
+       return 0;
+}
+
+int _bt_main_disable_bt(void *data)
+{
+       FN_START;
+       int ret;
+       retv_if(data == NULL, -1);
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       ret = bt_emulator_disable();
+       if (ret != BT_ERROR_NONE) {
+               BT_ERR("Failed to disable bluetooth [%d]", ret);
+       } else {
+               ugd->op_status = BT_DEACTIVATING;
+               elm_object_disabled_set(ugd->scan_btn, EINA_TRUE);
+       }
+
+       FN_END;
+       return 0;
+}
+
+static void __bt_main_onoff_btn_cb(void *data, Evas_Object *obj,
+                                  void *event_info)
+{
+       FN_START;
+       ret_if(data == NULL);
+
+       int ret;
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       if (ugd->bt_launch_mode == BT_LAUNCH_HELP) {
+               Eina_Bool check_mode = elm_check_state_get(obj);
+               elm_check_state_set(obj, !check_mode);
+
+               ret = notification_status_message_post(BT_STR_INVALID_ACTION_TRY_AGAIN);
+               if (ret != NOTIFICATION_ERROR_NONE)
+                       BT_ERR("notification_status_message_post() is failed : %d", ret);
+
+               FN_END;
+               return;
+       }
+       ret_if(ugd->op_status == BT_ACTIVATING ||
+               ugd->op_status == BT_DEACTIVATING);
+
+       elm_object_disabled_set(ugd->onoff_btn, EINA_TRUE);
+
+       if (ugd->op_status == BT_DEACTIVATED) {
+               ret = _bt_main_enable_bt(data);
+               ugd->op_status = BT_ACTIVATING;
+       } else if (ugd->op_status != BT_DEACTIVATING &&
+               ugd->op_status != BT_ACTIVATING) {
+               ret = bt_emulator_disable();
+               if (ret != BT_ERROR_NONE) {
+                       BT_ERR("Failed to disable bluetooth [%d]", ret);
+               } else {
+                       ugd->op_status = BT_DEACTIVATING;
+                       elm_object_disabled_set(ugd->scan_btn, EINA_TRUE);
+               }
+       }
+
+       if (ugd->op_status == BT_ACTIVATING ||
+               ugd->op_status == BT_DEACTIVATING) {
+               elm_genlist_item_fields_update(ugd->onoff_item, "*",
+                                               ELM_GENLIST_ITEM_FIELD_TEXT);
+               elm_genlist_item_fields_update(ugd->onoff_item, "*",
+                                               ELM_GENLIST_ITEM_FIELD_CONTENT);
+       }
+       FN_END;
+}
+
+static void __bt_main_controlbar_btn_cb(void *data, Evas_Object *obj,
+                                       void *event_info)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+
+       retm_if(data == NULL, "Invalid argument: bt_ug_data is NULL");
+
+       ugd = (bt_ug_data *)data;
+
+       if (ugd->op_status == BT_SEARCHING) {
+               if (ugd->is_discovery_started) {
+                       if (bt_emulator_stop_device_discovery() == BT_ERROR_NONE) {
+                               elm_object_disabled_set(ugd->scan_btn, EINA_TRUE);
+                               elm_object_text_set(ugd->scan_btn, BT_STR_STOP);
+                       } else { /*the case in which stop discovery returns error from Bluez*/
+                               ugd->op_status = BT_ACTIVATED;
+                               elm_object_text_set(ugd->scan_btn, BT_STR_SCAN);
+
+                               if (ugd->searched_title == NULL)
+                                       _bt_main_add_searched_title(ugd);
+                               _bt_update_genlist_item((Elm_Object_Item *)
+                                               ugd->searched_title);
+                       }
+               }
+       } else { /*ugd->op_status != BT_SEARCHING */
+               _bt_main_scan_device(ugd);
+       }
+
+       FN_END;
+}
+
+static void __bt_main_searched_item_sel_cb(void *data, Evas_Object *obj,
+                                          void *event_info)
+{
+       FN_START;
+
+       bt_ug_data *ugd = NULL;
+       bt_dev_t *dev = NULL;
+       Elm_Object_Item *item = NULL;
+       int ret;
+
+       if (event_info)
+               elm_genlist_item_selected_set((Elm_Object_Item *) event_info,
+                                     EINA_FALSE);
+
+       retm_if(data == NULL, "Invalid argument: bt_ug_data is NULL");
+
+       ugd = (bt_ug_data *)data;
+
+       ret_if(ugd->op_status == BT_PAIRING);
+
+       item = (Elm_Object_Item *) event_info;
+
+       dev = _bt_main_get_dev_info(ugd->searched_device,
+                                   (Elm_Object_Item *) event_info);
+       retm_if(dev == NULL, "Invalid argument: device info is NULL");
+
+       ugd->searched_item = item;
+
+       if (ugd->op_status == BT_SEARCHING) {
+               ret = bt_emulator_stop_device_discovery();
+               if (ret != BT_ERROR_NONE)
+                       BT_ERR("Fail to stop discovery");
+       }
+
+       FN_END;
+}
+
+static void __bt_main_gl_highlighted(void *data, Evas_Object *obj,
+                                    void *event_info)
+{
+       FN_START;
+
+       bt_ug_data *ugd;
+       bt_dev_t *dev;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+       ret_if(item == NULL);
+
+       ugd = (bt_ug_data *)data;
+       ret_if(ugd == NULL);
+
+       dev = _bt_main_get_dev_info(ugd->searched_device, item);
+       ret_if(dev == NULL);
+
+       dev->highlighted = TRUE;
+
+       /* Update text */
+       elm_genlist_item_fields_update(item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
+
+       FN_END;
+}
+
+static void __bt_main_gl_unhighlighted(void *data, Evas_Object *obj,
+                                      void *event_info)
+{
+       FN_START;
+
+       bt_ug_data *ugd;
+       bt_dev_t *dev;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+       ret_if(item == NULL);
+
+       ugd = (bt_ug_data *)data;
+       ret_if(ugd == NULL);
+
+       dev = _bt_main_get_dev_info(ugd->searched_device, item);
+       ret_if(dev == NULL);
+
+       dev->highlighted = FALSE;
+
+       /* Update text */
+       elm_genlist_item_fields_update(item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
+
+       FN_END;
+}
+
+void _bt_main_add_device_name_item(bt_ug_data *ugd, Evas_Object *genlist)
+{
+       FN_START;
+       retm_if(ugd->op_status == BT_DEACTIVATED, "BT is turned off");
+
+       Elm_Object_Item *git = NULL;
+       /* Device name */
+       git = elm_genlist_item_insert_after(genlist, ugd->device_name_itc, ugd, NULL,
+                                       ugd->onoff_item, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       ugd->device_name_item = git;
+
+       FN_END;
+}
+
+static Evas_Object *__bt_main_add_genlist_dialogue(Evas_Object *parent,
+                                                  bt_ug_data *ugd)
+{
+       FN_START;
+       retv_if(ugd == NULL, NULL);
+
+       Evas_Object *genlist = NULL;
+       Elm_Object_Item *git = NULL;
+
+       genlist = elm_genlist_add(parent);
+       retv_if(!genlist, NULL);
+       /* We shoud set the mode to compress
+          for using dialogue/2text.2icon.3.tb */
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       elm_genlist_homogeneous_set(genlist, EINA_FALSE);
+       elm_genlist_block_count_set(genlist, 3);
+
+       evas_object_smart_callback_add(genlist, "highlighted",
+                                      __bt_main_gl_highlighted, ugd);
+
+       evas_object_smart_callback_add(genlist, "unhighlighted",
+                                      __bt_main_gl_unhighlighted, ugd);
+
+       ugd->on_itc = elm_genlist_item_class_new();
+       retv_if(ugd->on_itc == NULL, NULL);
+
+       ugd->on_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
+       ugd->on_itc->func.text_get = __bt_main_onoff_label_get;
+       ugd->on_itc->func.content_get = __bt_main_onoff_icon_get;
+       ugd->on_itc->func.state_get = NULL;
+       ugd->on_itc->func.del = NULL;
+
+       /* Set item class for dialogue seperator */
+       ugd->off_itc = elm_genlist_item_class_new();
+       retv_if(ugd->off_itc == NULL, NULL);
+
+       ugd->off_itc->item_style = BT_GENLIST_MULTILINE_TEXT_STYLE;
+       ugd->off_itc->func.text_get = __bt_main_onoff_label_get;
+       ugd->off_itc->func.content_get = __bt_main_onoff_icon_get;
+       ugd->off_itc->func.state_get = NULL;
+       ugd->off_itc->func.del = NULL;
+
+       /* Set item class for paired dialogue title */
+       ugd->device_name_itc = elm_genlist_item_class_new();
+       retv_if(ugd->device_name_itc == NULL, NULL);
+
+       ugd->device_name_itc->item_style = BT_GENLIST_2LINE_BOTTOM_TEXT_STYLE;
+       ugd->device_name_itc->func.text_get = __bt_main_device_label_get;
+       ugd->device_name_itc->func.content_get = NULL;
+       ugd->device_name_itc->func.state_get = NULL;
+       ugd->device_name_itc->func.del = NULL;
+
+       /* Set item class for searched dialogue title */
+       ugd->searched_title_itc = elm_genlist_item_class_new();
+       retv_if(ugd->searched_title_itc == NULL, NULL);
+
+       ugd->searched_title_itc->item_style = BT_GENLIST_GROUP_INDEX_STYLE;
+       ugd->searched_title_itc->func.text_get = __bt_main_searched_title_label_get;
+       ugd->searched_title_itc->func.content_get = __bt_main_searched_title_icon_get;
+       ugd->searched_title_itc->func.state_get = NULL;
+       ugd->searched_title_itc->func.del = NULL;
+
+       /* Set item class for searched device */
+       ugd->searched_device_itc = elm_genlist_item_class_new();
+       retv_if(ugd->searched_device_itc == NULL, NULL);
+
+       ugd->searched_device_itc->item_style = BT_GENLIST_1LINE_TEXT_ICON_STYLE;
+       ugd->searched_device_itc->func.text_get = __bt_main_searched_label_get;
+       ugd->searched_device_itc->func.content_get = __bt_main_searched_icon_get;
+       ugd->searched_device_itc->func.state_get = NULL;
+       ugd->searched_device_itc->func.del = NULL;
+
+       /* Set item class for no device */
+       ugd->no_device_itc = elm_genlist_item_class_new();
+       retv_if(ugd->no_device_itc == NULL, NULL);
+
+       ugd->no_device_itc->item_style = BT_GENLIST_1LINE_TEXT_STYLE;
+       ugd->no_device_itc->func.text_get = __bt_main_no_device_label_get;
+       ugd->no_device_itc->func.content_get = NULL;
+       ugd->no_device_itc->func.state_get = NULL;
+       ugd->no_device_itc->func.del = NULL;
+
+       if (ugd->op_status == BT_DEACTIVATED ||
+               ugd->op_status == BT_ACTIVATING)
+               git = elm_genlist_item_append(genlist, ugd->off_itc, ugd, NULL,
+                                                               ELM_GENLIST_ITEM_NONE,
+                                                               __bt_main_onoff_btn_cb, ugd);
+       else
+               git = elm_genlist_item_append(genlist, ugd->on_itc, ugd, NULL,
+                                                               ELM_GENLIST_ITEM_NONE,
+                                                               __bt_main_onoff_btn_cb, ugd);
+
+       ugd->onoff_item = git;
+
+       _bt_main_add_device_name_item(ugd, genlist);
+
+       evas_object_show(genlist);
+
+       FN_END;
+       return genlist;
+}
+
+static gboolean __bt_main_system_popup_timer_cb(gpointer user_data)
+{
+       FN_START;
+
+       int ret;
+       bt_ug_data *ugd;
+       bundle *b;
+
+       retv_if(user_data == NULL, FALSE);
+
+       ugd = (bt_ug_data *)user_data;
+
+       b = ugd->popup_bundle;
+
+       if (NULL == b) {
+               BT_ERR("bundle is NULL");
+               return FALSE;
+       }
+
+       ret = syspopup_launch("bt-syspopup", b);
+       if (ret < 0) {
+               BT_ERR("Sorry cannot launch popup");
+       } else {
+               BT_DBG("Finally Popup launched");
+               bundle_free(b);
+       }
+
+       FN_END;
+       return (ret < 0) ? TRUE : FALSE;
+}
+
+static bool __bt_main_get_mime_type(char *file)
+{
+       FN_START;
+
+       char mime_type[BT_FILE_NAME_LEN_MAX] = { 0, };
+       int len = strlen("image");
+
+       retv_if(file == NULL, FALSE);
+
+       if (aul_get_mime_from_file(file, mime_type,
+                                  BT_FILE_NAME_LEN_MAX) == AUL_R_OK) {
+               BT_INFO("mime type=[%s]", mime_type);
+               if (0 != strncmp(mime_type, "image", len))
+                       return FALSE;
+       } else {
+               BT_ERR("Error getting mime type");
+               return FALSE;
+       }
+
+       FN_END;
+       return TRUE;
+}
+
+static bool __bt_main_is_image_file(app_control_h service)
+{
+       FN_START;
+
+       char *value = NULL;
+       int number_of_files = 0;
+       char *token = NULL;
+       char *param = NULL;
+       int i = 0;
+
+       retvm_if(service == NULL, FALSE, "Invalid data bundle");
+
+       if (app_control_get_extra_data(service, "filecount", &value) < 0)
+               BT_ERR("Get data error");
+
+       retv_if(value == NULL, FALSE);
+
+       number_of_files = atoi(value);
+       BT_INFO("[%d] files", number_of_files);
+       free(value);
+       value = NULL;
+
+       if (number_of_files <= 0) {
+               BT_ERR("No File");
+               return FALSE;
+       }
+
+       if (app_control_get_extra_data(service, "files", &value) < 0)
+               BT_ERR("Get data error");
+
+       retv_if(value == NULL, FALSE);
+
+       param = value;
+       while (((token = strstr(param, "?")) != NULL) && i < number_of_files) {
+               *token = '\0';
+               if (!__bt_main_get_mime_type(param)) {
+                       *token = '?';
+                       free(value);
+                       return FALSE;
+               }
+               BT_INFO("File [%d] [%s]", i, param);
+               *token = '?';
+               param = token + 1;
+               i++;
+       }
+       if (i == (number_of_files - 1)) {
+               if (!__bt_main_get_mime_type(param)) {
+                       free(value);
+                       return FALSE;
+               }
+               BT_INFO("File [%d] [%s]", i, param);
+       } else {
+               BT_ERR("Count not match : [%d] / [%d]", number_of_files, i);
+               free(value);
+               return FALSE;
+       }
+
+       free(value);
+
+       FN_END;
+       return TRUE;
+}
+
+/**********************************************************************
+*                                              Common Functions
+***********************************************************************/
+
+void _bt_main_scan_device(bt_ug_data *ugd)
+{
+       FN_START;
+       int ret;
+
+       ret_if(ugd == NULL);
+
+       if (ugd->op_status != BT_DEACTIVATED && ugd->op_status != BT_ACTIVATED) {
+               BT_INFO("current bluetooth status [%d]", ugd->op_status);
+               return;
+       }
+
+       if (ugd->op_status == BT_DEACTIVATED) {
+               ret = _bt_main_enable_bt((void *)ugd);
+               if (!ret)
+                       elm_object_disabled_set(ugd->scan_btn, EINA_TRUE);
+       } else {
+               ret = bt_emulator_start_device_discovery();
+               if (!ret) {
+                       /* Disable the Scan button till the BLUETOOTH_EVENT_DISCOVERY_STARTED is received */
+                       elm_object_disabled_set(ugd->scan_btn, EINA_TRUE);
+                       _bt_main_remove_all_searched_devices(ugd);
+                       ugd->op_status = BT_SEARCHING;
+                       elm_object_text_set(ugd->scan_btn, BT_STR_STOP);
+
+                       if (ugd->searched_title == NULL)
+                               _bt_main_add_searched_title(ugd);
+               } else {
+                       BT_ERR("Operation failed : Error Cause[%d]", ret);
+               }
+       }
+
+       FN_END;
+}
+
+char *_bt_main_get_device_icon(int major_class, int minor_class,
+                              int connected, gboolean highlighted)
+{
+       char *icon = BT_ICON_UNKNOWN;
+
+       switch (major_class) {
+       case BT_MAJOR_DEV_CLS_COMPUTER:
+               icon = BT_ICON_PC;
+               break;
+       case BT_MAJOR_DEV_CLS_PHONE:
+               icon = BT_ICON_PHONE;
+               break;
+       case BT_MAJOR_DEV_CLS_AUDIO:
+               if (minor_class == BTAPP_MIN_DEV_CLS_HEADPHONES)
+                       icon = BT_ICON_HEADPHONE;
+               else if (minor_class == BTAPP_MIN_DEV_CLS_VIDEO_DISPLAY_AND_LOUD_SPEAKER)
+                       icon = BT_ICON_DISPLAY;
+               else
+                       icon = BT_ICON_HEADSET;
+               break;
+       case BT_MAJOR_DEV_CLS_LAN_ACCESS_POINT:
+               icon = BT_ICON_NETWORK;
+               break;
+       case BT_MAJOR_DEV_CLS_IMAGING:
+               if (minor_class == BTAPP_MIN_DEV_CLS_PRINTER)
+                       icon = BT_ICON_PRINTER;
+               else if (minor_class == BTAPP_MIN_DEV_CLS_CAMERA)
+                       icon = BT_ICON_CAMERA;
+               else if (minor_class == BTAPP_MIN_DEV_CLS_DISPLAY)
+                       icon = BT_ICON_DISPLAY;
+               break;
+       case BT_MAJOR_DEV_CLS_PERIPHERAL:
+               if (minor_class == BTAPP_MIN_DEV_CLS_KEY_BOARD)
+                       icon = BT_ICON_KEYBOARD;
+               else if (minor_class == BTAPP_MIN_DEV_CLS_POINTING_DEVICE)
+                       icon = BT_ICON_MOUSE;
+               else if (minor_class == BTAPP_MIN_DEV_CLS_GAME_PAD)
+                       icon = BT_ICON_GAMING;
+               else
+                       icon = BT_ICON_MOUSE;
+               break;
+       case BT_MAJOR_DEV_CLS_HEALTH:
+               icon = BT_ICON_HEALTH;
+               break;
+
+       case BT_MAJOR_DEV_CLS_WEARABLE:
+               if (minor_class == BTAPP_MIN_DEV_CLS_WRIST_WATCH)
+                       icon = BT_ICON_WATCH;
+               else
+                       icon = BT_ICON_UNKNOWN;
+               break;
+       default:
+               icon = BT_ICON_UNKNOWN;
+               break;
+       }
+
+       return icon;
+}
+
+void _bt_main_popup_del_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       FN_START;
+       retm_if(data == NULL, "Invalid argument: struct bt_appdata is NULL");
+
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       if (ugd->popup) {
+               evas_object_del(ugd->popup);
+               ugd->popup = NULL;
+       }
+       if (ugd->popup_data.data)
+               g_free(ugd->popup_data.data);
+       ugd->popup_data.data = NULL;
+
+       ugd->back_cb = NULL;
+
+       FN_END;
+}
+
+void _bt_back_btn_popup_del_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       FN_START;
+       retm_if(data == NULL, "Invalid argument: struct bt_appdata is NULL");
+
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       if (ugd->popup) {
+               BT_DBG("Deleting popup");
+               evas_object_del(ugd->popup);
+               ugd->popup = NULL;
+       }
+
+       ugd->op_status = BT_ACTIVATED;
+
+       FN_END;
+}
+
+Elm_Object_Item *_bt_main_add_searched_device(bt_ug_data *ugd, bt_dev_t *dev)
+{
+       FN_START;
+
+       Elm_Object_Item *git = NULL;
+
+       retvm_if(ugd == NULL, NULL, "Invalid argument: ugd is NULL");
+       retvm_if(dev == NULL, NULL, "Invalid argument: dev is NULL");
+
+       if (ugd->searched_title == NULL)
+               _bt_main_add_searched_title(ugd);
+
+       retvm_if(ugd->searched_title == NULL, NULL,
+                "Fail to add searched title genlist item");
+
+       /* Searched device Item */
+       if (ugd->searched_device == NULL) {
+               git =
+                   elm_genlist_item_insert_after(ugd->main_genlist,
+                                                 ugd->searched_device_itc, dev, NULL,
+                                                 ugd->searched_title,
+                                                 ELM_GENLIST_ITEM_NONE,
+                                                 __bt_main_searched_item_sel_cb,
+                                                 ugd);
+       } else {
+               bt_dev_t *item_dev = NULL;
+               Elm_Object_Item *item = NULL;
+               Elm_Object_Item *next = NULL;
+
+               item = elm_genlist_item_next_get(ugd->searched_title);
+
+               /* check the RSSI value of searched device list add arrange its order */
+               while (item != NULL) {
+                       item_dev =
+                           _bt_main_get_dev_info(ugd->searched_device, item);
+                       retv_if(item_dev == NULL, NULL);
+
+                       if (item_dev->rssi > dev->rssi) {
+                               next = elm_genlist_item_next_get(item);
+                               if (next == NULL) {
+                                       git =
+                                           elm_genlist_item_insert_after
+                                           (ugd->main_genlist,
+                                            ugd->searched_device_itc, dev, NULL, item,
+                                            ELM_GENLIST_ITEM_NONE,
+                                            __bt_main_searched_item_sel_cb,
+                                            ugd);
+                                       break;
+                               }
+                               item = next;
+                       } else {
+                               git =
+                                   elm_genlist_item_insert_before
+                                   (ugd->main_genlist, ugd->searched_device_itc, dev,
+                                    NULL, item, ELM_GENLIST_ITEM_NONE,
+                                    __bt_main_searched_item_sel_cb, ugd);
+                               break;
+                       }
+               }
+       }
+
+       dev->genlist_item = git;
+       dev->status = BT_IDLE;
+       dev->ugd = (void *)ugd;
+       dev->is_bonded = FALSE;
+
+       FN_END;
+       return git;
+}
+
+Elm_Object_Item *_bt_main_add_no_device_found(bt_ug_data *ugd)
+{
+       FN_START;
+
+       Elm_Object_Item *git = NULL;
+
+       retvm_if(ugd == NULL, NULL, "Invalid argument: ugd is NULL");
+
+       if (ugd->searched_title == NULL)
+               _bt_main_add_searched_title(ugd);
+
+       /* No device found Item */
+       git =
+           elm_genlist_item_insert_after(ugd->main_genlist, ugd->no_device_itc,
+                                       ugd, NULL, ugd->searched_title,
+                                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+       elm_genlist_item_select_mode_set(git,
+                                       ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       FN_END;
+       return git;
+}
+
+static void __bt_move_help_ctxpopup(Evas_Object *ctx, bt_ug_data *ugd)
+{
+       FN_START;
+       Evas_Coord w, h;
+       int pos = -1;
+
+       ret_if(ugd == NULL);
+       ret_if(ugd->win_main == NULL);
+
+       elm_win_screen_size_get(ugd->win_main, NULL, NULL, &w, &h);
+       pos = elm_win_rotation_get(ugd->win_main);
+       switch (pos) {
+       case 0:
+       case 180:
+       case 360:
+               evas_object_move(ctx, (w/2), h);
+               break;
+       case 90:
+       case 270:
+               evas_object_move(ctx, (h/2), w);
+               break;
+       default:
+               evas_object_move(ctx, (w/2), h);
+               break;
+       }
+       FN_END;
+}
+
+static void __bt_ctxpopup_rotate_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       FN_START;
+       bt_ug_data *ugd = NULL;
+       ret_if(data == NULL);
+       ugd = (bt_ug_data *)data;
+
+       __bt_move_help_ctxpopup(ugd->help_more_popup, ugd);
+       evas_object_show(ugd->win_main);
+
+       FN_END;
+}
+
+static void __bt_more_popup_del_cb(void *data)
+{
+       FN_START;
+       bt_ug_data *ugd = NULL;
+
+       ret_if(data == NULL);
+       ugd = (bt_ug_data *)data;
+
+       if (ugd->help_more_popup != NULL) {
+               evas_object_del(ugd->help_more_popup);
+               ugd->help_more_popup = NULL;
+       }
+
+       FN_END;
+}
+
+static void __bt_more_popup_more_cb(void *data,
+                               Evas_Object *obj, void *event_info)
+{
+       FN_START;
+       __bt_more_popup_del_cb((bt_ug_data *)data);
+       FN_END;
+}
+
+static void __bt_more_popup_back_cb(void *data,
+                               Evas_Object *obj, void *event_info)
+{
+       FN_START;
+       __bt_more_popup_del_cb((bt_ug_data *)data);
+       FN_END;
+}
+
+static void __bt_more_popup_dismiss_cb(void *data, Evas_Object *obj,
+                                               void *event)
+{
+       FN_START;
+       bt_ug_data *ugd;
+
+       ugd = (bt_ug_data *)data;
+       ret_if(ugd == NULL);
+       ret_if(ugd->help_more_popup == NULL);
+
+       evas_object_del(ugd->help_more_popup);
+       ugd->help_more_popup = NULL;
+
+       FN_END;
+}
+
+static void __bt_more_popup_delete_cb(void *data, Evas *e,
+               Evas_Object *obj,       void *event_info)
+{
+       FN_START;
+       Evas_Object *navi = (Evas_Object *)data;
+       Evas_Object *ctx = obj;
+
+       ret_if(navi == NULL);
+
+       evas_object_smart_callback_del(ctx, "dismissed",
+                       __bt_more_popup_dismiss_cb);
+       evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL,
+                       __bt_more_popup_delete_cb, navi);
+       FN_END;
+}
+
+static void __bt_more_popup_rename_device_item_sel_cb(void *data,
+                               Evas_Object *obj, void *event_inf)
+{
+       FN_START;
+       ret_if(data == NULL);
+       ret_if(event_inf == NULL);
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       if (event_inf)
+               elm_genlist_item_selected_set((Elm_Object_Item *)event_inf,
+                                               EINA_FALSE);
+
+       ret_if(ugd == NULL);
+       ret_if(ugd->help_more_popup == NULL);
+       evas_object_del(ugd->help_more_popup);
+       ugd->help_more_popup = NULL;
+       Evas_Object *popup = NULL;
+       Evas_Object *genlist = NULL;
+       Evas_Object *button = NULL;
+       Elm_Object_Item *git = NULL;
+
+
+       popup = elm_popup_add(ugd->base);
+       eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
+                       __bt_rename_device_cancel_cb, ugd);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_object_domain_translatable_part_text_set(popup,
+                                               "title,text",
+                                               PKGNAME,
+                                               "IDS_ST_HEADER_RENAME_DEVICE");
+
+       genlist = elm_genlist_add(popup);
+       evas_object_size_hint_weight_set(genlist,
+                       EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       elm_scroller_content_min_limit(genlist, EINA_FALSE, EINA_TRUE);
+
+       /* Entry genlist item */
+       ugd->rename_entry_itc = elm_genlist_item_class_new();
+       /* Fix : NULL_RETURNS */
+       if (ugd->rename_entry_itc) {
+               ugd->rename_entry_itc->item_style = BT_GENLIST_FULL_CONTENT_STYLE;
+               ugd->rename_entry_itc->func.text_get = NULL;
+               ugd->rename_entry_itc->func.content_get = __bt_main_rename_entry_icon_get;
+               ugd->rename_entry_itc->func.state_get = NULL;
+               ugd->rename_entry_itc->func.del = NULL;
+
+               ugd->rename_entry_item = elm_genlist_item_append(genlist,
+                               ugd->rename_entry_itc, ugd,
+                               NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       }
+
+       ugd->rename_desc_itc = elm_genlist_item_class_new();
+       /* Fix : NULL_RETURNS */
+       if (ugd->rename_desc_itc) {
+               ugd->rename_desc_itc->item_style = BT_GENLIST_MULTILINE_TEXT_STYLE;
+               ugd->rename_desc_itc->func.text_get = __bt_main_rename_desc_label_get;
+               ugd->rename_desc_itc->func.content_get = NULL;
+               ugd->rename_desc_itc->func.state_get = NULL;
+               ugd->rename_desc_itc->func.del = NULL;
+
+               git = elm_genlist_item_append(genlist, ugd->rename_desc_itc, NULL, NULL,
+                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       }
+       elm_genlist_item_select_mode_set(git,
+                                        ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       button = elm_button_add(popup);
+       elm_object_style_set(button, "popup");
+       elm_object_domain_translatable_text_set(button,
+                                               PKGNAME,
+                                               "IDS_BR_SK_CANCEL");
+       elm_object_part_content_set(popup, "button1", button);
+       evas_object_smart_callback_add(button, "clicked",
+                       __bt_rename_device_cancel_cb, ugd);
+
+       button = elm_button_add(popup);
+       ugd->rename_button = button;
+       elm_object_style_set(button, "popup");
+       elm_object_domain_translatable_text_set(button,
+                                               PKGNAME,
+                                               "IDS_BT_OPT_RENAME");
+       elm_object_part_content_set(popup, "button2", button);
+       evas_object_smart_callback_add(button, "clicked",
+                       __bt_rename_device_ok_cb, ugd);
+
+       evas_object_show(genlist);
+
+       elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
+       elm_object_content_set(popup, genlist);
+       evas_object_show(popup);
+
+       ugd->rename_popup = popup;
+
+       FN_END;
+
+}
+
+static void __bt_more_menu_cb(void *data,
+                               Evas_Object *obj, void *event_info)
+{
+       FN_START;
+
+       Evas_Object *more_ctxpopup = NULL;
+       bt_ug_data *ugd;
+
+       ugd = (bt_ug_data *)data;
+       ret_if(ugd == NULL);
+       ret_if(ugd->op_status == BT_ACTIVATING ||
+               ugd->op_status == BT_DEACTIVATED ||
+               ugd->op_status == BT_DEACTIVATING);
+       ret_if(ugd->bt_launch_mode != BT_LAUNCH_NORMAL);
+
+       _bt_main_popup_del_cb(ugd, NULL, NULL);
+
+       more_ctxpopup = elm_ctxpopup_add(ugd->win_main);
+       ugd->help_more_popup = more_ctxpopup;
+       eext_object_event_callback_add(more_ctxpopup,
+                       EEXT_CALLBACK_BACK, __bt_more_popup_back_cb, ugd);
+       eext_object_event_callback_add(more_ctxpopup,
+                       EEXT_CALLBACK_MORE, __bt_more_popup_more_cb, ugd);
+       elm_object_style_set(more_ctxpopup, "more/default");
+       elm_ctxpopup_auto_hide_disabled_set(more_ctxpopup, EINA_TRUE);
+
+       elm_ctxpopup_item_append(more_ctxpopup, BT_STR_RENAME_DEVICE_TITLE,
+                       NULL, __bt_more_popup_rename_device_item_sel_cb, ugd);
+
+       evas_object_smart_callback_add(more_ctxpopup, "dismissed",
+                       __bt_more_popup_dismiss_cb, ugd);
+       evas_object_event_callback_add(more_ctxpopup, EVAS_CALLBACK_DEL,
+                       __bt_more_popup_delete_cb, ugd->navi_bar);
+       evas_object_smart_callback_add(elm_object_top_widget_get(more_ctxpopup), "rotation,changed",
+                       __bt_ctxpopup_rotate_cb, ugd);
+
+       elm_ctxpopup_direction_priority_set(more_ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
+                       ELM_CTXPOPUP_DIRECTION_DOWN,
+                       ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                       ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+
+       __bt_move_help_ctxpopup(more_ctxpopup, ugd);
+       evas_object_show(more_ctxpopup);
+
+       FN_END;
+}
+
+Evas_Object * _bt_main_create_scan_button(bt_ug_data *ugd)
+{
+       Evas_Object *scan_button = NULL;
+
+       scan_button = elm_button_add(ugd->navi_bar);
+
+       /* Use "bottom" style button */
+       elm_object_style_set(scan_button, "bottom");
+
+       elm_object_text_set(scan_button, BT_STR_SCAN);
+
+       evas_object_smart_callback_add(scan_button, "clicked",
+                       __bt_main_controlbar_btn_cb, ugd);
+
+       /* Set button into "toolbar" swallow part */
+       elm_object_item_part_content_set(ugd->navi_it, "toolbar", scan_button);
+
+       return scan_button;
+}
+
+static void __bt_main_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       __bt_main_quit_btn_cb(data, NULL);
+}
+
+int _bt_main_draw_list_view(bt_ug_data *ugd)
+{
+       FN_START;
+
+       Evas_Object *navi = NULL;
+       Evas_Object *genlist = NULL;
+       Elm_Object_Item *navi_it = NULL;
+       Evas_Object *back_button = NULL;
+
+       retv_if(ugd == NULL, BT_UG_FAIL);
+
+       navi = _bt_create_naviframe(ugd->base);
+       elm_naviframe_prev_btn_auto_pushed_set(navi, EINA_FALSE);
+       ugd->navi_bar = navi;
+
+       eext_object_event_callback_add(navi, EEXT_CALLBACK_BACK,
+                                    eext_naviframe_back_cb, NULL);
+
+       if (ugd->bt_launch_mode != BT_LAUNCH_HELP)
+               eext_object_event_callback_add(navi, EEXT_CALLBACK_MORE,
+                                               __bt_more_menu_cb, ugd);
+       genlist = __bt_main_add_genlist_dialogue(navi, ugd);
+       ugd->main_genlist = genlist;
+
+       back_button = elm_button_add(navi);
+       elm_object_style_set(back_button, "naviframe/end_btn/default");
+
+       navi_it = elm_naviframe_item_push(navi, BT_STR_BLUETOOTH, back_button, NULL,
+                                         genlist, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, __bt_main_quit_btn_cb, ugd);
+       ugd->navi_it = navi_it;
+       evas_object_smart_callback_add(back_button, "clicked", __bt_main_back_cb, ugd);
+
+       if (ugd->op_status == BT_ACTIVATED)
+               ugd->scan_btn = _bt_main_create_scan_button(ugd);
+
+       FN_END;
+       return BT_UG_ERROR_NONE;
+}
+
+void _bt_main_remove_searched_device(bt_ug_data *ugd, bt_dev_t *dev)
+{
+       FN_START;
+
+       bt_dev_t *item = NULL;
+       Eina_List *l = NULL;
+       Eina_List *l_next = NULL;
+
+       ret_if(ugd == NULL);
+
+       EINA_LIST_FOREACH_SAFE(ugd->searched_device, l, l_next, item) {
+               if (item && (item == dev)) {
+                       if (dev->genlist_item) {
+                               elm_object_item_del(dev->genlist_item);
+                               dev->genlist_item = NULL;
+                       }
+                       ugd->searched_device =
+                           eina_list_remove_list(ugd->searched_device, l);
+                       _bt_util_free_device_item(item);
+               }
+       }
+
+       if (ugd->searched_device == NULL ||
+                       eina_list_count(ugd->searched_device) == 0) {
+               elm_object_item_del(ugd->searched_title);
+               ugd->searched_title = NULL;
+       }
+       FN_END;
+       return;
+}
+
+void _bt_main_remove_all_searched_devices(bt_ug_data *ugd)
+{
+       FN_START;
+
+       bt_dev_t *dev = NULL;
+       Eina_List *l = NULL;
+       Eina_List *l_next = NULL;
+       Elm_Object_Item *item;
+       Elm_Object_Item *next;
+
+       ret_if(ugd == NULL);
+
+       if (ugd->searched_title) {
+               item = elm_genlist_item_next_get(ugd->searched_title);
+               elm_object_item_del(ugd->searched_title);
+               ugd->searched_title = NULL;
+
+               while (item != NULL) {
+                       next = elm_genlist_item_next_get(item);
+                       elm_object_item_del(item);
+                       item = next;
+               }
+               ugd->no_device_item = NULL;
+       }
+
+       EINA_LIST_FOREACH_SAFE(ugd->searched_device, l, l_next, dev) {
+               ugd->searched_device =
+                   eina_list_remove_list(ugd->searched_device, l);
+               _bt_util_free_device_item(dev);
+       }
+
+       ugd->searched_device = NULL;
+
+       FN_END;
+       return;
+}
+
+void __bt_main_parse_service(bt_ug_data *ugd, app_control_h service)
+{
+       char *launch_type = NULL;
+       char *operation = NULL;
+       char *mime = NULL;
+       const char *uri = NULL;
+       const char *file_path = NULL;
+
+       ret_if(ugd == NULL);
+       ret_if(service == NULL);
+
+       if (app_control_get_operation(service, &operation) < 0)
+               BT_ERR("Get operation error");
+
+       BT_INFO("operation: %s", operation);
+
+       if (g_strcmp0(operation, BT_APPCONTROL_PICK_OPERATION) == 0) {
+               BT_DBG("Pick Operation");
+               launch_type = strdup("pick");
+       } else if (g_strcmp0(operation, BT_APPCONTROL_VISIBILITY_OPERATION) == 0 ||
+                                g_strcmp0(operation, APP_CONTROL_OPERATION_SETTING_BT_VISIBILITY) == 0) {
+               BT_DBG("Visibility Operation");
+               launch_type = strdup("visibility");
+       } else if (g_strcmp0(operation, BT_APPCONTROL_ONOFF_OPERATION) == 0 ||
+                                g_strcmp0(operation, APP_CONTROL_OPERATION_SETTING_BT_ENABLE) == 0) {
+               BT_DBG("onoff Operation");
+               launch_type = strdup("onoff");
+       } else if (g_strcmp0(operation, APP_CONTROL_OPERATION_SHARE_CONTACT) == 0) {
+               BT_DBG("Share Contact Operation");
+               launch_type = strdup("contact");
+       } else if (g_strcmp0(operation, BT_APPCONTROL_EDIT_OPERATION) == 0) {
+               BT_DBG("Edit Operation");
+               if (app_control_get_mime(service, &mime) < 0)
+                       BT_ERR("Get mime error");
+               if (g_strcmp0(mime, BT_APPCONTROL_ONOFF_MIME) == 0)
+                       launch_type = strdup("onoff");
+               else if (g_strcmp0(mime, BT_APPCONTROL_VISIBILITY_MIME) == 0)
+                       launch_type = strdup("visibility");
+       } else if (app_control_get_extra_data(service, "launch-type",
+                                         &launch_type) == APP_CONTROL_ERROR_NONE) {
+               if (g_strcmp0(launch_type, "call") != 0) {
+                       BT_DBG("launch-type : except call");
+                       if (app_control_add_extra_data(service, "type", "file") < 0)
+                               BT_ERR("Fail to add extra data");
+               } else {
+                       BT_DBG("launch-type : call");
+               }
+       } else if (app_control_get_uri(service, (char **)&uri) == APP_CONTROL_ERROR_NONE &&
+                       g_strcmp0(uri, HELP_SETUP_BLUETOOTH_URI) == 0) {
+               BT_DBG("Help mode");
+               launch_type = strdup("help");
+       }
+
+       if (launch_type) {
+               BT_INFO("Launch with launch type [%s]", launch_type);
+               _bt_util_set_value(launch_type, &ugd->search_type,
+                                  &ugd->bt_launch_mode);
+       } else {
+               BT_DBG("launch type is NULL");
+       }
+
+       if (uri)
+               free((void *)uri);
+
+       if (file_path)
+               free((void *)file_path);
+
+       if (launch_type)
+               free((void *)launch_type);
+
+       if (operation)
+               free(operation);
+
+       if (mime)
+               free(mime);
+}
+
+void _bt_main_init_status(bt_ug_data *ugd, void *data)
+{
+       FN_START;
+
+       app_control_h service = NULL;
+       bool status = false;
+       bt_adapter_state_e bt_state = BT_ADAPTER_DISABLED;
+       ret_if(ugd == NULL);
+
+       service = data;
+
+       if (service != NULL) {
+               __bt_main_parse_service(ugd, service);
+       } else {
+               ugd->search_type = MISCELLANEOUS_MAJOR_DEVICE_MASK;
+               ugd->bt_launch_mode = BT_LAUNCH_NORMAL;
+       }
+
+       if (bt_emulator_get_state(&bt_state) != BT_ERROR_NONE)
+               BT_ERR("bt_adapter_get_state() failed");
+
+       if (bt_state == BT_ADAPTER_DISABLED) {
+               ugd->op_status = BT_DEACTIVATED;
+       } else {
+               if (bt_emulator_is_discovering(&status) != BT_ERROR_NONE)
+               BT_ERR("bt_adapter_is_discovering() failed");
+
+               if (status == true)
+                       bt_emulator_stop_device_discovery();
+
+               ugd->op_status = BT_ACTIVATED;
+       }
+
+       FN_END;
+}
+
+bt_dev_t *_bt_main_create_searched_device_item(void *data)
+{
+       FN_START;
+
+       int i;
+       unsigned char bd_addr[BT_ADDRESS_LENGTH_MAX];
+       bt_dev_t *dev = NULL;
+       bt_adapter_device_discovery_info_s *dev_info = NULL;
+
+       retv_if(data == NULL, NULL);
+
+       dev_info = (bt_adapter_device_discovery_info_s *) data;
+
+       if (strlen(dev_info->remote_name) == 0)
+               return NULL;
+
+       dev = calloc(1, sizeof(bt_dev_t));
+       retv_if(dev == NULL, NULL);
+
+       strncpy(dev->name, dev_info->remote_name, DEVICE_NAME_MAX_LEN);
+
+       dev->major_class = dev_info->bt_class.major_device_class;
+       dev->minor_class = dev_info->bt_class.minor_device_class;
+       dev->service_class = dev_info->bt_class.major_service_class_mask;
+       dev->rssi = dev_info->rssi;
+
+       if (dev_info->service_uuid != NULL && dev_info->service_count > 0) {
+               dev->uuids = g_new0(char *, dev_info->service_count + 1);
+
+               for (i = 0; i < dev_info->service_count; i++)
+                       dev->uuids[i] = g_strdup(dev_info->service_uuid[i]);
+
+               dev->uuid_count = dev_info->service_count;
+       }
+
+       _bt_util_addr_string_to_addr_type(bd_addr, dev_info->remote_address);
+
+       memcpy(dev->addr_str, dev_info->remote_address, BT_ADDRESS_STR_LEN);
+
+       memcpy(dev->bd_addr, bd_addr, BT_ADDRESS_LENGTH_MAX);
+
+       BT_DBG("device name [%s]", dev->name);
+       BT_DBG("device major class [%x]", dev->major_class);
+       BT_DBG("device minor class [%x]", dev->minor_class);
+       BT_DBG("device service class [%x]", dev->service_class);
+       BT_DBG("%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", dev->bd_addr[0],
+              dev->bd_addr[1], dev->bd_addr[2], dev->bd_addr[3],
+              dev->bd_addr[4], dev->bd_addr[5]);
+
+       FN_END;
+       return dev;
+}
+static gboolean _bt_check_minor_class(unsigned int minor_class)
+{
+       switch (minor_class) {
+       case BTAPP_MIN_DEV_CLS_VIDEO_DISPLAY_AND_LOUD_SPEAKER:
+               return FALSE;
+       case BTAPP_MIN_DEV_CLS_VIDEO_CONFERENCING:
+               return FALSE;
+       case BTAPP_MIN_DEV_CLS_VIDEO_CAMERA:
+               return FALSE;
+       case BTAPP_MIN_DEV_CLS_SET_TOP_BOX:
+               return FALSE;
+       case BTAPP_MIN_DEV_CLS_VCR:
+               return FALSE;
+       case BTAPP_MIN_DEV_CLS_CAM_CORDER:
+               return FALSE;
+       default:
+               return TRUE;
+       }
+}
+
+gboolean _bt_main_is_matched_profile(unsigned int search_type,
+                                    unsigned int major_class,
+                                    unsigned int service_class,
+                                    app_control_h service,
+                                    unsigned int minor_class)
+{
+       FN_START;
+
+       bt_device_major_mask_t major_mask = BT_DEVICE_MAJOR_MASK_MISC;
+
+#ifndef TIZEN_HID
+       /* P141010-03829 : Kiran doesn't support HID device */
+       BT_DBG("Kiran doesn't support HID device");
+       retv_if(major_class == BT_MAJOR_DEV_CLS_PERIPHERAL, FALSE);
+#endif
+
+       if (search_type == 0x000000)
+               return TRUE;
+
+       BT_INFO("search_type: %x", search_type);
+       BT_INFO("service_class: %x", service_class);
+
+       /* Check the service_class */
+       if (service_class & search_type) {
+               if (search_type & OBJECT_TRANSFER_MAJOR_SERVICE_MASK &&
+                   major_class == BT_MAJOR_DEV_CLS_IMAGING) {
+                       if (__bt_main_is_image_file(service))
+                               return TRUE;
+               } else {
+                       return TRUE;
+               }
+       }
+       BT_INFO("major_class %x", major_class);
+       BT_INFO("minor_class %x", minor_class);
+       /* Check the major class */
+       switch (major_class) {
+       case BT_MAJOR_DEV_CLS_COMPUTER:
+               major_mask = BT_DEVICE_MAJOR_MASK_COMPUTER;
+               break;
+       case BT_MAJOR_DEV_CLS_PHONE:
+               major_mask = BT_DEVICE_MAJOR_MASK_PHONE;
+               break;
+       case BT_MAJOR_DEV_CLS_LAN_ACCESS_POINT:
+               major_mask = BT_DEVICE_MAJOR_MASK_LAN_ACCESS_POINT;
+               break;
+       case BT_MAJOR_DEV_CLS_AUDIO:
+               if (_bt_check_minor_class(minor_class) == TRUE)
+                       major_mask = BT_DEVICE_MAJOR_MASK_AUDIO;
+               else
+                       major_mask = BT_DEVICE_MAJOR_MASK_MISC;
+               break;
+#ifdef TIZEN_HID
+       case BT_MAJOR_DEV_CLS_PERIPHERAL:
+               major_mask = BT_DEVICE_MAJOR_MASK_PERIPHERAL;
+               break;
+#endif
+       case BT_MAJOR_DEV_CLS_IMAGING:
+               major_mask = BT_DEVICE_MAJOR_MASK_IMAGING;
+               break;
+       case BT_MAJOR_DEV_CLS_WEARABLE:
+               major_mask = BT_DEVICE_MAJOR_MASK_WEARABLE;
+               break;
+       case BT_MAJOR_DEV_CLS_TOY:
+               major_mask = BT_DEVICE_MAJOR_MASK_TOY;
+               break;
+       case BT_MAJOR_DEV_CLS_HEALTH:
+               major_mask = BT_DEVICE_MAJOR_MASK_HEALTH;
+               break;
+       default:
+               major_mask = BT_DEVICE_MAJOR_MASK_MISC;
+               break;
+       }
+
+       BT_INFO("major_mask: %x", major_mask);
+
+       if (search_type & major_mask)
+               return TRUE;
+
+       FN_END;
+       return FALSE;
+}
+
+bt_dev_t *_bt_main_get_dev_info(Eina_List *list,
+                               Elm_Object_Item *genlist_item)
+{
+       FN_START;
+
+       bt_dev_t *item = NULL;
+       Eina_List *l = NULL;
+
+       retvm_if(list == NULL, NULL, "Invalid argument: list is NULL");
+       retvm_if(genlist_item == NULL, NULL, "Invalid argument: obj is NULL");
+
+       EINA_LIST_FOREACH(list, l, item) {
+               if (item) {
+                       if (item->genlist_item == genlist_item)
+                               return item;
+               }
+       }
+
+       FN_END;
+       return NULL;
+}
+
+bt_dev_t *_bt_main_get_dev_info_by_address(Eina_List *list, char *address)
+{
+       FN_START;
+
+       bt_dev_t *item = NULL;
+       Eina_List *l = NULL;
+
+       retvm_if(list == NULL, NULL, "Invalid argument: list is NULL");
+       retvm_if(address == NULL, NULL, "Invalid argument: addr is NULL");
+
+       EINA_LIST_FOREACH(list, l, item) {
+               if (item) {
+                       if (memcmp(item->addr_str, address, BT_ADDRESS_STR_LEN)
+                           == 0)
+                               return item;
+               }
+       }
+
+       FN_END;
+       return NULL;
+}
+
+int _bt_main_check_and_update_device(Eina_List *list, char *addr, char *name)
+{
+       FN_START;
+
+       bt_dev_t *item = NULL;
+       Eina_List *l = NULL;
+
+       retv_if(list == NULL, -1);
+       retv_if(addr == NULL, -1);
+       retv_if(name == NULL, -1);
+
+       EINA_LIST_FOREACH(list, l, item) {
+               if (item) {
+                       if (memcmp(item->addr_str, addr, BT_ADDRESS_STR_LEN) ==
+                           0) {
+                               memset(item->name, 0x00,
+                                      DEVICE_NAME_MAX_LEN+1);
+                               g_strlcpy(item->name, name,
+                                         DEVICE_NAME_MAX_LEN);
+                               return 0;
+                       }
+               }
+       }
+
+       FN_END;
+
+       return -1;
+}
+
+void _bt_main_launch_syspopup(void *data, char *event_type, char *title,
+                             char *type)
+{
+       FN_START;
+
+       int ret = 0;
+       bt_ug_data *ugd = NULL;
+       bundle *b = NULL;
+
+       ret_if(event_type == NULL);
+       ret_if(type == NULL);
+
+       ugd = (bt_ug_data *)data;
+
+       b = bundle_create();
+       ret_if(b == NULL);
+
+       if (event_type)
+               bundle_add_str(b, "event-type", event_type);
+       if (title)
+               bundle_add_str(b, "title", title);
+       if (type)
+               bundle_add_str(b, "type", type);
+
+       ret = syspopup_launch("bt-syspopup", b);
+       if (0 > ret) {
+               BT_ERR("Popup launch failed...retry %d", ret);
+               ugd->popup_bundle = b;
+               ugd->popup_timer =
+                   g_timeout_add(BT_UG_SYSPOPUP_TIMEOUT_FOR_MULTIPLE_POPUPS,
+                                 (GSourceFunc) __bt_main_system_popup_timer_cb,
+                                 ugd);
+       } else {
+               bundle_free(b);
+       }
+       FN_END;
+}
+
+void _bt_main_create_information_popup(void *data, char *msg)
+{
+       FN_START;
+       ret_if(data == NULL);
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       _bt_main_popup_del_cb(data, NULL, NULL);
+
+       ugd->popup_data.type = BT_POPUP_LOW_BATTERY;
+       ugd->popup = _bt_create_popup(ugd,
+               _bt_main_popup_del_cb, ugd, 2);
+       retm_if(!ugd->popup , "fail to create popup!");
+
+       eext_object_event_callback_add(ugd->popup, EEXT_CALLBACK_BACK,
+                       _bt_main_popup_del_cb, ugd);
+
+       evas_object_show(ugd->popup);
+       FN_END;
+}
+
+void _bt_main_add_searched_title(bt_ug_data *ugd)
+{
+       FN_START;
+       Elm_Object_Item *git = NULL;
+
+       git = elm_genlist_item_append(ugd->main_genlist,
+                                       ugd->searched_title_itc,
+                                       (void *)ugd, NULL,
+                                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       if (git) {
+               elm_genlist_item_select_mode_set(git,
+                                        ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               ugd->searched_title = git;
+       } else {
+               BT_ERR("fail to append genlist item!");
+       }
+
+       FN_END;
+}
+
+void _bt_update_device_list(bt_ug_data *ugd)
+{
+       Eina_List *l = NULL;
+       bt_dev_t *dev = NULL;
+
+       ret_if(ugd == NULL);
+
+       EINA_LIST_FOREACH(ugd->searched_device, l, dev) {
+               if (dev)
+                       _bt_update_genlist_item((Elm_Object_Item *)
+                                               dev->genlist_item);
+       }
+}
diff --git a/emulator/src/ui/bt-widget.c b/emulator/src/ui/bt-widget.c
new file mode 100644 (file)
index 0000000..904fb21
--- /dev/null
@@ -0,0 +1,259 @@
+/*
+* ug-bluetooth-efl
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
+*
+* Contact: Hocheol Seo <hocheol.seo@samsung.com>
+*           GirishAshok Joshi <girish.joshi@samsung.com>
+*           DoHyun Pyun <dh79.pyun@samsung.com>
+*
+* Licensed under the Flora License, Version 1.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.tizenopensource.org/license
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include "bt-debug.h"
+#include "bt-widget.h"
+#include "bt-main-ug.h"
+#include "bt-type-define.h"
+#include "bt-string-define.h"
+
+Evas_Object *_bt_create_naviframe(Evas_Object *parent)
+{
+       FN_START;
+
+       Evas_Object *nf;
+
+       retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL");
+
+       nf = elm_naviframe_add(parent);
+       elm_object_part_content_set(parent, "elm.swallow.content", nf);
+       evas_object_show(nf);
+
+       FN_END;
+
+       return nf;
+}
+
+Evas_Object *_bt_create_icon(Evas_Object *parent, char *img)
+{
+       Evas_Object *ic;
+
+       retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL");
+       retvm_if(img == NULL, NULL, "Invalid argument: img is NULL");
+       retvm_if(strlen(img) >= BT_IMG_PATH_MAX, NULL, "image path is wrong [%s]", img);
+
+       ic = elm_image_add(parent);
+
+       elm_image_file_set(ic, BT_ICON_EDJ, img);
+       evas_object_size_hint_align_set(ic, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+/*
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL,
+                                        1, 1);
+       elm_image_resizable_set(ic, 1, 1);
+*/
+       evas_object_show(ic);
+
+       return ic;
+}
+
+Evas_Object *_bt_create_progressbar(Evas_Object *parent, const char *style)
+{
+       FN_START;
+
+       Evas_Object *progress_bar = NULL;
+
+       retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL");
+
+       progress_bar = elm_progressbar_add(parent);
+
+       if (style)
+               elm_object_style_set(progress_bar, style);
+       else
+               elm_object_style_set(progress_bar, "process_large");
+
+       elm_progressbar_horizontal_set(progress_bar, EINA_TRUE);
+       evas_object_propagate_events_set(progress_bar, EINA_FALSE);
+       evas_object_show(progress_bar);
+       elm_progressbar_pulse(progress_bar, EINA_TRUE);
+
+       FN_END;
+
+       return progress_bar;
+}
+
+void _bt_update_genlist_item(Elm_Object_Item *item)
+{
+       ret_if(!item);
+       elm_genlist_item_fields_update(item, "*",
+                                       ELM_GENLIST_ITEM_FIELD_TEXT);
+       elm_genlist_item_fields_update(item, "*",
+                                       ELM_GENLIST_ITEM_FIELD_CONTENT);
+}
+
+static Evas_Object *__bt_create_bg(Evas_Object *parent, char *style)
+{
+       FN_START;
+
+       Evas_Object *bg;
+
+       retvm_if(!parent, NULL, "Invalid argument: parent is NULL");
+
+       bg = elm_bg_add(parent);
+       retv_if(!bg, NULL);
+
+       if (style)
+               elm_object_style_set(bg, style);
+
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+                               EVAS_HINT_EXPAND);
+       evas_object_show(bg);
+
+       FN_END;
+
+       return bg;
+}
+
+Evas_Object *_bt_main_base_layout_create(Evas_Object *parent, void *data)
+{
+       FN_START;
+
+       Evas_Object *layout = NULL;
+
+       layout = elm_layout_add(parent);
+       retv_if(!layout, NULL);
+
+       elm_layout_theme_set(layout, "layout", "application", "default");
+
+       Evas_Object *bg = __bt_create_bg(layout, "default");
+       elm_object_part_content_set(layout, "elm.swallow.bg", bg);
+       evas_object_show(layout);
+
+       FN_END;
+       return layout;
+}
+
+void _bt_set_popup_text(void *data, Evas_Object *popup)
+{
+       FN_START;
+       ret_if(!data);
+       ret_if(!popup);
+       bt_ug_data *ugd = (bt_ug_data *)data;
+
+       char temp[BT_POPUP_STR_MAX_LEN] = { 0 };
+       char *markup_text = NULL;
+       char *popup_text = NULL;
+       switch (ugd->popup_data.type) {
+       case BT_POPUP_PAIRING_ERROR:
+               if (ugd->popup_data.data) {
+                       popup_text = BT_STR_UNABLE_TO_PAIR_WITH_PS;
+                       snprintf(temp, BT_POPUP_STR_MAX_LEN, popup_text, (char *)ugd->popup_data.data);
+               }
+               break;
+       case BT_POPUP_CONNECTION_ERROR:
+               if (ugd->popup_data.data) {
+                       popup_text = BT_STR_UNABLE_TO_CONNECT_TO_PS;
+                       snprintf(temp, BT_POPUP_STR_MAX_LEN, popup_text, (char *)ugd->popup_data.data);
+               }
+               break;
+       case BT_POPUP_DISCONNECT:
+               if (ugd->popup_data.data) {
+                       popup_text = BT_STR_END_CONNECTION;
+                       snprintf(temp, BT_POPUP_STR_MAX_LEN, popup_text, (char *)ugd->popup_data.data);
+               }
+               break;
+       case BT_POPUP_GET_SERVICE_LIST_ERROR:
+       case BT_POPUP_GETTING_SERVICE_LIST:
+       case BT_POPUP_ENTER_DEVICE_NAME:
+       case BT_POPUP_LOW_BATTERY:
+       default:
+               break;
+       }
+
+       markup_text = elm_entry_utf8_to_markup(temp);
+       elm_object_text_set(popup, markup_text);
+       free(markup_text);
+}
+
+Evas_Object *_bt_create_popup(void *data, void *cb,
+                                       void *cb_data, int timer_val)
+{
+       FN_START;
+       retvm_if(!data, NULL, "Invalid argument: ugd is NULL");
+       bt_ug_data *ugd = (bt_ug_data *)data;
+       retvm_if(!ugd->win_main, NULL, "Invalid argument: win_main is NULL");
+
+       Evas_Object *popup = NULL;
+
+       popup = elm_popup_add(ugd->win_main);
+       retvm_if(!popup, NULL, "fail to create popup");
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
+       /* Set title text */
+       switch (ugd->popup_data.type) {
+       case BT_POPUP_PAIRING_ERROR:
+       case BT_POPUP_GET_SERVICE_LIST_ERROR:
+       case BT_POPUP_CONNECTION_ERROR:
+       case BT_POPUP_ENTER_DEVICE_NAME:
+       case BT_POPUP_LOW_BATTERY:
+               elm_object_domain_translatable_part_text_set(
+                       popup, "title,text",
+                       PKGNAME, "IDS_BT_HEADER_BLUETOOTH_ERROR_ABB");
+               break;
+
+       case BT_POPUP_GETTING_SERVICE_LIST:
+               elm_object_domain_translatable_part_text_set(
+                       popup, "title,text",
+                       PKGNAME, "IDS_BT_HEADER_BLUETOOTH");
+               break;
+       case BT_POPUP_DISCONNECT:
+               elm_object_domain_translatable_part_text_set(
+                       popup, "title,text",
+                       PKGNAME, "IDS_BT_HEADER_DISCONNECT_DEVICE_ABB");
+               break;
+       }
+
+       /* Set content text */
+       if (ugd->popup_data.type == BT_POPUP_GET_SERVICE_LIST_ERROR)
+               elm_object_domain_translatable_text_set(
+                       ugd->popup, PKGNAME,
+                       "IDS_BT_POP_UNABLE_TO_GET_SERVICE_LIST");
+       else if (ugd->popup_data.type == BT_POPUP_GETTING_SERVICE_LIST)
+               elm_object_domain_translatable_text_set(
+                       ugd->popup, PKGNAME,
+                       "IDS_BT_POP_GETTINGSERVICELIST");
+       else if (ugd->popup_data.type == BT_POPUP_ENTER_DEVICE_NAME)
+               elm_object_domain_translatable_text_set(
+                       ugd->popup, PKGNAME,
+                       "IDS_ST_POP_ENTER_DEVICE_NAME");
+       else if (ugd->popup_data.type == BT_POPUP_LOW_BATTERY)
+               elm_object_domain_translatable_text_set(
+                       ugd->popup, PKGNAME,
+                       "IDS_ST_BODY_LEDOT_LOW_BATTERY");
+       else
+               _bt_set_popup_text(ugd, popup);
+
+       /* Set callback */
+       if (cb != NULL)
+               evas_object_smart_callback_add(popup, "block,clicked",
+                                              (Evas_Smart_Cb) cb, cb_data);
+
+       /* Set timer value */
+       if (timer_val != 0)
+               elm_popup_timeout_set(popup, (double)timer_val);
+
+       FN_END;
+       return popup;
+}
index faedb52..08b4529 100644 (file)
@@ -4,7 +4,7 @@
 
 Name:       ug-bluetooth-efl
 Summary:    UI gadget about the bluetooth
-Version:    0.4.0
+Version:    0.5.0
 Release:    1
 Group:      TO_BE/FILLED_IN
 License:    Flora-1.1
@@ -65,6 +65,12 @@ export CFLAGS="$CFLAGS -DTIZEN_HID"
 export CFLAGS="$CFLAGS -DTIZEN_HID -DTIZEN_COMMON"
 %endif
 
+%if "%{?_with_emulator}" == "1"
+export CFLAGS="$CFLAGS -DTIZEN_TEST_EMUL"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_TEST_EMUL"
+export FFLAGS="$FFLAGS -DTIZEN_TEST_EMUL"
+%endif
+
 export LDFLAGS
 
 %cmake \