From e8e98bb851fc7ecc23c4e97eab83ea0e90192522 Mon Sep 17 00:00:00 2001 From: Kwangyoun Kim Date: Fri, 24 Mar 2017 11:31:56 +0900 Subject: [PATCH 01/16] Add widget type check for support list Change-Id: I5190bf60207d5e0c82c22856d36901d094261d6f --- src/vc_elm_core.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/vc_elm_core.c b/src/vc_elm_core.c index a303273..3c32ce7 100644 --- a/src/vc_elm_core.c +++ b/src/vc_elm_core.c @@ -1282,7 +1282,17 @@ static int __vc_add_commands_for_automode_vt_auto() char *widget_type = NULL; widget_type = elm_widget_type_get((Evas_Object*)grand->address); - VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", elm_widget_type_get((Evas_Object*)info->address), elm_widget_type_get((Evas_Object*)parent->address), elm_widget_type_get((Evas_Object*)grand->address)); + while (NULL == widget_type) { + grand = ea_object_dump_parent_widget_data_get(grand); + if (NULL == grand) { + break; + } + widget_type = elm_widget_type_get((Evas_Object*)grand->address); + } + + VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", elm_widget_type_get((Evas_Object*)info->address), elm_widget_type_get((Evas_Object*)parent->address), widget_type); + // VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", evas_object_type_get((Evas_Object*)info->address), evas_object_type_get((Evas_Object*)parent->address), evas_object_type_get((Evas_Object*)grand->address)); + if (NULL != widget_type && (!strcmp(widget_type, "Elm_Genlist") || !strcmp(widget_type, "Elm_Gengrid") || !strcmp(widget_type, "Elm_List"))) { int x = info->geometry_info.x; int y = info->geometry_info.y; -- 2.7.4 From d9d8cc63f7a660eda9579afdc35a1cc8445635ce Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Wed, 17 May 2017 18:41:24 +0900 Subject: [PATCH 02/16] Remove appcore-efl for resolving cyclic dependency Change-Id: Ia48aeaf1012f48e92bc26ff49abfc56b445e8bb7 Signed-off-by: sooyeon.kim --- packaging/voice-control-elm.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/voice-control-elm.spec b/packaging/voice-control-elm.spec index 285c3ea..f9c5aeb 100644 --- a/packaging/voice-control-elm.spec +++ b/packaging/voice-control-elm.spec @@ -10,7 +10,7 @@ Source1001: %{name}.manifest Source1002: %{name}-devel.manifest BuildRequires: cmake BuildRequires: edje-tools -BuildRequires: pkgconfig(appcore-efl) +#BuildRequires: pkgconfig(appcore-efl) BuildRequires: pkgconfig(capi-base-common) BuildRequires: pkgconfig(capi-system-info) BuildRequires: pkgconfig(cynara-client) -- 2.7.4 From 141dd383a51391155b753da85a646ce73c722f96 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Fri, 26 May 2017 10:27:22 +0900 Subject: [PATCH 03/16] Move .so file to devel package Change-Id: I5407f039cbac6130bd08f25c159656c6f049cba5 Signed-off-by: Suyeon Hwang --- packaging/voice-control-elm.spec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packaging/voice-control-elm.spec b/packaging/voice-control-elm.spec index f9c5aeb..c94c824 100644 --- a/packaging/voice-control-elm.spec +++ b/packaging/voice-control-elm.spec @@ -10,7 +10,6 @@ Source1001: %{name}.manifest Source1002: %{name}-devel.manifest BuildRequires: cmake BuildRequires: edje-tools -#BuildRequires: pkgconfig(appcore-efl) BuildRequires: pkgconfig(capi-base-common) BuildRequires: pkgconfig(capi-system-info) BuildRequires: pkgconfig(cynara-client) @@ -88,7 +87,6 @@ mkdir -p %{TZ_SYS_RO_SHARE}/voice %manifest %{name}.manifest %attr(644,root,root) %defattr(-,root,root,-) -%{_libdir}/*.so %{_libdir}/*.so.* %{_datadir}/* %{TZ_SYS_RO_SHARE}/locale/* @@ -96,6 +94,7 @@ mkdir -p %{TZ_SYS_RO_SHARE}/voice %files devel %manifest %{name}-devel.manifest +%{_libdir}/*.so %{_includedir}/voice_control_elm.h %{_includedir}/voice_control_elm_private.h %{_libdir}/pkgconfig/%{name}.pc -- 2.7.4 From b77449b33b138f83d698a6986fa53ef53e5326fd Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Mon, 29 May 2017 18:40:46 +0900 Subject: [PATCH 04/16] Add vconf changed callback and Fix warning Change-Id: I416ca7e72cd1d7116f80abc6bf05dd631f984302 Signed-off-by: sooyeon.kim --- include/voice_control_elm_private.h | 2 +- src/vc_elm.c | 88 ++++++++++++++++++------------------- src/vc_elm_core.c | 17 ++++--- src/vc_elm_core_default_widgets.c | 10 ++--- src/vc_elm_efl_dump.c | 12 ++--- 5 files changed, 64 insertions(+), 65 deletions(-) diff --git a/include/voice_control_elm_private.h b/include/voice_control_elm_private.h index e8e1287..e9d680a 100644 --- a/include/voice_control_elm_private.h +++ b/include/voice_control_elm_private.h @@ -116,7 +116,7 @@ int vc_elm_unset_click_time(); * @brief Function that check whether voice touch is set as auto mode or not * @param[out] is_vt_automode a parameter for checking whether voice touch is set as auto mode or not */ -int vc_elm_is_supported_vt_auto(bool* is_vt_automode); +int vc_elm_is_supported_vt_auto(int* is_vt_automode); #ifdef __cplusplus } diff --git a/src/vc_elm.c b/src/vc_elm.c index 19fd3ec..12ba992 100644 --- a/src/vc_elm.c +++ b/src/vc_elm.c @@ -44,6 +44,11 @@ static unsigned is_vc_elm_initialized = false; /** +* @brief An internal variable for checking whether voice touch's auto mode is ON or not. +*/ +static int g_is_vt_automode = 0; + +/** * @brief App domain name of the current app. */ static char *g_app_domain = NULL; @@ -109,7 +114,7 @@ static int __check_privilege_initialize() int ret = cynara_initialize(&p_cynara, NULL); if (CYNARA_API_SUCCESS != ret) VC_ELM_LOG_ERR("[ERROR] fail to initialize"); - + return ret == CYNARA_API_SUCCESS; } @@ -172,7 +177,17 @@ static int __vc_elm_check_privilege() } g_privilege_allowed = 1; - return VC_ELM_ERROR_NONE; + return VC_ELM_ERROR_NONE; +} + +void __vc_config_vtauto_changed_cb(keynode_t *key, void *data) +{ + int ret = vconf_get_bool(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE, &g_is_vt_automode); + if (0 != ret) { + VC_ELM_LOG_ERR("Fail to get vconfkey(%s), current voice touch mode(%d)", key, g_is_vt_automode); + } + + return; } int vc_elm_initialize() @@ -196,6 +211,11 @@ int vc_elm_initialize() is_vc_elm_initialized = true; + /* Initialize voice touch's automode and Register to detect voice touch automode change */ + vconf_get_bool(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE, &g_is_vt_automode); + + vconf_notify_key_changed(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE, __vc_config_vtauto_changed_cb, NULL); + VC_ELM_LOG_DBG("vc elm is initialized"); return VC_ELM_ERROR_NONE; } @@ -223,10 +243,14 @@ int vc_elm_deinitialize() eina_list_free(g_handlers_list); } + vconf_ignore_key_changed(VCONFKEY_VC_VOICE_TOUCH_AUTOMODE, __vc_config_vtauto_changed_cb); + _vc_elm_core_fini(); - if (NULL != g_app_domain) + if (NULL != g_app_domain) { free(g_app_domain); + g_app_domain = NULL; + } is_vc_elm_initialized = false; VC_ELM_LOG_DBG("shutting down vc_elm"); @@ -938,32 +962,16 @@ int _vc_elm_get_text_domain(char **domain) return VC_ELM_ERROR_NONE; } -int _vc_elm_is_supported_vt_auto(bool* is_vt_automode) +int vc_elm_is_supported_vt_auto(int* is_vt_automode) { if (0 != __vc_elm_get_feature_enabled()) { return VC_ELM_ERROR_NOT_SUPPORTED; } - int ret = -1; - ret = vconf_get_bool(VC_VOICE_TOUCH_AUTOMODE, is_vt_automode); - - if (0 != ret) { - VC_ELM_LOG_DBG("Fail to get vconfkey"); - return VC_ELM_ERROR_OPERATION_FAILED; - } - - VC_ELM_LOG_DBG("Success to get vconfkey(%d)", (int)(*is_vt_automode)); - - return ret; -} - -int vc_elm_is_supported_vt_auto(bool* is_vt_automode) -{ - if (0 != __vc_elm_get_feature_enabled()) { - return VC_ELM_ERROR_NOT_SUPPORTED; - } + *is_vt_automode = g_is_vt_automode; + VC_ELM_LOG_DBG("Success to get vconfkey(%d)", *is_vt_automode); - return _vc_elm_is_supported_vt_auto(is_vt_automode); + return VC_ELM_ERROR_NONE; } int _vc_elm_set_auto_register_mode(int mode, int click_method) @@ -978,19 +986,14 @@ int _vc_elm_set_auto_register_mode(int mode, int click_method) int _vc_elm_get_auto_register_mode(int* mode, int* click_method) { - bool is_vt_auto; - if (0 != _vc_elm_is_supported_vt_auto(&is_vt_auto)) { - return VC_ELM_ERROR_OPERATION_FAILED; + if (0 == g_is_vt_automode) { + VC_ELM_LOG_DBG("vt_automode is FALSE"); + *mode = g_auto_mode; + *click_method = g_click_method; } else { - if (false == is_vt_auto) { - VC_ELM_LOG_DBG("vt_automode is FALSE"); - *mode = g_auto_mode; - *click_method = g_click_method; - } else { - VC_ELM_LOG_DBG("vt_automode is TRUE"); - *mode = (int)VC_ELM_MODE_AUTO_APPFW; - *click_method = g_click_method; - } + VC_ELM_LOG_DBG("vt_automode is TRUE"); + *mode = (int)VC_ELM_MODE_AUTO_APPFW; + *click_method = g_click_method; } VC_ELM_LOG_DBG("mode: %d, click_method: %d", *mode, *click_method); @@ -1004,17 +1007,12 @@ int vc_elm_set_auto_register_mode(int mode, int click_method) return VC_ELM_ERROR_NOT_SUPPORTED; } - bool is_vt_auto; - if (0 != _vc_elm_is_supported_vt_auto(&is_vt_auto)) { - return VC_ELM_ERROR_OPERATION_FAILED; + if (0 == g_is_vt_automode) { + VC_ELM_LOG_DBG("vt_automode is FALSE"); + return _vc_elm_set_auto_register_mode(mode, click_method); } else { - if (false == is_vt_auto) { - VC_ELM_LOG_DBG("vt_automode is FALSE"); - return _vc_elm_set_auto_register_mode(mode, click_method); - } else { - VC_ELM_LOG_DBG("vt_automode is TRUE"); - return _vc_elm_set_auto_register_mode((int)VC_ELM_MODE_AUTO_APPFW, click_method); - } + VC_ELM_LOG_DBG("vt_automode is TRUE"); + return _vc_elm_set_auto_register_mode((int)VC_ELM_MODE_AUTO_APPFW, click_method); } return _vc_elm_set_auto_register_mode(mode, click_method); diff --git a/src/vc_elm_core.c b/src/vc_elm_core.c index 3c32ce7..d0cab60 100644 --- a/src/vc_elm_core.c +++ b/src/vc_elm_core.c @@ -299,7 +299,7 @@ static Eina_Bool _vc_elm_click_matched_object(const char* cmd, int click_method) while (NULL != parent_info) { if (EINA_TRUE == parent_info->focusable) { VC_ELM_LOG_DBG("Focusable Parent"); - char* widget_type = elm_widget_type_get((Evas_Object*)(parent_info->address)); + const char* widget_type = elm_widget_type_get((const Evas_Object*)(parent_info->address)); VC_ELM_LOG_DBG("type (%s)", widget_type); Elm_Object_Item* item = NULL; if (NULL != widget_type && !strcmp(widget_type, "Elm_Genlist")) { @@ -411,7 +411,7 @@ static Eina_Bool _vc_elm_click_matched_object_vt_auto(const char* cmd, int click while (NULL != parent_info) { if (EINA_TRUE == parent_info->focusable) { VC_ELM_LOG_DBG("Focusable Parent"); - const char* widget_type = elm_widget_type_get((Evas_Object*)(parent_info->address)); + const char* widget_type = elm_widget_type_get((const Evas_Object*)(parent_info->address)); VC_ELM_LOG_DBG("type (%s)", widget_type); Elm_Object_Item* item = NULL; if (NULL != widget_type && !strcmp(widget_type, "Elm_Genlist")) { @@ -503,7 +503,7 @@ Eina_Bool _recognize_command(const char *cmd, const char *param1, const char *pa } VC_ELM_LOG_DBG("command(%s)", temp); - char* action = NULL; + const char* action = NULL; if (strlen(cmd) > strlen(temp)) { action = &cmd[strlen(temp) + 1]; VC_ELM_LOG_DBG("action(%s)", &cmd[strlen(temp) + 1]); @@ -727,7 +727,7 @@ static Eina_List *__get_objects_of_visible_items(Evas_Object *parent, Elm_Object } evas_object_geometry_get(obj, &x_1, &y_1, &w_1, &h_1); - name = elm_widget_type_get(obj); + name = elm_widget_type_get((const Evas_Object *)obj); if (NULL != name && NULL == eina_hash_find(registered_item_map, name) && NULL != eina_hash_find(g_config_widget_map, name)) { Eina_List *list2 = eina_hash_find(g_config_widget_map, name); VC_ELM_LOG_DBG("CORE LIST action size %u", eina_list_count(list2)); @@ -1280,14 +1280,14 @@ static int __vc_add_commands_for_automode_vt_auto() Object_Info* parent = ea_object_dump_parent_widget_data_get(info); Object_Info* grand = ea_object_dump_parent_widget_data_get(parent); - char *widget_type = NULL; - widget_type = elm_widget_type_get((Evas_Object*)grand->address); + const char *widget_type = NULL; + widget_type = elm_widget_type_get((const Evas_Object*)grand->address); while (NULL == widget_type) { grand = ea_object_dump_parent_widget_data_get(grand); if (NULL == grand) { break; } - widget_type = elm_widget_type_get((Evas_Object*)grand->address); + widget_type = elm_widget_type_get((const Evas_Object*)grand->address); } VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", elm_widget_type_get((Evas_Object*)info->address), elm_widget_type_get((Evas_Object*)parent->address), widget_type); @@ -2094,7 +2094,7 @@ static Eina_Bool __idle_enter(void *data) VC_ELM_LOG_DBG("Focused g_default %ud", elm_win_xwindow_get(g_default_window)); if (!is_focused) { /* window changed, we need to get new one */ - int count = eina_list_count(ui_objects_list); + unsigned int count = eina_list_count(ui_objects_list); VC_ELM_LOG_DBG("list count %d", count); if (0 == count) { /* TODO - get window object */ @@ -2102,7 +2102,6 @@ static Eina_Bool __idle_enter(void *data) Ecore_Evas *ee = NULL; Evas *evas = NULL; Eina_List *objs = NULL; - Evas_Object *obj = NULL; Evas_Object *window = NULL; EINA_LIST_FREE(ecore_evas_list, ee) { evas = ecore_evas_get(ee); diff --git a/src/vc_elm_core_default_widgets.c b/src/vc_elm_core_default_widgets.c index 73ed5c2..bdd95b0 100644 --- a/src/vc_elm_core_default_widgets.c +++ b/src/vc_elm_core_default_widgets.c @@ -206,7 +206,7 @@ static void __vc_elm_click_by_focus(Evas_Object *obj) { VC_ELM_LOG_DBG("obj(%p)", (void*)obj); - if (NULL != elm_widget_type_get(obj)) { + if (NULL != elm_widget_type_get((const Evas_Object *)obj)) { if (EINA_TRUE == elm_object_focus_get(obj)) { VC_ELM_LOG_DBG("Already focused"); ecore_timer_add(g_click_time, __click_event, NULL); @@ -233,7 +233,7 @@ static void __vc_elm_click_by_focus(Evas_Object *obj) } } -static void __emulate_click(const Evas_Object *obj) +static void __emulate_click(Evas_Object *obj) { int auto_mode = 0; int click_method = 0; @@ -694,7 +694,7 @@ static void __set_tooltips_position_on_visible_items(Evas_Object *parent, Elm_Ob evas_object_geometry_get(obj, &x_1, &y_1, &w_1, &h_1); if (x_1 + (w_1 / 2) >= x && y_1 + (h_1 / 2) >= y && (x_1 + (w_1 / 2)) <= (x + w) && (y_1 + (h_1 / 2)) <= (y + h)) { - const char *name = elm_widget_type_get(obj); + const char *name = elm_widget_type_get((const Evas_Object *)obj); if (name == NULL) { char *item_string = NULL; if (NULL != (item_string = evas_object_data_get(obj, VC_ELM_HINT_DATA_KEY))) @@ -1037,7 +1037,7 @@ static void __sub_layout_inspect(Eina_List *ret, Evas_Object *widget) (void)widget; EINA_LIST_FOREACH(list, l, obj) { - const char *type = elm_widget_type_get(obj); + const char *type = elm_widget_type_get((const Evas_Object *)obj); if (type && !strcmp(type, "Elm_Layout")) { evas_object_data_set(obj, VC_ELM_COLORSELECTOR_PARENT, widget); evas_object_data_set(obj, _vc_elm_get_custom_widget_name(), "Elm_Button"); @@ -1341,7 +1341,7 @@ static Eina_List *__entry_get_subwidgets(const Evas_Object *entry, void *user_da list = elm_widget_can_focus_child_list_get(entry); EINA_LIST_FOREACH(list, l, obj) { - const char *type = elm_widget_type_get(obj); + const char *type = elm_widget_type_get((const Evas_Object *)obj); const char *part = elm_object_part_text_get(obj, "mbe.label"); if (part) continue; diff --git a/src/vc_elm_efl_dump.c b/src/vc_elm_efl_dump.c index 8cdfc20..04604f1 100644 --- a/src/vc_elm_efl_dump.c +++ b/src/vc_elm_efl_dump.c @@ -23,6 +23,8 @@ #include "vc_elm_tools.h" #include "vc_elm_efl_dump.h" +#include + #define EVAS_OBJECT_DUMP_DEBUG #ifdef EVAS_OBJECT_DUMP_DEBUG #define VC_ELM_LOG_DUMP(fmt, ...) SLOGD("\033[0;32m" fmt "\033[m", ## __VA_ARGS__) @@ -60,9 +62,9 @@ static int g_geo_x = 0, g_geo_y = 0, g_geo_w = 0, g_geo_h = 0; static int find_popup = 0; static int skip_text = 0; -bool vc_elm_efl_dump_is_vt_auto_enabled() +int vc_elm_efl_dump_is_vt_auto_enabled() { - bool is_vt_automode = false; + int is_vt_automode = 0; int ret = vc_elm_is_supported_vt_auto(&is_vt_automode); if (0 != ret) { VC_ELM_LOG_DUMP("Fail to check vt auto mode"); @@ -341,7 +343,7 @@ static Eina_Bool _is_descendant_of_list(Object_Info *object_info) { Object_Info* parent_info = ea_object_dump_parent_widget_data_get(object_info); while (NULL != parent_info) { - const char* widget_type = elm_widget_type_get((Evas_Object*)(parent_info->address)); + const char* widget_type = elm_widget_type_get((const Evas_Object*)(parent_info->address)); if (NULL != widget_type) { VC_ELM_LOG_DUMP("[DEBUG] object_type(%s), widget_type(%s)", evas_object_type_get((Evas_Object*)(parent_info->address)), widget_type); if (!strcmp(widget_type, "Elm_Genlist") || !strcmp(widget_type, "Elm_Gengrid") || !strcmp(widget_type, "Elm_List") || !strcmp(widget_type, "Elm_Ctxpopup") || !strcmp(widget_type, "Elm_Index")) @@ -356,7 +358,7 @@ static Eina_Bool _is_descendant_of_toolbar(Object_Info *object_info) { Object_Info* parent_info = ea_object_dump_parent_widget_data_get(object_info); while (NULL != parent_info) { - const char* widget_type = elm_widget_type_get((Evas_Object*)(parent_info->address)); + const char* widget_type = elm_widget_type_get((const Evas_Object*)(parent_info->address)); if (NULL != widget_type) { VC_ELM_LOG_DUMP("[DEBUG] object_type(%s), widget_type(%s)", evas_object_type_get((Evas_Object*)(parent_info->address)), widget_type); if (!strcmp(widget_type, "Elm_Toolbar")) @@ -535,7 +537,7 @@ _obj_tree_items_exclude_unfocusable_text(Ea_Util_Mgr *util_mgr, Evas_Object *obj } text = NULL; - if (false == vc_elm_efl_dump_is_vt_auto_enabled()) { + if (0 == vc_elm_efl_dump_is_vt_auto_enabled()) { if (!strcmp(evas_object_type_get(obj), "text")) text = eina_stringshare_add(evas_object_text_text_get(obj)); else if (!strcmp(evas_object_type_get(obj), "textblock")) { -- 2.7.4 From da9bfe306c042f201c8cafb0fc8a1f6f6e2fb98f Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Thu, 13 Jul 2017 15:20:13 +0900 Subject: [PATCH 05/16] Fix dlog level Change-Id: Ic55607abd7db392396a4bb47610747e998a3ea16 Signed-off-by: sooyeon.kim --- src/vc_elm_tools.h | 2 +- src/vc_elm_widget_wrapper.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/vc_elm_tools.h b/src/vc_elm_tools.h index 7fa360a..68ff5a4 100644 --- a/src/vc_elm_tools.h +++ b/src/vc_elm_tools.h @@ -28,7 +28,7 @@ extern "C" { #define LOG_TAG "VC_ELM" -#define VC_ELM_LOG_DBG(fmt, ...) SLOGI("\033[0;32m" fmt "\033[m", ## __VA_ARGS__) +#define VC_ELM_LOG_DBG(fmt, ...) SLOGD("\033[0;32m" fmt "\033[m", ## __VA_ARGS__) #define VC_ELM_LOG_INFO(fmt, ...) SLOGI("\033[0;32m" fmt "\033[m", ## __VA_ARGS__) #define VC_ELM_LOG_ERR(fmt, ...) SLOGE("\033[0;32m" fmt "\033[m", ## __VA_ARGS__) #define VC_ELM_LOG_WARN(fmt, ...) SLOGW("\033[0;32m" fmt "\033[m", ## __VA_ARGS__) diff --git a/src/vc_elm_widget_wrapper.c b/src/vc_elm_widget_wrapper.c index 26258ce..a8f828c 100644 --- a/src/vc_elm_widget_wrapper.c +++ b/src/vc_elm_widget_wrapper.c @@ -68,7 +68,6 @@ static void __vc_language_changed_cb(const char *previous, const char *current, VC_CMD_ERROR_CHECK_CASE(VC_ERROR_ITERATION_END); \ VC_CMD_ERROR_CHECK_CASE(VC_ERROR_EMPTY); \ case VC_ERROR_NONE: \ - VC_ELM_LOG_DBG("NO error in (%s)", msg); \ break; \ default: \ VC_ELM_LOG_ERR("Unkown error in (%s)", msg); \ @@ -447,4 +446,4 @@ int _vc_elm_widget_wrapper_get_current_language(char** language) VC_ELM_LOG_ERR("[ERROR] Fail to get current language(%d)", ret); } return ret; -} \ No newline at end of file +} -- 2.7.4 From 2c9245c3e53836c8893bd372ca7bc1f35f4ad605 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Mon, 24 Jul 2017 13:00:38 +0900 Subject: [PATCH 06/16] Fix error level Change-Id: I2c1b8ef8a2286911bcb27a5b5b2bf890680fd3bc Signed-off-by: sooyeon.kim --- src/vc_elm_core.c | 20 +++++++------------- src/vc_elm_tooltip.c | 2 +- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/vc_elm_core.c b/src/vc_elm_core.c index d0cab60..b23aec2 100644 --- a/src/vc_elm_core.c +++ b/src/vc_elm_core.c @@ -225,7 +225,7 @@ static Eina_Bool __click_event(void *data) efl_util_input_deinitialize_generator(input_h); } - VC_ELM_LOG_INFO("click!!!!!"); + VC_ELM_LOG_INFO("clicked"); return EINA_FALSE; } @@ -273,7 +273,7 @@ static Eina_Bool _vc_elm_click_matched_object(const char* cmd, int click_method) evas_event_feed_mouse_move(evas_object_evas_get((Evas_Object*)(info->address)), x + w/2, y + h/2, 0, NULL); evas_event_feed_mouse_down(evas_object_evas_get((Evas_Object*)(info->address)), 1, EVAS_BUTTON_NONE, 1, NULL); evas_event_feed_mouse_up(evas_object_evas_get((Evas_Object*)(info->address)), 1, EVAS_BUTTON_NONE, 2, NULL); - VC_ELM_LOG_INFO("click!!!!!"); + VC_ELM_LOG_INFO("clicked"); } else if (1 == click_method) { VC_ELM_LOG_DBG("click method - focus/key"); bool clicked = false; @@ -530,13 +530,6 @@ Eina_Bool _recognize_command(const char *cmd, const char *param1, const char *pa } return ret; } - - if (NULL != g_dump_list) { - ea_object_dump_list_clear(); - g_dump_list = NULL; - } - - return EINA_FALSE; } /* implementation */ @@ -1168,7 +1161,7 @@ struct vc_elm_core_widget_info *_vc_elm_core_register_widget(const char *widget_ struct vc_elm_core_widget_info *info = NULL; void *found = eina_hash_find(g_widget_info_hash, widget_name); if (found) { - VC_ELM_LOG_ERR("Widget already registered: %s", widget_name); + VC_ELM_LOG_DBG("Widget already registered: %s", widget_name); } else { info = malloc(sizeof(struct vc_elm_core_widget_info)); if (info != NULL) { @@ -1211,8 +1204,6 @@ void _vc_elm_core_register_action(struct vc_elm_core_widget_info *info, const ch static int __vc_add_commands_for_automode() { - VC_ELM_LOG_DBG("inside __vc_add_commands_for_automode()"); - if (NULL != g_dump_list) { ea_object_dump_list_clear(); g_dump_list = NULL; @@ -1237,6 +1228,8 @@ static int __vc_add_commands_for_automode() } } } + + VC_ELM_LOG_DBG("Finish to add commands for automode"); return 0; } @@ -1257,7 +1250,6 @@ static Elm_Object_Item* __vc_elm_core_get_object_item_from_geometry_info(Evas_Ob static int __vc_add_commands_for_automode_vt_auto() { - VC_ELM_LOG_DBG("inside __vc_add_commands_for_automode_vt_auto()"); if (NULL != g_dump_list) { ea_object_dump_list_clear(); g_dump_list = NULL; @@ -1321,6 +1313,8 @@ static int __vc_add_commands_for_automode_vt_auto() // } } } + + VC_ELM_LOG_DBG("Finish to add commands for automode when voice touch is set as auto"); return 0; } diff --git a/src/vc_elm_tooltip.c b/src/vc_elm_tooltip.c index 9c7fe78..3232d63 100644 --- a/src/vc_elm_tooltip.c +++ b/src/vc_elm_tooltip.c @@ -65,7 +65,7 @@ void _vc_elm_set_tooltips_window(Evas_Object *win) { g_win = win; evas_object_geometry_get(win, NULL, NULL, &win_width, &win_heigh); - VC_ELM_LOG_ERR("init %p %p", (void*)win, (void*)g_grid); + VC_ELM_LOG_DBG("init %p %p", (void*)win, (void*)g_grid); } static void __turn_on_tooltips() -- 2.7.4 From 28566a027dfd7e6ca7fa6fa0213edc403dc141b4 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Tue, 8 Aug 2017 16:55:45 +0900 Subject: [PATCH 07/16] Fix segmentation fault Change-Id: I9e4b841f310bed8d9964c873d96866e97524de82 Signed-off-by: sooyeon.kim --- src/vc_elm_core.c | 64 ++++++++++++++++++++++++++++----------------------- src/vc_elm_efl_dump.c | 21 ++++++++++++++--- 2 files changed, 53 insertions(+), 32 deletions(-) diff --git a/src/vc_elm_core.c b/src/vc_elm_core.c index b23aec2..3bdc4e5 100644 --- a/src/vc_elm_core.c +++ b/src/vc_elm_core.c @@ -1271,38 +1271,44 @@ static int __vc_add_commands_for_automode_vt_auto() VC_ELM_LOG_DBG("x(%d) y(%d) w(%d) h(%d)", info->geometry_info.x, info->geometry_info.y, info->geometry_info.w, info->geometry_info.h); Object_Info* parent = ea_object_dump_parent_widget_data_get(info); Object_Info* grand = ea_object_dump_parent_widget_data_get(parent); - - const char *widget_type = NULL; - widget_type = elm_widget_type_get((const Evas_Object*)grand->address); - while (NULL == widget_type) { - grand = ea_object_dump_parent_widget_data_get(grand); - if (NULL == grand) { - break; - } + if (NULL != parent && NULL != grand) { + const char *widget_type = NULL; widget_type = elm_widget_type_get((const Evas_Object*)grand->address); - } - - VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", elm_widget_type_get((Evas_Object*)info->address), elm_widget_type_get((Evas_Object*)parent->address), widget_type); - // VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", evas_object_type_get((Evas_Object*)info->address), evas_object_type_get((Evas_Object*)parent->address), evas_object_type_get((Evas_Object*)grand->address)); - - if (NULL != widget_type && (!strcmp(widget_type, "Elm_Genlist") || !strcmp(widget_type, "Elm_Gengrid") || !strcmp(widget_type, "Elm_List"))) { - int x = info->geometry_info.x; - int y = info->geometry_info.y; - int w = info->geometry_info.w; - int h = info->geometry_info.h; - Elm_Object_Item *it = __vc_elm_core_get_object_item_from_geometry_info((Evas_Object*)grand->address, widget_type, x, y, w, h); - if (NULL != it) { - _vc_elm_core_set_auto_item_object_command(it, info->text); - VC_ELM_LOG_DBG("Get object from geometry(%p)", it); + while (NULL == widget_type) { + grand = ea_object_dump_parent_widget_data_get(grand); + if (NULL == grand) { + break; + } + widget_type = elm_widget_type_get((const Evas_Object*)grand->address); } - } else if (NULL != widget_type && (!strcmp(widget_type, "Elm_Toolbar"))) { - Elm_Object_Item *it = elm_toolbar_item_find_by_label((Evas_Object*)grand->address, info->text); - if (NULL != it) { - _vc_elm_core_set_auto_item_object_command(it, info->text); - VC_ELM_LOG_DBG("Get object from label(%p)", it); + + VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", elm_widget_type_get((Evas_Object*)info->address), elm_widget_type_get((Evas_Object*)parent->address), widget_type); + // VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", evas_object_type_get((Evas_Object*)info->address), evas_object_type_get((Evas_Object*)parent->address), evas_object_type_get((Evas_Object*)grand->address)); + + if (NULL != widget_type && (!strcmp(widget_type, "Elm_Genlist") || !strcmp(widget_type, "Elm_Gengrid") || !strcmp(widget_type, "Elm_List"))) { + int x = info->geometry_info.x; + int y = info->geometry_info.y; + int w = info->geometry_info.w; + int h = info->geometry_info.h; + Elm_Object_Item *it = __vc_elm_core_get_object_item_from_geometry_info((Evas_Object*)grand->address, widget_type, x, y, w, h); + if (NULL != it) { + _vc_elm_core_set_auto_item_object_command(it, info->text); + VC_ELM_LOG_DBG("Get object from geometry(%p)", it); + } + } else if (NULL != widget_type && (!strcmp(widget_type, "Elm_Toolbar"))) { + Elm_Object_Item *it = elm_toolbar_item_find_by_label((Evas_Object*)grand->address, info->text); + if (NULL != it) { + _vc_elm_core_set_auto_item_object_command(it, info->text); + VC_ELM_LOG_DBG("Get object from label(%p)", it); + } + } else if (NULL != widget_type && (!strcmp(widget_type, "Elm_Ctxpopup"))) { + /* TODO */ + } else { + if (!_vc_elm_core_register_default_widget(_get_ui_object_name((Evas_Object*)info->address), EINA_FALSE, NULL) || (NULL == eina_hash_find(_vc_elm_core_get_config_widget_map(), elm_widget_type_get((Evas_Object*)info->address)))) { + VC_ELM_LOG_ERR("Not supported widget"); + } + _vc_elm_core_set_auto_object_command((Evas_Object*)info->address, info->text); } - } else if (NULL != widget_type && (!strcmp(widget_type, "Elm_Ctxpopup"))) { - /* TODO */ } else { if (!_vc_elm_core_register_default_widget(_get_ui_object_name((Evas_Object*)info->address), EINA_FALSE, NULL) || (NULL == eina_hash_find(_vc_elm_core_get_config_widget_map(), elm_widget_type_get((Evas_Object*)info->address)))) { VC_ELM_LOG_ERR("Not supported widget"); diff --git a/src/vc_elm_efl_dump.c b/src/vc_elm_efl_dump.c index 04604f1..a3bafef 100644 --- a/src/vc_elm_efl_dump.c +++ b/src/vc_elm_efl_dump.c @@ -160,6 +160,10 @@ _edje_file_info_save(Ea_Util_Mgr *util_mgr, const Evas_Object *obj) EINA_LIST_FOREACH(parts, l, pname) { if ((pobj = edje_object_part_object_get(obj, pname))) { edje_info = malloc(sizeof(Edje_Info)); + if (!edje_info) { + VC_ELM_LOG_ERR("[ERROR] Fail to allocate memory"); + return; + } edje_info->obj = pobj; edje_info->part_name = strdup(pname); ret = edje_object_part_state_get(obj, edje_info->part_name, &val); @@ -206,6 +210,10 @@ _obj_tree_items(Ea_Util_Mgr *util_mgr, Evas_Object *obj, Object_Info *parent) if (is_clip) goto next; object_info = calloc(1, sizeof(Object_Info)); + if (!object_info) { + VC_ELM_LOG_ERR("[ERROR] Fail to allocate memory"); + return; + } object_info->parent = parent; @@ -434,6 +442,10 @@ _obj_tree_items_exclude_unfocusable_text(Ea_Util_Mgr *util_mgr, Evas_Object *obj } object_info = calloc(1, sizeof(Object_Info)); + if (!object_info) { + VC_ELM_LOG_ERR("[ERROR] Fail to allocate memory"); + return; + } object_info->parent = parent; @@ -575,10 +587,9 @@ _obj_tree_items_exclude_unfocusable_text(Ea_Util_Mgr *util_mgr, Evas_Object *obj if (text && strlen(text) > 0) { object_info->text = calloc(1, strlen(text) + 1); strncpy(object_info->text, text, strlen(text) + 1); - - ret_list = eina_list_append(ret_list, object_info); } - +` + ret_list = eina_list_append(ret_list, object_info); next: if (!evas_object_type_match(obj, "rectangle") && !evas_object_type_match(obj, "text") && !evas_object_type_match(obj, "image")) { children = evas_object_smart_members_get(obj); @@ -897,6 +908,10 @@ ea_object_dump_find_data(Eina_List *list, const char *str1, const char *str2) Object_Info* ea_object_dump_parent_widget_data_get(const Object_Info *obj_info) { + if (NULL == obj_info) { + return NULL; + } + Object_Info *parent_info = NULL; parent_info = obj_info->parent; -- 2.7.4 From 9e1a2a05eba7a9679493abdee6687defb4dc1a94 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Thu, 17 Aug 2017 19:33:06 +0900 Subject: [PATCH 08/16] Fix errata Change-Id: Iecc49533ecb7dc2b226435f71b39bcee4460037e Signed-off-by: sooyeon.kim --- src/vc_elm_efl_dump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vc_elm_efl_dump.c b/src/vc_elm_efl_dump.c index a3bafef..b71ec35 100644 --- a/src/vc_elm_efl_dump.c +++ b/src/vc_elm_efl_dump.c @@ -588,7 +588,7 @@ _obj_tree_items_exclude_unfocusable_text(Ea_Util_Mgr *util_mgr, Evas_Object *obj object_info->text = calloc(1, strlen(text) + 1); strncpy(object_info->text, text, strlen(text) + 1); } -` + ret_list = eina_list_append(ret_list, object_info); next: if (!evas_object_type_match(obj, "rectangle") && !evas_object_type_match(obj, "text") && !evas_object_type_match(obj, "image")) { -- 2.7.4 From 0eafc83d1f1875b0a2ba0c635b9fa55cb3601d35 Mon Sep 17 00:00:00 2001 From: Wonnam Jang Date: Mon, 25 Sep 2017 20:08:29 +0900 Subject: [PATCH 09/16] Add to register allowed part as candidate cmd Change-Id: Ibb786944b0f6fbc280f7fc6e2b24168e38fd6bb0 Signed-off-by: Wonnam Jang (cherry picked from commit 36e7a11f05fe9a14f7bee293685f72ccccd38110) --- src/vc_elm_core.c | 122 ++++++++++++++++++++++++++++---------------------- src/vc_elm_core.h | 2 +- src/vc_elm_efl_dump.c | 44 ++++++++++++++++++ 3 files changed, 113 insertions(+), 55 deletions(-) diff --git a/src/vc_elm_core.c b/src/vc_elm_core.c index 3bdc4e5..1ac1d9e 100644 --- a/src/vc_elm_core.c +++ b/src/vc_elm_core.c @@ -307,6 +307,11 @@ static Eina_Bool _vc_elm_click_matched_object(const char* cmd, int click_method) if (NULL == item) { item = elm_genlist_at_xy_item_get((Evas_Object*)(parent_info->address), x + w + w/2, y + h/2, NULL); } + } else if (NULL != widget_type && !strcmp(widget_type, "Elm_List")) { + item = elm_list_at_xy_item_get((Evas_Object*)(parent_info->address), x + w/2, y + h/2, NULL); + if (NULL == item) { + item = elm_list_at_xy_item_get((Evas_Object*)(parent_info->address), x + w + w/2, y + h/2, NULL); + } } else if (NULL != widget_type && !strcmp(widget_type, "Elm_Gengrid")) { int xposret, yposret; item = elm_gengrid_at_xy_item_get((Evas_Object*)(parent_info->address), x + w/2, y + h/2, &xposret, &yposret); @@ -1262,61 +1267,70 @@ static int __vc_add_commands_for_automode_vt_auto() EINA_LIST_FOREACH(g_dump_list, dump_iter, data) { Object_Info* info = (Object_Info*)data; - if (NULL != info && NULL != info->text /*&& NULL != info->part_name*/) { -// Eina_List *iter = NULL; -// char *part_name = NULL; -// EINA_LIST_FOREACH(g_allowed_text_part_list, iter, part_name) { -// if (NULL != part_name && !strcmp(part_name, info->part_name)) { - VC_ELM_LOG_DBG("Text (%s), Part(%s)", info->text, info->part_name); - VC_ELM_LOG_DBG("x(%d) y(%d) w(%d) h(%d)", info->geometry_info.x, info->geometry_info.y, info->geometry_info.w, info->geometry_info.h); - Object_Info* parent = ea_object_dump_parent_widget_data_get(info); - Object_Info* grand = ea_object_dump_parent_widget_data_get(parent); - if (NULL != parent && NULL != grand) { - const char *widget_type = NULL; - widget_type = elm_widget_type_get((const Evas_Object*)grand->address); - while (NULL == widget_type) { - grand = ea_object_dump_parent_widget_data_get(grand); - if (NULL == grand) { - break; - } - widget_type = elm_widget_type_get((const Evas_Object*)grand->address); - } + if (NULL != info && NULL != info->text) { + VC_ELM_LOG_DBG("Text (%s), Part(%s)", info->text, info->part_name); + VC_ELM_LOG_DBG("x(%d) y(%d) w(%d) h(%d)", info->geometry_info.x, info->geometry_info.y, info->geometry_info.w, info->geometry_info.h); + Object_Info* parent = ea_object_dump_parent_widget_data_get(info); + Object_Info* grand = ea_object_dump_parent_widget_data_get(parent); + + const char *widget_type = NULL; + if (NULL != parent && NULL != grand) { + widget_type = elm_widget_type_get((const Evas_Object*)grand->address); + while (NULL == widget_type) { + grand = ea_object_dump_parent_widget_data_get(grand); + if (NULL == grand) { + break; + } + widget_type = elm_widget_type_get((const Evas_Object*)grand->address); + } + } + VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", elm_widget_type_get((Evas_Object*)info->address), (!parent) ? "NULL" : elm_widget_type_get((Evas_Object*)parent->address), widget_type); + // VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", evas_object_type_get((Evas_Object*)info->address), evas_object_type_get((Evas_Object*)parent->address), evas_object_type_get((Evas_Object*)grand->address)); - VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", elm_widget_type_get((Evas_Object*)info->address), elm_widget_type_get((Evas_Object*)parent->address), widget_type); - // VC_ELM_LOG_DBG("info(%s) parent(%s) grand(%s)", evas_object_type_get((Evas_Object*)info->address), evas_object_type_get((Evas_Object*)parent->address), evas_object_type_get((Evas_Object*)grand->address)); - - if (NULL != widget_type && (!strcmp(widget_type, "Elm_Genlist") || !strcmp(widget_type, "Elm_Gengrid") || !strcmp(widget_type, "Elm_List"))) { - int x = info->geometry_info.x; - int y = info->geometry_info.y; - int w = info->geometry_info.w; - int h = info->geometry_info.h; - Elm_Object_Item *it = __vc_elm_core_get_object_item_from_geometry_info((Evas_Object*)grand->address, widget_type, x, y, w, h); - if (NULL != it) { - _vc_elm_core_set_auto_item_object_command(it, info->text); - VC_ELM_LOG_DBG("Get object from geometry(%p)", it); - } - } else if (NULL != widget_type && (!strcmp(widget_type, "Elm_Toolbar"))) { - Elm_Object_Item *it = elm_toolbar_item_find_by_label((Evas_Object*)grand->address, info->text); - if (NULL != it) { - _vc_elm_core_set_auto_item_object_command(it, info->text); - VC_ELM_LOG_DBG("Get object from label(%p)", it); - } - } else if (NULL != widget_type && (!strcmp(widget_type, "Elm_Ctxpopup"))) { - /* TODO */ - } else { - if (!_vc_elm_core_register_default_widget(_get_ui_object_name((Evas_Object*)info->address), EINA_FALSE, NULL) || (NULL == eina_hash_find(_vc_elm_core_get_config_widget_map(), elm_widget_type_get((Evas_Object*)info->address)))) { - VC_ELM_LOG_ERR("Not supported widget"); - } - _vc_elm_core_set_auto_object_command((Evas_Object*)info->address, info->text); - } - } else { - if (!_vc_elm_core_register_default_widget(_get_ui_object_name((Evas_Object*)info->address), EINA_FALSE, NULL) || (NULL == eina_hash_find(_vc_elm_core_get_config_widget_map(), elm_widget_type_get((Evas_Object*)info->address)))) { - VC_ELM_LOG_ERR("Not supported widget"); - } - _vc_elm_core_set_auto_object_command((Evas_Object*)info->address, info->text); + if (NULL != widget_type && (!strcmp(widget_type, "Elm_Genlist") || !strcmp(widget_type, "Elm_Gengrid") || !strcmp(widget_type, "Elm_List"))) { + int x = info->geometry_info.x; + int y = info->geometry_info.y; + int w = info->geometry_info.w; + int h = info->geometry_info.h; + Elm_Object_Item *it = __vc_elm_core_get_object_item_from_geometry_info((Evas_Object*)grand->address, widget_type, x, y, w, h); + if (NULL != it) { + _vc_elm_core_set_auto_item_object_command(it, info->text); + VC_ELM_LOG_DBG("Get object from geometry(%p)", it); + continue; + } + } else if (NULL != widget_type && (!strcmp(widget_type, "Elm_Toolbar"))) { + Elm_Object_Item *it = elm_toolbar_item_find_by_label((Evas_Object*)grand->address, info->text); + if (NULL != it) { + _vc_elm_core_set_auto_item_object_command(it, info->text); + VC_ELM_LOG_DBG("Get object from label(%p)", it); + continue; + } + } else if (NULL != widget_type && (!strcmp(widget_type, "Elm_Ctxpopup"))) { + /* TODO */ + VC_ELM_LOG_ERR("TODO - Elm_Ctxpopup"); + } else { + VC_ELM_LOG_ERR("Not supported widget manually"); + } + } + if (NULL != info) { + if (NULL != info->text && NULL != info->part_name) { + Eina_List *iter = NULL; + char *part_name = NULL; + EINA_LIST_FOREACH(g_allowed_text_part_list, iter, part_name) { + if (NULL != part_name && !strcmp(part_name, info->part_name)) { + VC_ELM_LOG_DBG("Text (%s), Part(%s)", info->text, info->part_name); + VC_ELM_LOG_ERR("Widget is supported automatically with part name"); + _vc_elm_widget_wrapper_add_command(info->text, NULL); } -// } -// } + } + } else { + if (!_vc_elm_core_register_default_widget(_get_ui_object_name((Evas_Object*)info->address), EINA_FALSE, NULL) + || (NULL == eina_hash_find(_vc_elm_core_get_config_widget_map(), elm_widget_type_get((Evas_Object*)info->address)))) { + VC_ELM_LOG_ERR("Not supported widget"); + } + _vc_elm_core_set_auto_object_command((Evas_Object*)info->address, info->text); + continue; + } } } @@ -2189,7 +2203,7 @@ int _vc_elm_core_read_xml_data() VC_ELM_LOG_DBG("reading XML start"); doc = xmlParseFile(VC_ELM_CONFIG_XML); if (doc == NULL) { - VC_ELM_LOG_ERR("Failed to parse XML file"); + VC_ELM_LOG_ERR("Failed to parse XML file, path(%s)", VC_ELM_CONFIG_XML); return VC_ELM_ERROR_OPERATION_FAILED; } diff --git a/src/vc_elm_core.h b/src/vc_elm_core.h index 0b5de30..b241a20 100644 --- a/src/vc_elm_core.h +++ b/src/vc_elm_core.h @@ -32,7 +32,7 @@ extern "C" { */ //#define VC_ELM_CONFIG_XML VOICE_LIBDIR"/voice/vc-elm/1.0/voice-control-elm-config.xml" -#define VC_ELM_CONFIG_XML tzplatform_mkpath(TZ_SYS_RO_SHARE, "voice/vc-elm/1.0/voice-control-elm-config.xml") +#define VC_ELM_CONFIG_XML tzplatform_mkpath(tzplatform_getid("TZ_SYS_RO_SHARE"), "voice/vc-elm/1.0/voice-control-elm-config.xml") #define VC_ELM_TAG_BASE_NAME "voice-control-elm-config" #define VC_ELM_TAG_ACTION_LIST "action-list" diff --git a/src/vc_elm_efl_dump.c b/src/vc_elm_efl_dump.c index b71ec35..db8ccb7 100644 --- a/src/vc_elm_efl_dump.c +++ b/src/vc_elm_efl_dump.c @@ -377,6 +377,32 @@ static Eina_Bool _is_descendant_of_toolbar(Object_Info *object_info) return EINA_FALSE; } +static Eina_Bool _has_accessible_name(Object_Info *object_info) +{ + Object_Info* parent_info = ea_object_dump_parent_widget_data_get(object_info); + while (NULL != parent_info) { + char* text = NULL; + Evas_Object *obj = (Evas_Object *)(parent_info->address); + const char* widget_type = elm_widget_type_get(obj); + + if (NULL != widget_type) { + if (elm_atspi_accessible_name_get(obj) && EINA_TRUE == parent_info->focusable && EINA_TRUE == _is_clickable_object(obj)) { + text = elm_atspi_accessible_name_get(obj); + VC_ELM_LOG_DUMP("####### [DEBUG] atspi_text(%s)", text); + } else if (elm_atspi_accessible_name_get(obj) && !strcmp(widget_type, "Elm_Toolbar")) { + text = elm_atspi_accessible_name_get(obj); + VC_ELM_LOG_DUMP("####### [DEBUG] toolbar(%s)", text); + } + } + if (NULL != text) { + VC_ELM_LOG_DUMP("####### [DEBUG] widget_type(s), text(%s)", widget_type, text); + return EINA_TRUE; + } + parent_info = ea_object_dump_parent_widget_data_get(parent_info); + } + return EINA_FALSE; +} + static void _obj_tree_items_exclude_unfocusable_text(Ea_Util_Mgr *util_mgr, Evas_Object *obj, Object_Info *parent, Eina_Bool parent_widget_focusable, Eina_Bool list_type, int cnt) { @@ -582,6 +608,23 @@ _obj_tree_items_exclude_unfocusable_text(Ea_Util_Mgr *util_mgr, Evas_Object *obj } else if (elm_atspi_accessible_name_get(obj) && !strcmp(evas_object_type_get(obj), "elm_layout") && EINA_TRUE == _is_descendant_of_toolbar(object_info)) { text = elm_atspi_accessible_name_get(obj); VC_ELM_LOG_DUMP("####### [DEBUG] toolbar(%s)", text); + } else { + if (EINA_FALSE == _has_accessible_name(object_info)) { + if (!strcmp(evas_object_type_get(obj), "text")) { + text = eina_stringshare_add(evas_object_text_text_get(obj)); + VC_ELM_LOG_DUMP("####### [DEBUG] text(%s), part_name(%s)", text, object_info->part_name); + } else if (!strcmp(evas_object_type_get(obj), "textblock")) { + ret = evas_object_textblock_text_markup_get(obj); + temp = evas_textblock_text_markup_to_utf8(obj, ret); + text = eina_stringshare_add(temp); + VC_ELM_LOG_DUMP("####### [DEBUG] textblock(%s), part_name(%s)", text, object_info->part_name); + + if (NULL != temp) { + free(temp); + temp = NULL; + } + } + } } } if (text && strlen(text) > 0) { @@ -909,6 +952,7 @@ Object_Info* ea_object_dump_parent_widget_data_get(const Object_Info *obj_info) { if (NULL == obj_info) { + VC_ELM_LOG_DUMP("obj_info is NULL"); return NULL; } -- 2.7.4 From 8dc8ada17202c9c708dfccf0d140dd893f0d6240 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Wed, 11 Oct 2017 16:34:29 +0900 Subject: [PATCH 10/16] Fix memory leaks and unreachable code Change-Id: I4b4012511474927adf9889431d6c46a67098c16f Signed-off-by: Suyeon Hwang --- src/vc_elm.c | 6 ++---- src/vc_elm_widget_wrapper.c | 4 ++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/vc_elm.c b/src/vc_elm.c index 12ba992..f8b6752 100644 --- a/src/vc_elm.c +++ b/src/vc_elm.c @@ -1010,12 +1010,10 @@ int vc_elm_set_auto_register_mode(int mode, int click_method) if (0 == g_is_vt_automode) { VC_ELM_LOG_DBG("vt_automode is FALSE"); return _vc_elm_set_auto_register_mode(mode, click_method); - } else { - VC_ELM_LOG_DBG("vt_automode is TRUE"); - return _vc_elm_set_auto_register_mode((int)VC_ELM_MODE_AUTO_APPFW, click_method); } - return _vc_elm_set_auto_register_mode(mode, click_method); + VC_ELM_LOG_DBG("vt_automode is TRUE"); + return _vc_elm_set_auto_register_mode((int)VC_ELM_MODE_AUTO_APPFW, click_method); } int vc_elm_get_auto_register_mode(int* mode, int* click_method) diff --git a/src/vc_elm_widget_wrapper.c b/src/vc_elm_widget_wrapper.c index a8f828c..235e720 100644 --- a/src/vc_elm_widget_wrapper.c +++ b/src/vc_elm_widget_wrapper.c @@ -134,6 +134,10 @@ static bool __cb(vc_cmd_h vc_command, void *user_data) vc_cmd_get_format(vc_command, &type); vc_cmd_get_command(vc_command, &cmd); VC_ELM_LOG_DBG("cmd: %s %d", cmd, type); + + if (NULL != cmd) { + free(cmd); + } return 1; } -- 2.7.4 From 94be231e3a52d9fc92d39d3b9954aa306217d40b Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Fri, 13 Oct 2017 15:30:27 +0900 Subject: [PATCH 11/16] Fix error check for fread Change-Id: I6f9bffd6ce2ab70dd61fa98ce9bb5ac0d95bc206 Signed-off-by: Suyeon Hwang --- src/vc_elm.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/vc_elm.c b/src/vc_elm.c index f8b6752..45cc206 100644 --- a/src/vc_elm.c +++ b/src/vc_elm.c @@ -124,15 +124,15 @@ static int __check_privilege(const char* uid, const char * privilege) char smack_label[1024] = "/proc/self/attr/current"; if (!p_cynara) { - return false; + return false; } fp = fopen(smack_label, "r"); if (fp != NULL) { - if (fread(smack_label, 1, sizeof(smack_label), fp) <= 0) - VC_ELM_LOG_ERR("[ERROR] fail to fread"); + if (sizeof(smack_label) != fread(smack_label, 1, sizeof(smack_label), fp)) + VC_ELM_LOG_ERR("[ERROR] fail to fread"); - fclose(fp); + fclose(fp); } pid_t pid = getpid(); @@ -140,10 +140,10 @@ static int __check_privilege(const char* uid, const char * privilege) int ret = cynara_check(p_cynara, smack_label, session, uid, privilege); VC_ELM_LOG_DBG("[Client]cynara_check returned %d(%s)", ret, (CYNARA_API_ACCESS_ALLOWED == ret) ? "Allowed" : "Denied"); if (session) - free(session); + free(session); if (ret != CYNARA_API_ACCESS_ALLOWED) - return false; + return false; return true; } -- 2.7.4 From 1c27e1d85554b6f2bc4029909fcd60ce296ddb0f Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Mon, 16 Oct 2017 20:48:56 +0900 Subject: [PATCH 12/16] Add major version library Change-Id: I95b982497b386fc76e859884be49f7828cee8d06 Signed-off-by: sooyeon.kim --- packaging/voice-control-elm.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/packaging/voice-control-elm.spec b/packaging/voice-control-elm.spec index c94c824..7fcd3ea 100644 --- a/packaging/voice-control-elm.spec +++ b/packaging/voice-control-elm.spec @@ -87,6 +87,7 @@ mkdir -p %{TZ_SYS_RO_SHARE}/voice %manifest %{name}.manifest %attr(644,root,root) %defattr(-,root,root,-) +%{_libdir}/*.so %{_libdir}/*.so.* %{_datadir}/* %{TZ_SYS_RO_SHARE}/locale/* -- 2.7.4 From 7942aaf0c5ff0c06e166018d922476f4a0db3a75 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Tue, 17 Oct 2017 08:29:55 +0900 Subject: [PATCH 13/16] Fix versioning Change-Id: I374e410aa9afb8c475c13bb6c10eb86bab99da3e Signed-off-by: Hwankyu Jhun --- CMakeLists.txt | 2 +- packaging/voice-control-elm.spec | 12 +++++++++++- src/CMakeLists.txt | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a8ce164..d8d30cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ SET(LIBRARY_NAME "vc-elm") #SET(VOICE_CONTROL_ELM_VERSION_MAJOR 0) #SET(VOICE_CONTROL_ELM_VERSION_MINOR 2) #SET(VOICE_CONTROL_ELM_VERSION_PATCH 0) -SET(VERSION 0.2.0) +SET(VERSION ${VERSION}) # pkg config tool INCLUDE(FindPkgConfig) diff --git a/packaging/voice-control-elm.spec b/packaging/voice-control-elm.spec index 7fcd3ea..5cb6e7e 100644 --- a/packaging/voice-control-elm.spec +++ b/packaging/voice-control-elm.spec @@ -27,6 +27,9 @@ BuildRequires: pkgconfig(voice-control-widget) BuildRequires: pkgconfig(vconf) BuildRequires: gettext-tools +Requires(post): /sbin/ldconfig +Requires(postun): /sbin/ldconfig + %description voice-control-elm library that provides advanced Voice Driven Control over UI @@ -47,6 +50,8 @@ export LDFLAGS+="-Wl,--rpath=%{_libdir} -Wl,--hash-style=both -Wl,--as-needed" rm -rf objdir mkdir objdir +MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` + %{?SRPOL_DEBUG: (cd objdir && cmake .. -DVERSION=%{version} \ -DCMAKE_INSTALL_PREFIX=%{_prefix} \ @@ -55,6 +60,7 @@ mkdir objdir -DTZ_SYS_RO_SHARE=%TZ_SYS_RO_SHARE \ -DTZ_SYS_BIN=%TZ_SYS_BIN \ -DCMAKE_BUILD_TYPE=Debug \ + -DMAJORVER=${MAJORVER} \ -DSRPOL_DEBUG="1") } %{!?SRPOL_DEBUG: @@ -65,6 +71,7 @@ mkdir objdir -DTZ_SYS_RO_SHARE=%TZ_SYS_RO_SHARE \ -DTZ_SYS_BIN=%TZ_SYS_BIN \ -DCMAKE_BUILD_TYPE=Debug \ + -DMAJORVER=${MAJORVER} \ -DSRPOL_DEBUG="0") } @@ -79,6 +86,10 @@ rm -rf %{buildroot} rm -rf %{buildroot} %post +/sbin/ldconfig + +%postun +/sbin/ldconfig mkdir -p %{TZ_SYS_RO_SHARE}/voice @@ -87,7 +98,6 @@ mkdir -p %{TZ_SYS_RO_SHARE}/voice %manifest %{name}.manifest %attr(644,root,root) %defattr(-,root,root,-) -%{_libdir}/*.so %{_libdir}/*.so.* %{_datadir}/* %{TZ_SYS_RO_SHARE}/locale/* diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c71fa62..406856d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -37,8 +37,8 @@ INCLUDE_DIRECTORIES( ADD_LIBRARY(${LIBRARY_NAME} SHARED ${VC_ELM_SOURCES}) SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES COMPILE_FLAGS -fPIC - SOVERSION "0.2.0" - VERSION "0.2.0") + SOVERSION ${MAJORVER} + VERSION ${VERSION}) TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${VC_ELM_DEPS_LIBRARIES}) -- 2.7.4 From bc237f4e06a32a5da7a9c27fe5c833dca07cc409 Mon Sep 17 00:00:00 2001 From: Wonnam Jang Date: Mon, 23 Oct 2017 09:32:23 +0900 Subject: [PATCH 14/16] Initialize variables during a foreach Change-Id: I6b53d926ae386e52389b49d859a4898cd63808e7 Signed-off-by: Wonnam Jang --- src/vc_elm_core.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/vc_elm_core.c b/src/vc_elm_core.c index 1ac1d9e..c285b55 100644 --- a/src/vc_elm_core.c +++ b/src/vc_elm_core.c @@ -489,7 +489,7 @@ Eina_Bool _recognize_command(const char *cmd, const char *param1, const char *pa return EINA_FALSE; } - VC_ELM_LOG_INFO("Trying to recognize %s %s %s", cmd, param1, param2); + VC_ELM_LOG_INFO("Trying to recognize (%s)(%s)(%s)", cmd, param1, param2); EINA_LIST_FOREACH(g_wrapped_commands, l, wrapped) { VC_ELM_LOG_DBG("compare %s %s", wrapped->cmd, cmd); @@ -1344,18 +1344,6 @@ static void __vc_add_commands() Eina_List *_l; Evas_Object *obj; - size_t idx; - unsigned int registered; - Elm_Object_Item *item = NULL; - Evas_Object *parent; - Evas_Coord x; - Evas_Coord y; - Evas_Coord w; - Evas_Coord h; - Evas_Coord x_p; - Evas_Coord y_p; - Evas_Coord w_p; - Evas_Coord h_p; _vc_elm_get_text_domain(&g_app_domain); VC_ELM_LOG_DBG("app domain - %s", g_app_domain); @@ -1376,8 +1364,21 @@ static void __vc_add_commands() char *command = NULL; char *comm = NULL; int ret; + + size_t idx; + unsigned int registered = 0; + Elm_Object_Item *item = NULL; + Evas_Object *parent = NULL; + Evas_Coord x; + Evas_Coord y; + Evas_Coord w; + Evas_Coord h; + Evas_Coord x_p; + Evas_Coord y_p; + Evas_Coord w_p; + Evas_Coord h_p; + obj_name = eina_stringshare_add(obj_name); - registered = 0; VC_ELM_LOG_DBG("obj(%p), command %s", (void*)obj, evas_object_data_get(obj, VC_ELM_CMD_DATA_KEY)); if (obj_name) @@ -1407,6 +1408,8 @@ static void __vc_add_commands() parent = elm_object_parent_widget_get(obj); + VC_ELM_LOG_DBG("parent(%p), object(%s)", parent, _get_ui_object_name(parent)); + if (parent != NULL) { if (0 == strcmp(_get_ui_object_name(parent), "Elm_Genlist")) { item = elm_genlist_first_item_get(parent); -- 2.7.4 From e993af2494eb73fefee33c04e3c28ea08b0838a8 Mon Sep 17 00:00:00 2001 From: Wonnam Jang Date: Tue, 24 Oct 2017 15:02:04 +0900 Subject: [PATCH 15/16] Fix to not click item on genlist Change-Id: I0987fc633912337c12b67f1a379c8bf45de04e55 Signed-off-by: Wonnam Jang --- src/vc_elm_core.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/vc_elm_core.c b/src/vc_elm_core.c index c285b55..c92e445 100644 --- a/src/vc_elm_core.c +++ b/src/vc_elm_core.c @@ -1604,7 +1604,7 @@ static void __unwrap_universal_item_command(struct Wrapped_Command *wrapper, con if (0 == strcmp(_get_ui_object_name(parent), "Elm_Genlist")) { evas_object_geometry_get(_vc_elm_core_get_evas_object(item), &x, &y, &w, &h); evas_object_geometry_get(parent, &x_p, &y_p, &w_p, &h_p); - if (y > h_p || y < y_p) { + if (y > y_p + h_p || y < y_p) { evas_object_smart_callback_add(parent, "scroll,anim,stop", __activate_invisible_item_cb, (void*)unwr); elm_genlist_item_bring_in(item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE); } else { @@ -1637,7 +1637,7 @@ static void __unwrap_universal_item_command(struct Wrapped_Command *wrapper, con evas_object_geometry_get(_vc_elm_core_get_evas_object(parent_item), &x, &y, &w, &h); evas_object_geometry_get(elm_object_parent_widget_get(_vc_elm_core_get_evas_object(parent_item)), &x_p, &y_p, &w_p, &h_p); - if (y > h_p || y < y_p) { + if (y > y_p + h_p || y < y_p) { evas_object_smart_callback_add(elm_object_parent_widget_get(_vc_elm_core_get_evas_object(parent_item)), "scroll,anim,stop", __activate_invisible_item_cb, (void*)unwr); elm_genlist_item_bring_in(parent_item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE); return; @@ -1660,6 +1660,7 @@ static void __item__object_del_callback(void *data, Evas_Object *obj, void *even { struct Custom_Data *cdata; Elm_Object_Item *obj_item = (Elm_Object_Item *)event_info; + char* command = (char*)eina_hash_find(item_command_map, &obj_item); (void)data; (void)obj; @@ -1667,6 +1668,7 @@ static void __item__object_del_callback(void *data, Evas_Object *obj, void *even eina_hash_free_cb_set(item_hint_map, __hash_entry_dummy_cb); eina_hash_free_cb_set(item_command_map, __hash_entry_dummy_cb); eina_hash_free_cb_set(item_custom_map, __hash_entry_dummy_cb); + eina_hash_free_cb_set(command_item_map, __hash_entry_dummy_cb); eina_stringshare_del((char *)eina_hash_find(item_hint_map, &obj_item)); eina_stringshare_del((char *)eina_hash_find(item_command_map, &obj_item)); @@ -1677,10 +1679,12 @@ static void __item__object_del_callback(void *data, Evas_Object *obj, void *even eina_hash_del(item_hint_map, &obj_item, NULL); eina_hash_del(item_command_map, &obj_item, NULL); eina_hash_del(item_custom_map, &obj_item, NULL); + eina_hash_del(command_item_map, command, NULL); eina_hash_free_cb_set(item_hint_map, __hash_entry_free_cb); eina_hash_free_cb_set(item_command_map, __hash_entry_free_cb); eina_hash_free_cb_set(item_custom_map, __hash_entry_free_cb); + eina_hash_free_cb_set(command_item_map, __hash_entry_free_cb); } Eina_Bool _vc_elm_core_set_object_command(Evas_Object *obj, const char *_command) @@ -1756,12 +1760,16 @@ static Eina_Bool _vc_elm_core_set_auto_item_object_command(Elm_Object_Item *obj, Eina_Bool _vc_elm_core_unset_item_object_command(Elm_Object_Item *obj) { + char* command = (char*)eina_hash_find(item_command_map, &obj); eina_hash_free_cb_set(item_command_map, __hash_entry_dummy_cb); + eina_hash_free_cb_set(command_item_map, __hash_entry_dummy_cb); eina_stringshare_del((char *)eina_hash_find(item_command_map, &obj)); eina_hash_del(item_command_map, &obj, NULL); + eina_hash_del(command_item_map, command, NULL); eina_hash_free_cb_set(item_command_map, __hash_entry_free_cb); + eina_hash_free_cb_set(command_item_map, __hash_entry_dummy_cb); return EINA_TRUE; } -- 2.7.4 From f4300969280887ebd80b36432430f0434d834af2 Mon Sep 17 00:00:00 2001 From: Wonnam Jang Date: Fri, 24 Nov 2017 19:15:54 +0900 Subject: [PATCH 16/16] Remove setlocale Change-Id: I48883f7b6953a3768e520b235c288a69d5fdf943 Signed-off-by: Wonnam Jang --- src/vc_elm_widget_wrapper.c | 56 +-------------------------------------------- 1 file changed, 1 insertion(+), 55 deletions(-) diff --git a/src/vc_elm_widget_wrapper.c b/src/vc_elm_widget_wrapper.c index 235e720..aad6711 100644 --- a/src/vc_elm_widget_wrapper.c +++ b/src/vc_elm_widget_wrapper.c @@ -199,54 +199,9 @@ static void __vc_state_changed_cb(vc_state_e previous, vc_state_e current, void { const char *prev = NULL; const char *curr = NULL; - char *tmp_lang = NULL; - char *lang = NULL; (void)user_data; - switch (previous) { - case VC_STATE_INITIALIZED: - prev = "VC_STATE_INITIALIZED"; - break; - case VC_STATE_READY: - prev = "VC_STATE_READY"; - break; - case VC_STATE_NONE: - curr = "VC_STATE_READY"; - break; - default: - VC_ELM_LOG_ERR("unkown value"); - exit(-1); - } - - switch (current) { - case VC_STATE_INITIALIZED: - curr = "VC_STATE_INITIALIZED"; - break; - case VC_STATE_READY: - curr = "VC_STATE_READY"; - //vc_widget_set_foreground(EINA_TRUE); - vc_widget_get_current_language(g_vc_w, &tmp_lang); - if (NULL != tmp_lang) { - int ret = asprintf(&lang, "%s.UTF-8", tmp_lang); - if (-1 == ret) { - VC_ELM_LOG_ERR("error changing locale"); - exit(-1); - } - VC_ELM_LOG_DBG("locale changing - %s", setlocale(LC_ALL, lang)); - } - break; - case VC_STATE_NONE: - curr = "VC_STATE_READY"; - break; - default: - VC_ELM_LOG_ERR("unkown value"); - exit(-1); - } - - free(lang); - free(tmp_lang); - - VC_ELM_LOG_DBG("VC state changed from %s to %s", prev, curr); + VC_ELM_LOG_DBG("VC state changed from %s to %s", previous, current); } static void __vc_service_state_changed_cb(vc_service_state_e previous, vc_service_state_e current, void *user_data) @@ -325,7 +280,6 @@ void _vc_elm_widget_wrapper_set_show_tooltips_callback(vc_elm_widget_wrapper_sho static void __vc_language_changed_cb(const char *previous, const char *current, void *data) { - char *lang; int ret; (void)previous; (void)current; @@ -333,14 +287,6 @@ static void __vc_language_changed_cb(const char *previous, const char *current, VC_ELM_LOG_INFO("Widget language changed from %s to %s", previous, current); - ret = asprintf(&lang, "%s.UTF-8", current); - if (-1 == ret) { - VC_ELM_LOG_ERR("Error setting locale"); - return; - } - VC_ELM_LOG_INFO("Locale changing - %s", setlocale(LC_ALL, lang)); - free(lang); - if (NULL != vcw.language_changed_cb) { vcw.language_changed_cb(previous, current, vcw.lang_user_data); } else { -- 2.7.4