Add support for setting assistant language 07/217707/2
authorJi-hoon Lee <dalton.lee@samsung.com>
Wed, 13 Nov 2019 10:56:26 +0000 (19:56 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Wed, 13 Nov 2019 12:17:58 +0000 (21:17 +0900)
Change-Id: Id7d6e6c48541088ec7004fcc2db27c3d473afdb3

12 files changed:
inc/multi_assistant_main.h
inc/multi_assistant_service_plugin.h
plugins/wakeup-manager/inc/wakeup_engine_manager.h
plugins/wakeup-manager/inc/wakeup_manager.h
plugins/wakeup-manager/inc/wakeup_manager_wrapper.h
plugins/wakeup-manager/src/wakeup_engine_manager.cpp
plugins/wakeup-manager/src/wakeup_manager.cpp
plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp
src/multi_assistant_dbus.c
src/multi_assistant_dbus_server.c
src/multi_assistant_service.c
src/multi_assistant_service_plugin.c

index 6c04aa6..8acd240 100644 (file)
@@ -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"
index dbfd673..48a9233 100644 (file)
@@ -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;
index c768f9b..d9d478c 100644 (file)
@@ -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);
index d574646..c6623a2 100644 (file)
@@ -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);
index 2df503e..d6d20a5 100644 (file)
@@ -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);
index ebc50a9..cef7b6d 100644 (file)
@@ -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);
index 1fa4387..a6a6281 100644 (file)
@@ -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]");
index 77549bb..49b24eb 100644 (file)
@@ -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]");
index ac92dba..53130d8 100644 (file)
@@ -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);
 
index 0d00f3e..40c9e13 100644 (file)
@@ -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;
index fc2f3cb..94b2fb4 100644 (file)
@@ -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);
index e62a25f..e7640f6 100644 (file)
@@ -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);