+static void wakeup_setting_enabled_assistants_changed_cb(keynode_t* node, void* data)
+{
+ MWR_LOGD("[ENTER]");
+ if (nullptr == node) return;
+
+ CWakeupSettings* settings = static_cast<CWakeupSettings*>(data);
+ if (nullptr == settings) return;
+
+ if (VCONF_TYPE_STRING == node->type) {
+ vector<string> newlyAddedAssistants;
+ vector<string> newlyRemovedAssistants;
+ const char* value = static_cast<const char*>(node->value.s);
+ if (value) {
+ vector<string> previouslyEnabledAssistants = settings->get_enabled_assistants();
+ vector<string> currentlyEnabledAssistants;
+ string token;
+ istringstream iss(value);
+ currentlyEnabledAssistants.clear();
+ while (getline(iss, token, ';')) {
+ currentlyEnabledAssistants.push_back(token);
+ MWR_LOGD("enabled_assistants : %s", token.c_str());
+ }
+
+ for (const auto& assistant : currentlyEnabledAssistants) {
+ if (!contains(previouslyEnabledAssistants, assistant)) {
+ newlyAddedAssistants.push_back(assistant);
+ }
+ }
+ for (const auto& assistant : previouslyEnabledAssistants) {
+ if (!contains(currentlyEnabledAssistants, assistant)) {
+ newlyRemovedAssistants.push_back(assistant);
+ }
+ }
+ }
+
+ vector<ISettingsEventObserver*> observers = settings->get_observers();
+ for (const auto& observer : observers) {
+ if (observer) {
+ for (const auto& assistant : newlyAddedAssistants) {
+ if (!observer->on_assistant_enabled_info_changed(assistant.c_str(), true)) {
+ LOGW("[Settings WARNING] One of the observer returned false");
+ }
+ }
+ for (const auto& assistant : newlyRemovedAssistants) {
+ if (!observer->on_assistant_enabled_info_changed(assistant.c_str(), false)) {
+ LOGW("[Settings WARNING] One of the observer returned false");
+ }
+ }
+ }
+ }
+ } else {
+ LOGE("[Settings ERROR] the value type is not string : %d", node->type);
+ }
+}
+
+static void wakeup_setting_default_assistant_appid_changed_cb(keynode_t* node, void* data)
+{
+ MWR_LOGD("[ENTER]");
+ if (nullptr == node) return;
+
+ CWakeupSettings* settings = static_cast<CWakeupSettings*>(data);
+ if (nullptr == settings) return;
+
+ if (VCONF_TYPE_STRING == node->type) {
+ const char* value = static_cast<const char*>(node->value.s);
+ vector<ISettingsEventObserver*> observers = settings->get_observers();
+ for (const auto& observer : observers) {
+ if (observer) {
+ if (!observer->on_default_assistant_appid_changed(value)) {
+ LOGW("[Settings WARNING] One of the observer returned false");
+ }
+ }
+ }
+ } else {
+ LOGE("[Settings ERROR] the value type is not string : %d", node->type);
+ }
+}
+