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)
--- /dev/null
+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")
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,
--- /dev/null
+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")
--- /dev/null
+/*
+* 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 */
--- /dev/null
+/*
+* 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 */
--- /dev/null
+/*
+* 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__ */
--- /dev/null
+/*
+* 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_*/
+
--- /dev/null
+/*
+* 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__ */
--- /dev/null
+/*
+* 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__ */
--- /dev/null
+/*
+* 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 */
--- /dev/null
+/*
+* 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__ */
--- /dev/null
+/*
+* 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__ */
--- /dev/null
+/*
+* 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__ */
--- /dev/null
+/*
+* 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__ */
--- /dev/null
+/*
+* 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");
+
+}
--- /dev/null
+/*
+* 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;
+}
+
--- /dev/null
+/*
+* 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;
+}
+
--- /dev/null
+/*
+* 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;
+}
+
--- /dev/null
+/*
+* 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;
+}
--- /dev/null
+/*
+* 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);
+ }
+}
--- /dev/null
+/*
+* 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;
+}
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
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 \