From: Ji-hoon Lee Date: Tue, 30 Apr 2019 01:14:40 +0000 (+0900) Subject: Add wakeup manager activation/deactivation logic X-Git-Tag: accepted/tizen/unified/20191001.062542~2^2~53 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a42ba2045c1065cf6e98e147f1a8da3a6f5786f8;p=platform%2Fcore%2Fuifw%2Fmulti-assistant-service.git Add wakeup manager activation/deactivation logic Change-Id: I613f58a71a28641dc7e700c65b681d26d441279f --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bf6f95..59845fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ pkg_check_modules(pkgs REQUIRED glib-2.0 libxml-2.0 multi-assistant + vconf ) # SET FLAG --------------------------------------------------------------------------------------- diff --git a/plugins/wakeup-manager/inc/wakeup_manager.h b/plugins/wakeup-manager/inc/wakeup_manager.h index c6ca42c..168975a 100644 --- a/plugins/wakeup-manager/inc/wakeup_manager.h +++ b/plugins/wakeup-manager/inc/wakeup_manager.h @@ -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 { diff --git a/plugins/wakeup-manager/src/wakeup_audio_manager.cpp b/plugins/wakeup-manager/src/wakeup_audio_manager.cpp index cd6f69a..be49e0b 100644 --- a/plugins/wakeup-manager/src/wakeup_audio_manager.cpp +++ b/plugins/wakeup-manager/src/wakeup_audio_manager.cpp @@ -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); diff --git a/plugins/wakeup-manager/src/wakeup_manager.cpp b/plugins/wakeup-manager/src/wakeup_manager.cpp index 72968a2..be9d791 100644 --- a/plugins/wakeup-manager/src/wakeup_manager.cpp +++ b/plugins/wakeup-manager/src/wakeup_manager.cpp @@ -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(); diff --git a/src/multi_assistant_service.c b/src/multi_assistant_service.c index 84ac806..ca29e43 100644 --- a/src/multi_assistant_service.c +++ b/src/multi_assistant_service.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -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) {