From: Ji-hoon Lee Date: Wed, 13 Nov 2019 10:56:26 +0000 (+0900) Subject: Add support for setting assistant language X-Git-Tag: submit/tizen_5.5/20191119.062141~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d2da0780b6b6ab297f28db11816f24ae3e29301d;p=platform%2Fcore%2Fuifw%2Fmulti-assistant-service.git Add support for setting assistant language Change-Id: Id7d6e6c48541088ec7004fcc2db27c3d473afdb3 --- diff --git a/inc/multi_assistant_main.h b/inc/multi_assistant_main.h index 6c04aa6..8acd240 100644 --- a/inc/multi_assistant_main.h +++ b/inc/multi_assistant_main.h @@ -66,6 +66,7 @@ #define MA_METHOD_SET_PREPROCESSING_ALLOW_MODE "ma_method_set_preprocessing_allow_mode" #define MA_METHOD_SEND_PREPROCESSING_RESULT "ma_method_send_preprocessing_result" #define MA_METHOD_SET_WAKE_WORD_AUDIO_REQUIRE_FLAG "ma_method_set_wake_word_audio_require_flag" +#define MA_METHOD_SET_ASSISTANT_LANGUAGE "ma_method_set_assistant_language" #define MA_METHOD_ERROR "ma_method_error" #define MA_UI_METHOD_INITIALIZE "ma_ui_method_initialize" diff --git a/inc/multi_assistant_service_plugin.h b/inc/multi_assistant_service_plugin.h index dbfd673..48a9233 100644 --- a/inc/multi_assistant_service_plugin.h +++ b/inc/multi_assistant_service_plugin.h @@ -159,6 +159,8 @@ typedef int (*wakeup_manager_get_audio_format)(int* rate, int* channel, int* aud typedef int (*wakeup_manager_get_audio_source_type)(char** type); #define MA_WAKEUP_MANAGER_FUNC_SET_WAKE_WORD_AUDIO_REQUIRE_FLAG "wakeup_manager_set_wake_word_audio_require_flag" typedef int (*wakeup_manager_set_wake_word_audio_require_flag)(bool require); +#define MA_WAKEUP_MANAGER_FUNC_SET_ASSISTANT_LANGUAGE "wakeup_manager_set_assistant_language" +typedef int (*wakeup_manager_set_assistant_language)(const char* appid, const char* language); #define MA_WAKEUP_MANAGER_FUNC_SET_WAKEUP_EVENT_CALLBACK "wakeup_manager_set_wakeup_event_callback" typedef int (*wakeup_manager_set_wakeup_event_callback)(wakeup_service_wakeup_event_cb callback, void* user_data); #define MA_WAKEUP_MANAGER_FUNC_SET_UTTERANCE_STREAMING_CALLBACK "wakeup_manager_set_utterance_streaming_callback" @@ -202,6 +204,7 @@ typedef struct { wakeup_manager_get_audio_format get_audio_format; wakeup_manager_get_audio_source_type get_audio_source_type; wakeup_manager_set_wake_word_audio_require_flag set_wake_word_audio_require_flag; + wakeup_manager_set_assistant_language set_assistant_language; wakeup_manager_set_wakeup_event_callback set_wakeup_event_callback; wakeup_manager_set_utterance_streaming_callback set_utterance_streaming_callback; wakeup_manager_set_previous_utterance_streaming_callback set_previous_utterance_streaming_callback; diff --git a/plugins/wakeup-manager/inc/wakeup_engine_manager.h b/plugins/wakeup-manager/inc/wakeup_engine_manager.h index c768f9b..d9d478c 100644 --- a/plugins/wakeup-manager/inc/wakeup_engine_manager.h +++ b/plugins/wakeup-manager/inc/wakeup_engine_manager.h @@ -149,6 +149,7 @@ public: void set_selected_wakeup_info(wakeup_event_info wakeup_info); bool set_language(string language); + bool set_assistant_language(string appid, string language); void set_assistant_activated(string appid, bool activated); bool get_assistant_activated(string appid); void set_wake_word_audio_require_flag(bool require); diff --git a/plugins/wakeup-manager/inc/wakeup_manager.h b/plugins/wakeup-manager/inc/wakeup_manager.h index d574646..c6623a2 100644 --- a/plugins/wakeup-manager/inc/wakeup_manager.h +++ b/plugins/wakeup-manager/inc/wakeup_manager.h @@ -84,6 +84,7 @@ public: bool add_assistant_language(string appid, string language); bool add_assistant_wakeup_word(string appid, string wakeup_word, string language); bool set_assistant_wakeup_engine(string appid, string engine); + bool set_assistant_language(string appid, string language); bool set_assistant_enabled(string appid, bool enabled); bool get_assistant_enabled(string appid); diff --git a/plugins/wakeup-manager/inc/wakeup_manager_wrapper.h b/plugins/wakeup-manager/inc/wakeup_manager_wrapper.h index 2df503e..d6d20a5 100644 --- a/plugins/wakeup-manager/inc/wakeup_manager_wrapper.h +++ b/plugins/wakeup-manager/inc/wakeup_manager_wrapper.h @@ -138,6 +138,8 @@ EXPORT_API int wakeup_manager_get_audio_source_type(char** type); EXPORT_API int wakeup_manager_set_wake_word_audio_require_flag(bool require); +EXPORT_API int wakeup_manager_set_assistant_language(const char* appid, const char *language); + EXPORT_API int wakeup_manager_set_wakeup_event_callback(wakeup_service_wakeup_event_cb callback, void* user_data); EXPORT_API int wakeup_manager_set_utterance_streaming_callback(wakeup_service_speech_streaming_cb callback, void* user_data); diff --git a/plugins/wakeup-manager/src/wakeup_engine_manager.cpp b/plugins/wakeup-manager/src/wakeup_engine_manager.cpp index ebc50a9..cef7b6d 100644 --- a/plugins/wakeup-manager/src/wakeup_engine_manager.cpp +++ b/plugins/wakeup-manager/src/wakeup_engine_manager.cpp @@ -161,6 +161,29 @@ bool CWakeupEngineManager::set_language(string language) return true; } +bool CWakeupEngineManager::set_assistant_language(string appid, string language) +{ + for (auto& info : mEngineInfo) { + const auto& iter = find_if(info.assistant_list.begin(), info.assistant_list.end(), + [appid](const string& assistant) { + return (0 == assistant.compare(appid)); + }); + + /* If the appid is in the assistant list */ + if (info.assistant_list.end() != iter) { + try { + int ret = info.interface.set_language(language.c_str()); + MWR_LOGD("set_language returned %d : %s %s %s", + ret, appid.c_str(), info.engine_name.c_str(), language.c_str()); + } catch (const std::exception& e) { + MWR_LOGE("[ERROR] wakeup engine %s threw exception : %s", + info.engine_name.c_str(), e.what()); + } + } + } + return true; +} + void CWakeupEngineManager::set_assistant_activated(string appid, bool activated) { MWR_LOGD("[ENTER] : %s %d", appid.c_str(), activated); diff --git a/plugins/wakeup-manager/src/wakeup_manager.cpp b/plugins/wakeup-manager/src/wakeup_manager.cpp index 1fa4387..a6a6281 100644 --- a/plugins/wakeup-manager/src/wakeup_manager.cpp +++ b/plugins/wakeup-manager/src/wakeup_manager.cpp @@ -249,6 +249,16 @@ bool CWakeupManager::set_assistant_wakeup_engine(string appid, string engine) return true; } +bool CWakeupManager::set_assistant_language(string appid, string language) +{ + MWR_LOGD("[ENTER] : %s, %s", appid.c_str(), language.c_str()); + + mWakeupEngineManager.set_assistant_language(appid, language); + + MWR_LOGD("[END]"); + return true; +} + bool CWakeupManager::set_assistant_enabled(string appid, bool enabled) { MWR_LOGD("[ENTER]"); diff --git a/plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp b/plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp index 77549bb..49b24eb 100644 --- a/plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp +++ b/plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp @@ -469,6 +469,26 @@ int wakeup_manager_set_wake_word_audio_require_flag(bool require) return 0; } +int wakeup_manager_set_assistant_language(const char* appid, const char* language) +{ + MWR_LOGD("[ENTER]"); + + string appid_string; + string language_string; + if (NULL == appid || NULL == language) { + MWR_LOGE("[ERROR] Parameter is invalid, appid(%s), language(%s)", appid, language); + return -1; + } + appid_string = appid; + language_string = language; + + if (nullptr == g_wakeup_manager) return -1; + g_wakeup_manager->set_assistant_language(appid_string, language_string); + + MWR_LOGD("[END]"); + return 0; +} + int wakeup_manager_set_wakeup_event_callback(wakeup_service_wakeup_event_cb callback, void* user_data) { MWR_LOGD("[ENTER]"); diff --git a/src/multi_assistant_dbus.c b/src/multi_assistant_dbus.c index ac92dba..53130d8 100644 --- a/src/multi_assistant_dbus.c +++ b/src/multi_assistant_dbus.c @@ -875,6 +875,9 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle } else if (dbus_message_is_method_call(msg, MA_SERVER_SERVICE_INTERFACE, MA_METHOD_SET_WAKE_WORD_AUDIO_REQUIRE_FLAG)) { ma_service_dbus_set_wake_word_audio_require_flag(g_conn_listener, msg); + } else if (dbus_message_is_method_call(msg, MA_SERVER_SERVICE_INTERFACE, MA_METHOD_SET_ASSISTANT_LANGUAGE)) { + ma_service_dbus_set_assistant_language(g_conn_listener, msg); + } else if (dbus_message_is_method_call(msg, MA_SERVER_SERVICE_INTERFACE, MA_UI_METHOD_INITIALIZE)) { ma_service_ui_dbus_initialize(g_conn_listener, msg); diff --git a/src/multi_assistant_dbus_server.c b/src/multi_assistant_dbus_server.c index 0d00f3e..40c9e13 100644 --- a/src/multi_assistant_dbus_server.c +++ b/src/multi_assistant_dbus_server.c @@ -663,6 +663,37 @@ int ma_service_dbus_set_wake_word_audio_require_flag(DBusConnection* conn, DBusM return 0; } +int ma_service_dbus_set_assistant_language(DBusConnection* conn, DBusMessage* msg) +{ + DBusError err; + dbus_error_init(&err); + + int pid; + int ret = 0; + char* language; + + dbus_message_get_args(msg, &err, + DBUS_TYPE_INT32, &pid, + DBUS_TYPE_STRING, &language, + DBUS_TYPE_INVALID); + + MAS_LOGD("[DEBUG] MAS SET ASSISTANT LANGUAGE"); + + if (dbus_error_is_set(&err)) { + MAS_LOGE("[IN ERROR] mas set assistant language : Get arguments error (%s)", err.message); + dbus_error_free(&err); + ret = -1; //MAS_ERROR_OPERATION_FAILED; + } else { + MAS_LOGD("[IN] mas set assistant language : pid(%d), language(%s)", pid, language); + ret = mas_client_set_assistant_language(pid, language); + } + + MAS_LOGD("<<<<<"); + MAS_LOGD(" "); + + return 0; +} + int ma_service_ui_dbus_initialize(DBusConnection* conn, DBusMessage* msg) { DBusError err; diff --git a/src/multi_assistant_service.c b/src/multi_assistant_service.c index fc2f3cb..94b2fb4 100644 --- a/src/multi_assistant_service.c +++ b/src/multi_assistant_service.c @@ -533,6 +533,20 @@ int mas_client_set_wake_word_audio_require_flag(int pid, bool require) return 0; } +int mas_client_set_assistant_language(int pid, const char* language) +{ + const char* pid_appid = NULL; + char buf[MAX_APPID_LEN] = {'\0',}; + int ret = aul_app_get_appid_bypid(pid, buf, sizeof(buf)); + if (AUL_R_OK == ret) { + buf[MAX_APPID_LEN - 1] = '\0'; + pid_appid = buf; + } + + multi_assistant_service_plugin_assistant_language(pid_appid, language); + return 0; +} + int mas_ui_client_initialize(int pid) { MAS_LOGD("[Enter] pid(%d)", pid); diff --git a/src/multi_assistant_service_plugin.c b/src/multi_assistant_service_plugin.c index e62a25f..e7640f6 100644 --- a/src/multi_assistant_service_plugin.c +++ b/src/multi_assistant_service_plugin.c @@ -445,6 +445,9 @@ int multi_assistant_service_plugin_initialize(void) _wakeup_manager_interface.set_wake_word_audio_require_flag = (wakeup_manager_set_wake_word_audio_require_flag)dlsym(g_handle, MA_WAKEUP_MANAGER_FUNC_SET_WAKE_WORD_AUDIO_REQUIRE_FLAG); + _wakeup_manager_interface.set_assistant_language = + (wakeup_manager_set_assistant_language)dlsym(g_handle, + MA_WAKEUP_MANAGER_FUNC_SET_ASSISTANT_LANGUAGE); _wakeup_manager_interface.set_wakeup_event_callback = (wakeup_manager_set_wakeup_event_callback)dlsym(g_handle, MA_WAKEUP_MANAGER_FUNC_SET_WAKEUP_EVENT_CALLBACK); @@ -974,6 +977,25 @@ int multi_assistant_service_plugin_set_wake_word_audio_require_flag(const char* return ret; } +int multi_assistant_service_plugin_assistant_language(const char* appid, const char* language) +{ + int ret = -1; + if (NULL != g_handle) { + wakeup_manager_set_assistant_language func = _wakeup_manager_interface.set_assistant_language; + if (NULL == func) { + MAS_LOGE("[ERROR] symbol lookup failed : %s", MA_WAKEUP_MANAGER_FUNC_SET_ASSISTANT_LANGUAGE); + } else { + ret = func(appid, language); + if (0 != ret) { + MAS_LOGE("[ERROR] Fail to set assistant language, ret(%d)", ret); + } + } + } else { + MAS_LOGE("[ERROR] g_handle is not valid"); + } + return ret; +} + int multi_assistant_service_plugin_set_callbacks(void) { int ret = multi_assistant_service_plugin_set_wakeup_event_callback(__wakeup_event_cb, NULL);