Send change_assistant request to panel on wakeup event 46/191746/3
authorJi-hoon Lee <dalton.lee@samsung.com>
Tue, 23 Oct 2018 06:56:24 +0000 (15:56 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Tue, 23 Oct 2018 07:29:37 +0000 (16:29 +0900)
Change-Id: I60c91cd2aad89eed3bdaaf930aee9c0eb4e4620a

inc/multi_assistant_main.h
inc/multi_assistant_service.h
src/multi_assistant_dbus.c
src/multi_assistant_dbus.h
src/multi_assistant_service.c
src/multi_assistant_service_plugin.c

index 3394f8711d1e3ed2cb77fdd7260a2e27e33ec6f5..7ba7fcb8ebd6a36611b962944ab86486668a7e03 100644 (file)
@@ -68,6 +68,7 @@
 
 #define MAS_UI_METHOD_SEND_ASR_RESULT                  "mas_ui_method_send_asr_result"
 #define MAS_UI_METHOD_SEND_RESULT                              "mas_ui_method_send_result"
+#define MAS_UI_METHOD_CHANGE_ASSISTANT                 "mas_ui_method_change_assistant"
 #define MAS_UI_METHOD_ERROR                                            "mas_ui_method_error"
 
 
index 009ee7cc56ffd882fd04ee9880726049d37ca16a..017ec20b513d926ee14c493accc6d75e2267051b 100644 (file)
@@ -51,6 +51,8 @@ int mas_get_client_pid_by_wakeup_word(const char *wakeup_word);
 
 int mas_get_client_pid_by_appid(const char *appid);
 
+const char* mas_get_client_appid_by_pid(int pid);
+
 int mas_set_current_client_by_wakeup_word(const char *wakeup_word);
 
 int mas_set_current_client_by_appid(const char *appid);
index b020b7a1fadad235459145cfd338c8a9270022b4..fa6aa54bcda60223f77463a959fe2bca749a9bcc 100644 (file)
@@ -449,6 +449,46 @@ int masc_ui_dbus_send_result(int pid, const char* display_text, const char* utte
        return 0;
 }
 
+int masc_ui_dbus_change_assistant(char* app_id)
+{
+       if (0 != __dbus_check()) {
+               return -1; //MAS_ERROR_OPERATION_FAILED;
+       }
+
+       if (NULL == app_id) {
+               MAS_LOGE("@@ Request multi-assistant send change assistant request : Fail to make message");
+               return -1; //MA_ERROR_OPERATION_FAILED;
+       } else {
+               MAS_LOGD("[DEBUG] multi-assistant send change assistant request app_id(%s)", app_id);
+       }
+
+       DBusMessage* msg;
+
+       msg = dbus_message_new_method_call(
+                         MA_UI_CLIENT_SERVICE_NAME,
+                         MA_UI_CLIENT_SERVICE_OBJECT_PATH,
+                         MA_UI_CLIENT_SERVICE_INTERFACE,
+                         MAS_UI_METHOD_CHANGE_ASSISTANT);
+
+       dbus_message_append_args(msg,
+               DBUS_TYPE_STRING, &app_id,
+               DBUS_TYPE_INVALID);
+
+       dbus_message_set_no_reply(msg, TRUE);
+
+       if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
+               MAS_LOGE("[Dbus ERROR] Fail to Send");
+               return -1; // MAS_ERROR_OPERATION_FAILED;
+       } else {
+               MAS_LOGD("[Dbus DEBUG] Success to Send change assistant request");
+               dbus_connection_flush(g_conn_sender);
+       }
+
+       dbus_message_unref(msg);
+
+       return 0;
+}
+
 int masc_ui_dbus_send_error_message(int reason, const char* err_msg)
 {
        if (NULL == g_conn_sender) {
index 3b54aa418573b2c597e62e98dec911ec5ce59fb3..76af0688232e4a9d68e7b3814b00fc8a2ca77cba 100644 (file)
@@ -37,6 +37,8 @@ int masc_ui_dbus_send_asr_result(int pid, int event, char* asr_result);
 
 int masc_ui_dbus_send_result(int pid, const char* display_text, const char* utterance_text, const char* result_json);
 
+int masc_ui_dbus_change_assistant(char* app_id);
+
 int masc_ui_dbus_send_error_message(int reason, const char* err_msg);
 
 
index 62e3a9abf4d3723a4f656541998d92c6c081f69b..c35f94beadc5a7aa99d24519d01fbec2581507b2 100644 (file)
@@ -510,7 +510,7 @@ static const char* __get_client_appid_by_wakeup_word(const char *wakeup_word)
 
        if (NULL == wakeup_word) return NULL;
 
-       for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && appid == NULL; loop++) {
+       for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && NULL == appid; loop++) {
                if (g_maclient_info[loop].used &&
                        strlen(g_maclient_info[loop].appid) > 0) {
                        for (int inner_loop = 0; inner_loop < MAX_WAKEUP_WORDS_NUM; inner_loop++) {
@@ -525,7 +525,7 @@ static const char* __get_client_appid_by_wakeup_word(const char *wakeup_word)
 
        /* Perform extended search, by eliminating blank characters */
        if (NULL == appid) {
-               for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && appid == NULL; loop++) {
+               for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && NULL == appid; loop++) {
                        if (g_maclient_info[loop].used &&
                                strlen(g_maclient_info[loop].appid) > 0) {
                                for (int inner_loop = 0; inner_loop < MAX_WAKEUP_WORDS_NUM; inner_loop++) {
@@ -577,6 +577,17 @@ int mas_get_client_pid_by_appid(const char *appid)
        return ret;
 }
 
+const char* mas_get_client_appid_by_pid(int pid)
+{
+       const char *ret = NULL;
+       ma_client_s *client = NULL;
+       client = ma_client_find_by_pid(pid);
+       if (client) {
+               ret = client->appid;
+       }
+       return ret;
+}
+
 int mas_get_client_pid_by_wakeup_word(const char *wakeup_word)
 {
        const char *appid = __get_client_appid_by_wakeup_word(wakeup_word);
@@ -585,20 +596,46 @@ int mas_get_client_pid_by_wakeup_word(const char *wakeup_word)
 
 int mas_set_current_client_by_wakeup_word(const char *wakeup_word)
 {
+       int loop;
        int ret = -1;
 
-       for (int loop = 0; loop < MAX_MACLIENT_INFO_NUM; loop++) {
+       for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && -1 == ret; loop++) {
                if (g_maclient_info[loop].used &&
                        strlen(g_maclient_info[loop].appid) > 0) {
                        for (int inner_loop = 0; inner_loop < MAX_WAKEUP_WORDS_NUM; inner_loop++) {
                                if (strlen(g_maclient_info[loop].wakeup_word[inner_loop]) > 0) {
                                        if (0 == strncmp(wakeup_word, g_maclient_info[loop].wakeup_word[inner_loop], MAX_WAKEUP_WORD_LEN)) {
                                                g_current_maclient_info = loop;
+                                               ret = 0;
+                                       }
+                               }
+                       }
+               }
+       }
+       /* Perform extended search, by eliminating blank characters */
+       if (ret == -1) {
+               for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && -1 == ret; loop++) {
+                       if (g_maclient_info[loop].used &&
+                               strlen(g_maclient_info[loop].appid) > 0) {
+                               for (int inner_loop = 0; inner_loop < MAX_WAKEUP_WORDS_NUM; inner_loop++) {
+                                       if (strlen(g_maclient_info[loop].wakeup_word[inner_loop]) > 0) {
+                                               char comparand[MAX_WAKEUP_WORD_LEN];
+                                               int comparand_index = 0;
+                                               for (int index = 0; index < MAX_WAKEUP_WORD_LEN; index++) {
+                                                       if (' ' != g_maclient_info[loop].wakeup_word[inner_loop][index]) {
+                                                               comparand[comparand_index++] = g_maclient_info[loop].wakeup_word[inner_loop][index];
+                                                       }
+                                               }
+                                               if (0 == strncmp(wakeup_word, comparand, MAX_WAKEUP_WORD_LEN)) {
+                                                       g_current_maclient_info = loop;
+                                                       ret = 0;
+                                               }
                                        }
                                }
                        }
                }
        }
+
        return ret;
 }
 
index 229b2c93bb858f707fedb2d45a67e42ba344e91c..1e4a7f71dd7ccf0f601589a2489858d77d7934b0 100644 (file)
@@ -81,11 +81,14 @@ Eina_Bool __request_speech_data(void *data)
 {
        MAS_LOGD("[ENTER]");
 
+       int pid = -1;
        char *wakeup_word = (char*)data;
+       if (!wakeup_word) return EINA_FALSE;
 
        mas_set_current_client_by_wakeup_word(wakeup_word);
-       if (mas_get_client_pid_by_wakeup_word(wakeup_word) != -1) {
+       if ((pid = mas_get_client_pid_by_wakeup_word(wakeup_word)) != -1) {
                MAS_LOGD("MA Client with wakeup word %s exists, requesting speech data", (wakeup_word ? wakeup_word : "NULL"));
+               masc_ui_dbus_change_assistant(mas_get_client_appid_by_pid(pid));
                ma_client_set_temp_speech_data_requested(1);
                int ret = wakeup_service_request_speech_data();
                if (0 != ret) {