}
void SoundInstance::SoundManagerSetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
- CHECK_EXIST(args, "callbackId", out)
-
- int callbackId = static_cast<int>(args.get("callbackId").get<double>());
+ LoggerD("enter");
+ bool status = manager_->SetSoundModeChangeListener(this);
- // implement it
-
- // call ReplyAsync in later (Asynchronously)
-
- // if success
- // ReportSuccess(out);
- // if error
- // ReportError(out);
+ if (status)
+ ReportSuccess(out);
+ else
+ ReportError(out);
}
-void SoundInstance::SoundManagerUnsetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
-
- // implement it
+void SoundInstance::SoundManagerUnsetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
+ LoggerD("enter");
+ bool status = manager_->UnsetSoundModeChangeListener();
+ if (status)
+ ReportSuccess(out);
+ else
+ ReportError(out);
+}
- // if success
- // ReportSuccess(out);
- // if error
- // ReportError(out);
+void SoundInstance::OnSoundModeChange(const std::string& newmode)
+{
+ picojson::value event = picojson::value(picojson::object());
+ picojson::object& obj = event.get<picojson::object>();
+ picojson::value result = picojson::value(newmode);
+ ReportSuccess(result, obj);
+ obj["listenerId"] = picojson::value("SoundModeChangeListener");
+ LoggerD("Posting: %s", event.serialize().c_str());
+ PostMessage(event.serialize().c_str());
}
+
void SoundInstance::SoundManagerSetVolumeChangeListener(const picojson::value& args, picojson::object& out) {
CHECK_EXIST(args, "callbackId", out)
namespace extension {
namespace sound {
-class SoundInstance : public common::ParsedInstance {
+class SoundInstance : public common::ParsedInstance, public SoundManagerSoundModeChangedListener {
public:
SoundInstance();
virtual ~SoundInstance();
void SoundManagerSetSoundModeChangeListener(const picojson::value& args, picojson::object& out);
void SoundManagerSetVolumeChangeListener(const picojson::value& args, picojson::object& out);
void SoundManagerGetSoundMode(const picojson::value& args, picojson::object& out);
+
+ void OnSoundModeChange(const std::string& newmode);
};
} // namespace sound
// TODO: throw InvalidValuesException(message);
}
-SoundManager::SoundManager() { FillMaxVolumeMap(); }
+SoundManager::SoundManager()
+ : soundModeChangeListening(false), soundModeListener(nullptr) {
+ FillMaxVolumeMap();
+}
-SoundManager::~SoundManager() {}
+SoundManager::~SoundManager() {
+ if (soundModeChangeListening) {
+ int status = vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, SoundManager::soundModeChangedCb);
+ if (VCONF_OK != status) {
+ LoggerE("Cannot disable listener!");
+ }
+ }
+}
SoundManager* SoundManager::GetInstance() {
static SoundManager instance;
return volume;
}
-void SoundManager::SetSoundModeChangeListener(const picojson::object& args) {}
+void SoundManager::soundModeChangedCb(keynode_t*, void* user_data)
+{
+ LOGD("enter");
+ if (user_data == nullptr) {
+ LoggerE("Invalid callback data!");
+ return;
+ }
+ SoundManager* self = static_cast<SoundManager*>(user_data);
+ std::string soundModeType = self->GetSoundMode();
+ //TODO: ERROR CHECK
+ if (self->soundModeListener) {
+ self->soundModeListener->OnSoundModeChange(soundModeType);
+ } else {
+ LOGE("No SoundModeListener attached");
+ }
+}
-void SoundManager::UnsetSoundModeChangeListener() {}
+bool SoundManager::SetSoundModeChangeListener(SoundManagerSoundModeChangedListener* listener) {
+ soundModeListener = listener;
+ if (soundModeChangeListening)
+ return true;
+ int status = vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, SoundManager::soundModeChangedCb, this);
+ if (VCONF_OK == status) {
+ soundModeChangeListening = true;
+ return true;
+ }
+ return false;
+}
+
+bool SoundManager::UnsetSoundModeChangeListener() {
+ soundModeListener = nullptr;
+ if (!soundModeChangeListening) {
+ return true;
+ }
+ int status = vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, SoundManager::soundModeChangedCb);
+ if (VCONF_OK == status) {
+ soundModeChangeListening = false;
+ return true;
+ }
+ return false;
+}
void SoundManager::SetVolumeChangeListener(const picojson::object& args) {}
#include <sound_manager.h>
#include "common/picojson.h"
+#include <vconf.h>
namespace extension {
namespace sound {
+class SoundManagerSoundModeChangedListener
+{
+public:
+ virtual void OnSoundModeChange(const std::string& newmode) = 0;
+};
+
class SoundManager {
public:
static SoundManager* GetInstance();
std::string GetSoundMode();
void SetVolume(const picojson::object& args);
double GetVolume(const picojson::object& args);
- void SetSoundModeChangeListener(const picojson::object& args);
- void UnsetSoundModeChangeListener();
+ bool SetSoundModeChangeListener(SoundManagerSoundModeChangedListener* listener);
+ bool UnsetSoundModeChangeListener();
void SetVolumeChangeListener(const picojson::object& args);
void UnsetVolumeChangeListener();
static sound_type_e StrToPlatformEnum(const std::string& key);
static std::string PlatformEnumToStr(const sound_type_e value);
+
+ static void soundModeChangedCb(keynode_t *node, void *user_data);
+ bool soundModeChangeListening;
+ SoundManagerSoundModeChangedListener* soundModeListener;
};
} // namespace sound