Send masc_ui_dbus messages only when ui_panel_enabled is true
authorJi-hoon Lee <dalton.lee@samsung.com>
Thu, 27 Jun 2019 05:42:59 +0000 (14:42 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Thu, 27 Jun 2019 05:42:59 +0000 (14:42 +0900)
Change-Id: I1e6a3fb59aaac6e9d16d5ce6fada612c14b229de

inc/multi_assistant_service_plugin.h
plugins/wakeup-manager/inc/wakeup_manager.h
plugins/wakeup-manager/inc/wakeup_manager_wrapper.h
plugins/wakeup-manager/src/wakeup_manager.cpp
plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp
src/multi_assistant_service_plugin.c

index 83c3660..325b988 100644 (file)
@@ -32,10 +32,17 @@ typedef enum {
        MA_PLUGIN_EVENT_VOICE_KEY_RELEASED,
 } ma_plugin_event_e;
 
+typedef struct {
+       int plugin_version;
+       bool ui_panel_enabled;
+} ma_plugin_settings;
+
 int multi_assistant_service_plugin_initialize(void);
 
 int multi_assistant_service_plugin_deinitialize(void);
 
+int multi_assistant_service_plugin_get_settings(ma_plugin_settings **settings, size_t *struct_size);
+
 int multi_assistant_service_plugin_set_language(const char* language);
 
 int multi_assistant_service_plugin_add_assistant_wakeup_word(const char* appid, const char* wakeup_word, const char* language);
@@ -97,6 +104,8 @@ int multi_assistant_service_plugin_set_error_callback(wakeup_service_error_cb ca
 typedef int (*wakeup_manager_initialize)(void);
 #define MA_WAKEUP_MANAGER_FUNC_DEINITIALIZE "wakeup_manager_deinitialize"
 typedef int (*wakeup_manager_deinitialize)(void);
+#define MA_WAKEUP_MANAGER_FUNC_GET_SETTINGS "wakeup_manager_get_settings"
+typedef int (*wakeup_manager_get_settings)(ma_plugin_settings **settings, size_t *struct_size);
 #define MA_WAKEUP_MANAGER_FUNC_ADD_ASSISTANT_WAKEUP_WORD "wakeup_manager_add_assistant_wakeup_word"
 typedef int (*wakeup_manager_add_assistant_wakeup_word)(const char* appid, const char* wakeup_word, const char* language);
 #define MA_WAKEUP_MANAGER_FUNC_ADD_ASSISTANT_LANGUAGE "wakeup_manager_add_assistant_language"
@@ -151,6 +160,7 @@ typedef int (*wakeup_manager_set_error_callback)(wakeup_service_error_cb callbac
 typedef struct {
        wakeup_manager_initialize                                                                initialize;
        wakeup_manager_deinitialize                                                              deinitialize;
+       wakeup_manager_get_settings                                                              get_settings;
        wakeup_manager_add_assistant_wakeup_word                                 add_assistant_wakeup_word;
        wakeup_manager_add_assistant_language                                    add_assistant_language;
        wakeup_manager_set_assistant_wakeup_engine                               set_assistant_wakeup_engine;
index 532ad5c..2a7d80e 100644 (file)
@@ -93,6 +93,7 @@ public:
        CWakeupPolicy* get_wakeup_policy();
        CWakeupEngineManager* get_engine_manager();
        CAudioManager* get_audio_manager();
+       CWakeupSettings* get_wakeup_settings();
 
        vector<IWakeupEventObserver*> get_observers();
        void set_last_wakeup_event_info(wakeup_event_info info);
index ddb030c..6984f06 100644 (file)
@@ -89,10 +89,17 @@ typedef enum {
        MA_SYSTEM_VOLUME_EVENT_RECOVER
 } ma_system_volume_event_e;
 
+typedef struct {
+       int plugin_version;
+       bool ui_panel_enabled;
+} ma_plugin_settings;
+
 EXPORT_API int wakeup_manager_initialize(void);
 
 EXPORT_API int wakeup_manager_deinitialize(void);
 
+EXPORT_API int wakeup_manager_get_settings(ma_plugin_settings **settings, size_t *struct_size);
+
 EXPORT_API int wakeup_manager_add_assistant_wakeup_word(const char* appid, const char* wakeup_word, const char* language);
 
 EXPORT_API int wakeup_manager_add_assistant_language(const char* appid, const char* language);
index 2986aa9..76f9562 100644 (file)
@@ -662,6 +662,11 @@ CAudioManager* CWakeupManager::get_audio_manager()
        return &mAudioManager;
 }
 
+CWakeupSettings* CWakeupManager::get_wakeup_settings()
+{
+       return &mWakeupSettings;
+}
+
 bool CWakeupManager::CEngineEventObserver::on_wakeup_event(string engine_name, wakeup_event_info info)
 {
        MWR_LOGD("[ENTER]");
index e15e73b..594494b 100644 (file)
@@ -82,6 +82,25 @@ int wakeup_manager_deinitialize(void)
        return 0;
 }
 
+int wakeup_manager_get_settings(ma_plugin_settings **settings, size_t *struct_size)
+{
+       if (NULL == settings || NULL == struct_size) {
+               MWR_LOGD("[ERROR] Parameter is invalid, settings(%p), struct_size(%p)", settings, struct_size);
+               return -1;
+       }
+       CWakeupSettings* wakeup_settings = g_wakeup_manager.get_wakeup_settings();
+       if (wakeup_settings) {
+               const int PLUGIN_VERSION = 1;
+               static ma_plugin_settings current_settings;
+               current_settings.plugin_version = PLUGIN_VERSION;
+               current_settings.ui_panel_enabled = wakeup_settings->get_ui_panel_enabled();
+               *struct_size = sizeof(current_settings);
+               *settings = &current_settings;
+       }
+
+       return 0;
+}
+
 int wakeup_manager_add_assistant_wakeup_word(const char* appid, const char* wakeup_word, const char* language)
 {
        MWR_LOGD("[ENTER]");
index 00a3606..9308345 100644 (file)
@@ -50,6 +50,18 @@ static int g_count = 1;
 static void *g_handle = NULL;
 
 static wakeup_manager_interface _wakeup_manager_interface = { NULL, };
+static ma_plugin_settings* g_plugin_settings = NULL;
+
+static bool is_ui_panel_enabled()
+{
+       /* By default we assume the ui panel is always enabled unless explicitly turned off */
+       bool ret = true;
+       if (g_plugin_settings) {
+               ret = g_plugin_settings->ui_panel_enabled;
+       }
+       MAS_LOGD("UI Panel Enabled : %d", ret);
+       return ret;
+}
 
 #if 0 /* + TEST_CODE */
 Eina_Bool __send_asr_result(void *data)
@@ -90,10 +102,11 @@ Eina_Bool __launch_assistant_by_wakeup_appid_timer(char* appid)
        if (!appid) return ECORE_CALLBACK_CANCEL;
 
        bool use_custom_ui = mas_get_client_custom_ui_option_by_appid(appid);
-       masc_ui_dbus_enable_common_ui(!use_custom_ui);
+       bool ui_panel_enabled = is_ui_panel_enabled();
+       if (ui_panel_enabled) masc_ui_dbus_enable_common_ui(!use_custom_ui);
 
        mas_set_current_client_by_appid(appid);
-       masc_ui_dbus_change_assistant(appid);
+       if (ui_panel_enabled) masc_ui_dbus_change_assistant(appid);
        if ((pid = mas_get_client_pid_by_appid(appid)) != -1) {
                masc_dbus_active_state_change(pid, MA_ACTIVE_STATE_ACTIVE);
                /* Bring MA client to foreground - is there a better way instead of launching? */
@@ -129,13 +142,16 @@ static void __wakeup_event_cb(wakeup_event_info event, void* user_data)
 {
        MAS_LOGD("[SUCCESS] __wakeup_event_cb is called, wakeup_word(%s)", event.wakeup_word);
        int ret = -1;
-       int retry_cnt = 0;
-       while (0 != ret) {
-               ret = masc_ui_dbus_send_hello();
-               retry_cnt++;
-               if (5 < retry_cnt) {
-                       MAS_LOGE("[ERROR] Fail to receive reply for hello, ret(%d)", ret);
-                       break;
+
+       if (is_ui_panel_enabled()) {
+               int retry_cnt = 0;
+               while (0 != ret) {
+                       ret = masc_ui_dbus_send_hello();
+                       retry_cnt++;
+                       if (5 < retry_cnt) {
+                               MAS_LOGE("[ERROR] Fail to receive reply for hello, ret(%d)", ret);
+                               break;
+                       }
                }
        }
 
@@ -302,9 +318,11 @@ static void __error_cb(int error, const char* err_msg, void* user_data)
 {
        MAS_LOGD( "[SUCCESS] __error_cb is called, error(%d), err_msg(%s)", error, err_msg);
 
-       int ret = masc_ui_dbus_send_error_message(error, err_msg);
-       if (0 != ret) {
-               MAS_LOGE("[ERROR] Fail to send error message, ret(%d)", ret);
+       if (is_ui_panel_enabled()) {
+               int ret = masc_ui_dbus_send_error_message(error, err_msg);
+               if (0 != ret) {
+                       MAS_LOGE("[ERROR] Fail to send error message, ret(%d)", ret);
+               }
        }
 }
 
@@ -330,6 +348,9 @@ int multi_assistant_service_plugin_initialize(void)
        _wakeup_manager_interface.deinitialize =
                (wakeup_manager_deinitialize)dlsym(g_handle,
                MA_WAKEUP_MANAGER_FUNC_DEINITIALIZE);
+       _wakeup_manager_interface.get_settings =
+               (wakeup_manager_get_settings)dlsym(g_handle,
+               MA_WAKEUP_MANAGER_FUNC_GET_SETTINGS);
        _wakeup_manager_interface.add_assistant_wakeup_word =
                (wakeup_manager_add_assistant_wakeup_word)dlsym(g_handle,
                MA_WAKEUP_MANAGER_FUNC_ADD_ASSISTANT_WAKEUP_WORD);
@@ -418,6 +439,19 @@ int multi_assistant_service_plugin_initialize(void)
                                MAS_LOGE("[ERROR] Fail to initialize, ret(%d)", ret);
                        }
                }
+
+               wakeup_manager_get_settings get_settings_func = _wakeup_manager_interface.get_settings;
+
+               if (NULL == get_settings_func) {
+                       MAS_LOGE("[ERROR] symbol lookup failed : %s", MA_WAKEUP_MANAGER_FUNC_GET_SETTINGS);
+               } else {
+                       size_t struct_size;
+                       ret = get_settings_func(&g_plugin_settings, &struct_size);
+                       if (0 != ret || struct_size != sizeof(ma_plugin_settings)) {
+                               MAS_LOGE("[ERROR] Fail to get settings, ret(%d), size %zu", ret, struct_size);
+                               g_plugin_settings = NULL;
+                       }
+               }
        } else {
                MAS_LOGE("[ERROR] g_handle is not valid");
        }
@@ -455,6 +489,25 @@ int multi_assistant_service_plugin_deinitialize(void)
        return ret;
 }
 
+int multi_assistant_service_plugin_get_settings(ma_plugin_settings **settings, size_t *struct_size)
+{
+       int ret = -1;
+       if (NULL != g_handle) {
+               wakeup_manager_get_settings func = _wakeup_manager_interface.get_settings;
+               if (NULL == func) {
+                       MAS_LOGE("[ERROR] symbol lookup failed : %s", MA_WAKEUP_MANAGER_FUNC_GET_SETTINGS);
+               } else {
+                       ret = func(settings, struct_size);
+                       if (0 != ret) {
+                               MAS_LOGE("[ERROR] Fail to get settings, ret(%d)", ret);
+                       }
+               }
+       } else {
+               MAS_LOGE("[ERROR] g_handle is not valid");
+       }
+       return ret;
+}
+
 int multi_assistant_service_plugin_set_language(const char* language)
 {
        int ret = -1;