int mas_launch_client_by_wakeup_word(const char *wakeup_word);
+int mas_prelaunch_default_assistant();
+
typedef enum {
CLIENT_LAUNCH_MODE_ACTIVATION,
CLIENT_LAUNCH_MODE_PRELAUNCH,
typedef int (*wakeup_manager_set_follow_up_streaming_callback)(wakeup_service_speech_streaming_cb callback, void* user_data);
#define MA_WAKEUP_MANAGER_FUNC_SET_SPEECH_STATUS_CALLBACK "wakeup_manager_set_speech_status_callback"
typedef int (*wakeup_manager_set_speech_status_callback)(wakeup_service_speech_status_cb callback, void* user_data);
+#define MA_WAKEUP_MANAGER_FUNC_SET_SETTING_CHANGED_CALLBACK "wakeup_manager_set_setting_changed_callback"
+typedef int (*wakeup_manager_set_setting_changed_callback)(wakeup_service_setting_changed_cb callback, void* user_data);
#define MA_WAKEUP_MANAGER_FUNC_SET_ERROR_CALLBACK "wakeup_manager_set_error_callback"
typedef int (*wakeup_manager_set_error_callback)(wakeup_service_error_cb callback, void* user_data);
#define MA_WAKEUP_MANAGER_FUNC_SET_STREAMING_SECTION_CHANGED_CALLBACK "wakeup_manager_set_streaming_section_changed_callback"
wakeup_manager_set_previous_utterance_streaming_callback set_previous_utterance_streaming_callback;
wakeup_manager_set_follow_up_streaming_callback set_follow_up_streaming_callback;
wakeup_manager_set_speech_status_callback set_speech_status_callback;
+ wakeup_manager_set_setting_changed_callback set_setting_changed_callback;
wakeup_manager_set_error_callback set_error_callback;
wakeup_manager_set_streaming_section_changed_callback set_streaming_section_changed_callback;
} wakeup_manager_interface;
typedef void (*wakeup_service_speech_status_cb)(wakeup_speech_status_e status, void *user_data);
+typedef void (*wakeup_service_setting_changed_cb)(void *user_data);
+
typedef void (*wakeup_service_error_cb)(int error, const char* err_msg, void* user_data);
typedef void (*wakeup_service_streaming_section_changed_cb)(ma_audio_streaming_data_section_e section, void* user_data);
virtual void on_audio_streaming_data_section(ma_audio_streaming_data_section_e section) = 0;
};
+class ISettingValueObserver {
+public:
+ virtual ~ISettingValueObserver() = default;
+ virtual void on_value_changed() = 0;
+};
+
/* If a wakeup event is raised by pressing a voice key,
the wakeup_engine attribute of wakeup_event_info will have the following value */
#define WAKEUP_ENGINE_VOICE_KEY "voice_key"
class CWakeupManager
{
public:
- CWakeupManager(IWakeupEventObserver *observer);
+ CWakeupManager(IWakeupEventObserver* wakeup_observer, ISettingValueObserver* setting_observer);
virtual ~CWakeupManager();
CWakeupManager(const CWakeupManager&) = delete;
bool initialize();
bool deinitialize();
- void subscribe(IWakeupEventObserver *observer);
- void unsubscribe(IWakeupEventObserver *observer);
+ void subscribe_wakeup_observer(IWakeupEventObserver* observer);
+ void unsubscribe_wakeup_observer(IWakeupEventObserver* observer);
+
+ void subscribe_setting_observer(ISettingValueObserver* observer);
+ void unsubscribe_setting_observer(ISettingValueObserver* observer);
bool activate();
bool deactivate();
CAudioManager* get_audio_manager();
CWakeupSettings* get_wakeup_settings();
- vector<IWakeupEventObserver*> get_observers();
+ vector<IWakeupEventObserver*> get_wakeup_observers();
void set_last_wakeup_event_info(wakeup_event_info wakeup_info);
+ vector<ISettingValueObserver*> get_setting_observers();
+
bool change_manager_state(wakeup_manager_state_e state);
wakeup_manager_state_e get_manager_state();
map<string, bool> mAssistantSupportsCurrentLanguage;
map<string, bool> mAssistantEnabled;
- vector<IWakeupEventObserver*> mObservers;
+ vector<IWakeupEventObserver*> mWakeupObservers;
+ vector<ISettingValueObserver*> mSettingObservers;
unique_ptr<CWakeupPolicy> mWakeupPolicy;
typedef void (*wakeup_service_speech_status_cb)(wakeup_service_speech_status_e status, void *user_data);
+typedef void (*wakeup_service_setting_changed_cb)( void *user_data);
+
typedef void (*wakeup_service_error_cb)(int error, const char* err_msg, void* user_data);
typedef void (*wakeup_service_audio_data_require_status_cb)(bool require, void* user_data);
EXPORT_API int wakeup_manager_set_speech_status_callback(wakeup_service_speech_status_cb callback, void* user_data);
+EXPORT_API int wakeup_manager_set_setting_changed_callback(wakeup_service_setting_changed_cb callback, void* user_data);
+
EXPORT_API int wakeup_manager_set_error_callback(wakeup_service_error_cb callback, void* user_data);
EXPORT_API int wakeup_manager_set_streaming_section_changed_callback(wakeup_service_streaming_section_changed_cb callback, void* user_data);
return ret;
}
-CWakeupManager::CWakeupManager(IWakeupEventObserver *observer)
+CWakeupManager::CWakeupManager(IWakeupEventObserver* wakeup_observer, ISettingValueObserver* setting_observer)
{
initialize_wakeup_event_info(&mLastWakeupEventInfo);
- if (observer) {
- subscribe(observer);
+ if (wakeup_observer) {
+ subscribe_wakeup_observer(wakeup_observer);
+ }
+ if (setting_observer) {
+ subscribe_setting_observer(setting_observer);
}
}
return true;
}
-void CWakeupManager::subscribe(IWakeupEventObserver *observer)
+void CWakeupManager::subscribe_wakeup_observer(IWakeupEventObserver *observer)
{
- mObservers.push_back(observer);
+ mWakeupObservers.push_back(observer);
}
-void CWakeupManager::unsubscribe(IWakeupEventObserver *observer)
+void CWakeupManager::unsubscribe_wakeup_observer(IWakeupEventObserver *observer)
{
- auto iter = find(mObservers.begin(), mObservers.end(), observer);
- if (iter != mObservers.end()) {
- mObservers.erase(iter);
+ auto iter = find(mWakeupObservers.begin(), mWakeupObservers.end(), observer);
+ if (iter != mWakeupObservers.end()) {
+ mWakeupObservers.erase(iter);
+ }
+}
+
+void CWakeupManager::subscribe_setting_observer(ISettingValueObserver* observer)
+{
+ mSettingObservers.push_back(observer);
+}
+
+void CWakeupManager::unsubscribe_setting_observer(ISettingValueObserver* observer)
+{
+ auto iter = find(mSettingObservers.begin(), mSettingObservers.end(), observer);
+ if (iter != mSettingObservers.end()) {
+ mSettingObservers.erase(iter);
}
}
set_last_wakeup_event_info(wakeup_info);
mWakeupEngineManager.set_selected_wakeup_info(wakeup_info);
- for (const auto& observer : mObservers) {
+ for (const auto& observer : mWakeupObservers) {
observer->on_wakeup(wakeup_info);
}
}
return true;
}
-vector<IWakeupEventObserver*> CWakeupManager::get_observers()
+vector<IWakeupEventObserver*> CWakeupManager::get_wakeup_observers()
{
- return mObservers;
+ return mWakeupObservers;
}
void CWakeupManager::set_last_wakeup_event_info(wakeup_event_info wakeup_info)
mLastWakeupEventInfo = wakeup_info;
}
+vector<ISettingValueObserver*> CWakeupManager::get_setting_observers()
+{
+ return mSettingObservers;
+}
+
static Eina_Bool streaming_duration_expired(void *data)
{
MWR_LOGD("[ENTER]");
}
unsigned char final_buffer[2] = {'\0', };
- vector<IWakeupEventObserver*> observers = wakeup_manager->get_observers();
+ vector<IWakeupEventObserver*> observers = wakeup_manager->get_wakeup_observers();
for (const auto& observer : observers) {
observer->on_streaming_audio_data(
WAKEUP_SPEECH_STREAMING_EVENT_FINISH, final_buffer, sizeof(final_buffer));
{
if (nullptr == mWakeupManager) return false;
- vector<IWakeupEventObserver*> observers = mWakeupManager->get_observers();
+ vector<IWakeupEventObserver*> observers = mWakeupManager->get_wakeup_observers();
for (const auto& observer : observers) {
observer->on_streaming_audio_data(event, buffer, len);
}
{
if (nullptr == mWakeupManager) return false;
- vector<IWakeupEventObserver*> observers = mWakeupManager->get_observers();
+ vector<IWakeupEventObserver*> observers = mWakeupManager->get_wakeup_observers();
for (const auto& observer : observers) {
observer->on_audio_streaming_data_section(section);
}
mWakeupManager->set_last_wakeup_event_info(wakeup_info);
engine_manager->set_selected_wakeup_info(wakeup_info);
- vector<IWakeupEventObserver*> observers = mWakeupManager->get_observers();
+ vector<IWakeupEventObserver*> observers = mWakeupManager->get_wakeup_observers();
for (const auto& observer : observers) {
observer->on_wakeup(wakeup_info);
}
{
if (nullptr == mWakeupManager) return false;
- vector<IWakeupEventObserver*> observers = mWakeupManager->get_observers();
+ vector<IWakeupEventObserver*> observers = mWakeupManager->get_wakeup_observers();
for (const auto& observer : observers) {
observer->on_streaming_audio_data(event, buffer, len);
}
{
if (nullptr == mWakeupManager || nullptr == language) return false;
mWakeupManager->set_language(std::string(language));
+ vector<ISettingValueObserver*> observers = mWakeupManager->get_setting_observers();
+ for (const auto& observer : observers) {
+ observer->on_value_changed();
+ }
return true;
}
{
if (nullptr == mWakeupManager || nullptr == appid) return false;
mWakeupManager->set_assistant_enabled(std::string(appid), enabled);
+ vector<ISettingValueObserver*> observers = mWakeupManager->get_setting_observers();
+ for (const auto& observer : observers) {
+ observer->on_value_changed();
+ }
return true;
}
{
if (nullptr == mWakeupManager || nullptr == appid) return false;
mWakeupManager->set_default_assistant(std::string(appid));
+ vector<ISettingValueObserver*> observers = mWakeupManager->get_setting_observers();
+ for (const auto& observer : observers) {
+ observer->on_value_changed();
+ }
return true;
}
static wakeup_service_speech_status_cb g_speech_status_cb;
static void* g_speech_status_user_data;
+static wakeup_service_setting_changed_cb g_setting_changed_cb;
+static void* g_setting_changed_user_data;
+
static wakeup_service_error_cb g_error_cb;
static void* g_error_user_data;
void on_audio_streaming_data_section(ma_audio_streaming_data_section_e section) override;
};
+class CSettingValueObserver : public ISettingValueObserver
+{
+ void on_value_changed() override;
+};
+
static CWakeupEventObserver g_wakeup_event_observer;
-static CWakeupManager g_wakeup_manager(&g_wakeup_event_observer);
+static CSettingValueObserver g_setting_value_observer;
+static CWakeupManager g_wakeup_manager(&g_wakeup_event_observer, &g_setting_value_observer);
int wakeup_manager_initialize(void)
{
g_speech_status_cb = NULL;
g_speech_status_user_data = NULL;
+ g_setting_changed_cb = NULL;
+ g_setting_changed_user_data = NULL;
+
g_error_cb = NULL;
g_error_user_data = NULL;
return 0;
}
+int wakeup_manager_set_setting_changed_callback(wakeup_service_setting_changed_cb callback, void* user_data)
+{
+ MWR_LOGD("[ENTER]");
+
+ if (NULL == callback) {
+ MWR_LOGE("[ERROR] Input parameter is NULL");
+ return -1;
+ }
+
+ g_setting_changed_cb = callback;
+ g_setting_changed_user_data = user_data;
+
+ MWR_LOGD("[END]");
+ return 0;
+}
+
int wakeup_manager_set_error_callback(wakeup_service_error_cb callback, void* user_data)
{
MWR_LOGD("[ENTER]");
g_streaming_section_changed_cb(section, g_streaming_section_changed_user_data);
}
}
+
+void CSettingValueObserver::on_value_changed()
+{
+ if (g_setting_changed_cb) {
+ g_setting_changed_cb(g_setting_changed_user_data);
+ }
+}
\ No newline at end of file
#endif
}
- /* CHECK NEEDED : should the code segment below and activation logic above be moved to wakeup manger? */
- int prelaunch_mode;
- int res = vconf_get_bool(WAKEUP_SETTINGS_KEY_PRELAUNCH_MODE, &prelaunch_mode);
- if (0 == res && 0 != prelaunch_mode) {
- const char *default_assistant = NULL;
- if (0 == multi_assistant_service_plugin_get_default_assistant(&default_assistant)) {
- MAS_LOGD("prelaunching default_assistant_appid : %s", default_assistant);
- mas_launch_client_by_appid(default_assistant, CLIENT_LAUNCH_MODE_PRELAUNCH);
- }
- }
+ mas_prelaunch_default_assistant();
/* For the case of preprocessing assistant, it always have to be launched beforehand */
char *vconf_str;
return mas_launch_client_by_appid(appid, CLIENT_LAUNCH_MODE_ACTIVATION);
}
+int mas_prelaunch_default_assistant()
+{
+ /* CHECK NEEDED : should the code segment below and activation logic above be moved to wakeup manger? */
+ int prelaunch_mode;
+ int res = vconf_get_bool(WAKEUP_SETTINGS_KEY_PRELAUNCH_MODE, &prelaunch_mode);
+ if (0 == res && 0 != prelaunch_mode) {
+ const char *default_assistant = NULL;
+ if (0 == multi_assistant_service_plugin_get_default_assistant(&default_assistant)) {
+ if (0 == aul_app_is_running(default_assistant)) {
+ MAS_LOGD("prelaunching default_assistant_appid : %s", default_assistant);
+ mas_launch_client_by_appid(default_assistant, CLIENT_LAUNCH_MODE_PRELAUNCH);
+ }
+ }
+ }
+ return 0;
+}
+
int mas_process_voice_key_event(bool pressed)
{
}
}
+static void __setting_changed_cb(void *user_data)
+{
+ mas_prelaunch_default_assistant();
+ MAS_LOGD( "[SUCCESS] __setting_changed_cb is called");
+}
+
static void __streaming_section_changed_cb(ma_audio_streaming_data_section_e section, void* user_data)
{
MAS_LOGD( "[SUCCESS] __streaming_section_changed_cb is called, section(%d)", section);
_wakeup_manager_interface.set_speech_status_callback =
(wakeup_manager_set_speech_status_callback)dlsym(g_handle,
MA_WAKEUP_MANAGER_FUNC_SET_SPEECH_STATUS_CALLBACK);
+ _wakeup_manager_interface.set_setting_changed_callback =
+ (wakeup_manager_set_setting_changed_callback)dlsym(g_handle,
+ MA_WAKEUP_MANAGER_FUNC_SET_SETTING_CHANGED_CALLBACK);
_wakeup_manager_interface.set_error_callback =
(wakeup_manager_set_error_callback)dlsym(g_handle,
MA_WAKEUP_MANAGER_FUNC_SET_ERROR_CALLBACK);
return ret;
}
+ ret = multi_assistant_service_plugin_set_setting_changed_callback(__setting_changed_cb, NULL);
+ if (0 != ret) {
+ MAS_LOGE("Fail to set setting changed cb");
+ return ret;
+ }
+
ret = multi_assistant_service_plugin_set_error_callback(__error_cb, NULL);
if (0 != ret) {
MAS_LOGE("Fail to set error cb");
return ret;
}
+int multi_assistant_service_plugin_set_setting_changed_callback(wakeup_service_setting_changed_cb callback, void* user_data)
+{
+ int ret = -1;
+ if (NULL != g_handle) {
+ wakeup_manager_set_setting_changed_callback func = _wakeup_manager_interface.set_setting_changed_callback;
+ if (NULL == func) {
+ MAS_LOGE("[ERROR] symbol lookup failed : %s", MA_WAKEUP_MANAGER_FUNC_SET_SETTING_CHANGED_CALLBACK);
+ } else {
+ ret = func(callback, user_data);
+ if (0 != ret) {
+ MAS_LOGE("[ERROR] Fail to set setting_changed callback, ret(%d)", ret);
+ }
+ }
+ }
+ return ret;
+}
+
int multi_assistant_service_plugin_set_error_callback(wakeup_service_error_cb callback, void* user_data)
{
int ret = -1;