Add wakeup manager activation/deactivation logic
authorJi-hoon Lee <dalton.lee@samsung.com>
Tue, 30 Apr 2019 01:14:40 +0000 (10:14 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Thu, 2 May 2019 11:27:46 +0000 (20:27 +0900)
Change-Id: I613f58a71a28641dc7e700c65b681d26d441279f

CMakeLists.txt
plugins/wakeup-manager/inc/wakeup_manager.h
plugins/wakeup-manager/src/wakeup_audio_manager.cpp
plugins/wakeup-manager/src/wakeup_manager.cpp
src/multi_assistant_service.c

index 6bf6f95..59845fa 100644 (file)
@@ -27,6 +27,7 @@ pkg_check_modules(pkgs REQUIRED
        glib-2.0
        libxml-2.0
        multi-assistant
+       vconf
 )
 
 # SET FLAG ---------------------------------------------------------------------------------------
index c6ca42c..168975a 100644 (file)
@@ -98,6 +98,7 @@ public:
        void set_last_wakeup_event_info(wakeup_event_info info);
 
        bool change_manager_state(wakeup_manager_state_e state);
+       wakeup_manager_state_e get_manager_state();
 private:
        class CEngineEventObserver : public IEngineEventObserver
        {
index cd6f69a..be49e0b 100644 (file)
@@ -206,6 +206,11 @@ int CAudioManager::initialize(void)
                audio_in_destroy(mAudioIn);
                return -1;
        }
+
+       ret = audio_in_pause(mAudioIn);
+       if (AUDIO_IO_ERROR_NONE != ret) {
+               MWR_LOGD("[Recorder ERROR] Fail to pause audio in : %d", ret);
+       }
 #endif
        return 0;
 }
@@ -332,6 +337,12 @@ void CAudioManager::stop_recording()
                mStopRecorderThread.store(true);
                mRecorderThread.join();
        }
+#ifndef TV_PRODUCT
+       int ret = audio_in_pause(mAudioIn);
+       if (AUDIO_IO_ERROR_NONE != ret) {
+               MWR_LOGD("[Recorder ERROR] Fail to pause audio in : %d", ret);
+       }
+#endif
 }
 
 void CAudioManager::start_recording()
@@ -366,6 +377,10 @@ void CAudioManager::start_recording()
                g_bt_extend_count = 0;
        }
 #else
+       int ret = audio_in_resume(mAudioIn);
+       if (AUDIO_IO_ERROR_NONE != ret) {
+               MWR_LOGD("[Recorder ERROR] Fail to resume audio in : %d", ret);
+       }
        mStopRecorderThread.store(false);
        MWR_LOGD("Starting recorder thread");
        mRecorderThread = thread(&CAudioManager::recorder_thread_func, this);
index 72968a2..be9d791 100644 (file)
@@ -255,7 +255,13 @@ bool CWakeupManager::activate(void)
 {
        MWR_LOGD("[ENTER]");
 
+       if (WAKEUP_MANAGER_STATE_INACTIVE != mWakeupManagerState)
+               return false;
+
        change_manager_state(WAKEUP_MANAGER_STATE_LISTENING);
+       if (mWakeupEngineManager.get_audio_data_required()) {
+               mAudioManager.start_recording();
+       }
 
        MWR_LOGD("[END]");
        return true;
@@ -265,6 +271,10 @@ bool CWakeupManager::deactivate(void)
 {
        MWR_LOGD("[ENTER]");
 
+       if (WAKEUP_MANAGER_STATE_INACTIVE == mWakeupManagerState)
+               return false;
+
+       mAudioManager.stop_recording();
        change_manager_state(WAKEUP_MANAGER_STATE_INACTIVE);
 
        MWR_LOGD("[END]");
@@ -342,10 +352,16 @@ bool CWakeupManager::set_streaming_mode(STREAMING_MODE mode)
 
 bool CWakeupManager::change_manager_state(wakeup_manager_state_e state)
 {
+       mWakeupManagerState = state;
        mWakeupEngineManager.update_manager_state(state);
        return true;
 }
 
+wakeup_manager_state_e CWakeupManager::get_manager_state()
+{
+       return mWakeupManagerState;
+}
+
 bool CWakeupManager::update_voice_feedback_state(string appid, bool state)
 {
        MWR_LOGD("[ENTER]");
@@ -411,6 +427,8 @@ bool CWakeupManager::update_result_state(string appid, int state)
 bool CWakeupManager::process_event(ma_plugin_event_e event, void* data, int len)
 {
        MWR_LOGD("[ENTER]");
+       if (WAKEUP_MANAGER_STATE_INACTIVE == mWakeupManagerState)
+               return false;
 
        // LOCK REQUIRED
        if (MA_PLUGIN_EVENT_VOICE_KEY_PRESSED == event) {
@@ -440,6 +458,7 @@ bool CWakeupManager::process_event(ma_plugin_event_e event, void* data, int len)
                        mVoiceKeyPressed = false;
                        mAudioManager.voice_key_pressed_set(mVoiceKeyPressed);
                        mAudioManager.finalize_speech_data();
+
                        if (mWakeupEngineManager.get_audio_data_required()) {
                                /* Restart recorder thread using standard mic */
                                mAudioManager.start_recording();
@@ -664,6 +683,7 @@ bool CWakeupManager::CEngineEventObserver::on_audio_data_require_status(string e
 {
        MWR_LOGD("[ENTER]");
        if (nullptr == mWakeupManager) return false;
+       if (WAKEUP_MANAGER_STATE_INACTIVE == mWakeupManager->get_manager_state()) return false;
 
        CAudioManager *audio_manager = mWakeupManager->get_audio_manager();
        CWakeupEngineManager *engine_manager = mWakeupManager->get_engine_manager();
index 84ac806..ca29e43 100644 (file)
@@ -21,6 +21,7 @@
 #include <aul.h>
 #include <malloc.h>
 #include <Ecore.h>
+#include <vconf.h>
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -36,6 +37,7 @@
 
 static const char *g_current_lang = "en_US";
 
+#define MULTI_ASSISTANT_SETTINGS_ACTIVATED "db/multi-assistant/activated"
 
 #define MAX_MACLIENT_INFO_NUM 16
 #define MAX_WAKEUP_WORDS_NUM 4
@@ -471,9 +473,23 @@ int __mas_assistant_info_cb(const char* appid, const char* name,
        return 0;
 }
 
+static void mas_active_state_changed_cb(keynode_t* key, void* data)
+{
+       int vconf_value = 0;
+       if (vconf_get_bool(MULTI_ASSISTANT_SETTINGS_ACTIVATED, &vconf_value) == 0) {
+               MAS_LOGD("multi-assistant active state : %d\n", vconf_value);
+
+               if (vconf_value) {
+                       multi_assistant_service_plugin_activate();
+               } else {
+                       multi_assistant_service_plugin_deactivate();
+               }
+       }
+}
+
 static int init_wakeup(void)
 {
-       MAS_LOGD("[Enter] init_wakeup ");
+       MAS_LOGD("[Enter] init_wakeup");
 
        int ret = mas_dbus_open_connection();
        if (0 != ret) {
@@ -521,9 +537,14 @@ static int init_wakeup(void)
                return -1;
        }
 
-       if (0 != multi_assistant_service_plugin_activate()) {
-               MAS_LOGE("Fail to ws activate");
-               return -1;
+       if (0 == vconf_notify_key_changed(MULTI_ASSISTANT_SETTINGS_ACTIVATED, mas_active_state_changed_cb, NULL)) {
+               /* Activate / deactivate according to the vconf key setting */
+               mas_active_state_changed_cb(NULL, NULL);
+       } else {
+               /* Multi-assistant needs to be enabled by default, unless disabled explicitly */
+               multi_assistant_service_plugin_activate();
+               vconf_set_bool(MULTI_ASSISTANT_SETTINGS_ACTIVATED, 1);
+               vconf_notify_key_changed(MULTI_ASSISTANT_SETTINGS_ACTIVATED, mas_active_state_changed_cb, NULL);
        }
 
        return 0;
@@ -539,9 +560,7 @@ static void deinit_wakeup(void)
        }
 */
 
-       if (0 != multi_assistant_service_plugin_deactivate()) {
-               MAS_LOGE("Fail to ws deactivate");
-       }
+       vconf_ignore_key_changed(MULTI_ASSISTANT_SETTINGS_ACTIVATED, mas_active_state_changed_cb);
 
        int ret = mas_dbus_close_connection();
        if (0 != ret) {