#include <sstream>
#include <algorithm>
+#include <json/json.h>
namespace multiassistant
{
}
}
-void CWakeupSettings::initialize()
+static void wakeup_setting_enabled_wake_word_detection_changed_cb(keynode_t* node, void* data)
+{
+ MWR_LOGD("[ENTER]");
+
+ CWakeupSettings* settings = static_cast<CWakeupSettings*>(data);
+ if (nullptr == settings) return;
+
+ const auto& observers = settings->get_observers();
+ for (const auto& observer : observers) {
+ if (observer) {
+ if (!observer->on_wake_word_detection_enabled_info_changed()) {
+ LOGW("[Settings WARNING] One of the observer returned false");
+ }
+ }
+ }
+}
+
+void CWakeupSettings::initialize(map<string, string> custom_keys)
{
int vconf_ret;
char *vconf_str;
int vconf_bool;
double vconf_double;
- vconf_str = vconf_get_str(WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID);
+ mCustomVconfKeys.clear();
+ mCustomVconfKeys = custom_keys;
+
+ vconf_str = vconf_get_str(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID].c_str());
if (vconf_str) {
mDefaultAssistantAppid = vconf_str;
MWR_LOGD("default_assistant_appid : %s", mDefaultAssistantAppid.c_str());
MWR_LOGD("multiple_mode : %s", (mMultipleMode ? "true" : "false"));
}
if (true == mMultipleMode) {
- vconf_str = vconf_get_str(WAKEUP_SETTINGS_KEY_ENABLED_ASSISTANTS);
+ vconf_str = vconf_get_str(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_ENABLED_ASSISTANTS].c_str());
if (vconf_str) {
string token;
istringstream iss(vconf_str);
vconf_str = nullptr;
}
}
+ vconf_str = vconf_get_str(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_WAKE_WORD_DETECTION_ENABLED].c_str());
+ if (vconf_str) {
+ Json::Reader reader;
+ Json::Value root;
+ mWakeWordDisabledAssistants.clear();
+ if (!reader.parse(vconf_str, root)) {
+ LOGW("[Settings WARNING] Failed to parse Json : %s", reader.getFormattedErrorMessages().c_str());
+ } else {
+ auto member = root.getMemberNames();
+ for (string m : member) {
+ if (0 == root[m].asString().compare("off")) {
+ mWakeWordDisabledAssistants.push_back(m);
+ MWR_LOGD("wake_word_detection_disabled assistant : %s", m.c_str());
+ }
+ }
+ }
+ free(vconf_str);
+ vconf_str = nullptr;
+ }
vconf_ret = vconf_get_dbl(WAKEUP_SETTINGS_KEY_WAKEUP_POLICY_DELAY, &vconf_double);
if (0 == vconf_ret) {
mWakeupPolicyDelay = vconf_double;
vconf_notify_key_changed(WAKEUP_SETTINGS_KEY_VOICE_INPUT_LANGUAGE,
wakeup_setting_input_language_changed_cb, this);
- vconf_notify_key_changed(WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID,
+ vconf_notify_key_changed(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID].c_str(),
wakeup_setting_default_assistant_appid_changed_cb, this);
if (true == mMultipleMode) {
- vconf_notify_key_changed(WAKEUP_SETTINGS_KEY_ENABLED_ASSISTANTS,
+ vconf_notify_key_changed(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_ENABLED_ASSISTANTS].c_str(),
wakeup_setting_enabled_assistants_changed_cb, this);
}
vconf_notify_key_changed(WAKEUP_SETTINGS_KEY_MULTIPLE_MODE,
wakeup_setting_multiple_mode_changed_cb, this);
+ vconf_notify_key_changed(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_WAKE_WORD_DETECTION_ENABLED].c_str(),
+ wakeup_setting_enabled_wake_word_detection_changed_cb, this);
}
void CWakeupSettings::deinitialize()
{
vconf_ignore_key_changed(WAKEUP_SETTINGS_KEY_VOICE_INPUT_LANGUAGE,
wakeup_setting_input_language_changed_cb);
- vconf_ignore_key_changed(WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID,
+ vconf_ignore_key_changed(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID].c_str(),
wakeup_setting_default_assistant_appid_changed_cb);
if (true == mMultipleMode) {
- vconf_ignore_key_changed(WAKEUP_SETTINGS_KEY_ENABLED_ASSISTANTS,
+ vconf_ignore_key_changed(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_ENABLED_ASSISTANTS].c_str(),
wakeup_setting_enabled_assistants_changed_cb);
}
vconf_ignore_key_changed(WAKEUP_SETTINGS_KEY_MULTIPLE_MODE,
wakeup_setting_multiple_mode_changed_cb);
+ vconf_ignore_key_changed(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_WAKE_WORD_DETECTION_ENABLED].c_str(),
+ wakeup_setting_enabled_wake_word_detection_changed_cb);
}
void CWakeupSettings::subscribe(ISettingsEventObserver *observer)
string CWakeupSettings::get_default_assistant_appid()
{
char *vconf_str;
- vconf_str = vconf_get_str(WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID);
+ vconf_str = vconf_get_str(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID].c_str());
MWR_LOGD("vconf default_assistant_appid : %s", vconf_str);
if (vconf_str) {
mDefaultAssistantAppid = vconf_str;
MWR_LOGE("Default assistant appid not changed, ignoring...");
return;
}
- int ret = vconf_set_str(WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID, appid.c_str());
+ int ret = vconf_set_str(mCustomVconfKeys[WAKEUP_SETTINGS_KEY_DEFAULT_ASSISTANT_APPID].c_str(), appid.c_str());
MWR_LOGD("default_assistant_appid : %s, %d", appid.c_str(), ret);
mDefaultAssistantAppid = appid;
}
return result;
}
+vector<string> CWakeupSettings::get_wake_word_disabled_assistants()
+{
+ return mWakeWordDisabledAssistants;
+}
+
} // wakeup
} // multiassistant