From: Kamil Lysik Date: Mon, 9 Feb 2015 11:58:27 +0000 (+0100) Subject: [Sound] SoundModeChangeListener X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~463 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0e4796632752f71e0073704249657347b22ea0dd;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Sound] SoundModeChangeListener [Verification] Build required Change-Id: I7662d34c1f66a5a6f761e18d9b77187cfdb81067 Signed-off-by: Kamil Lysik --- diff --git a/src/sound/sound_instance.cc b/src/sound/sound_instance.cc index 46b669cd..8d842408 100644 --- a/src/sound/sound_instance.cc +++ b/src/sound/sound_instance.cc @@ -71,30 +71,36 @@ void SoundInstance::SoundManagerGetVolume(const picojson::value& args, } void SoundInstance::SoundManagerSetSoundModeChangeListener(const picojson::value& args, picojson::object& out) { - CHECK_EXIST(args, "callbackId", out) - - int callbackId = static_cast(args.get("callbackId").get()); + 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::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) diff --git a/src/sound/sound_instance.h b/src/sound/sound_instance.h index de5b681e..0736c0be 100644 --- a/src/sound/sound_instance.h +++ b/src/sound/sound_instance.h @@ -11,7 +11,7 @@ namespace extension { namespace sound { -class SoundInstance : public common::ParsedInstance { +class SoundInstance : public common::ParsedInstance, public SoundManagerSoundModeChangedListener { public: SoundInstance(); virtual ~SoundInstance(); @@ -26,6 +26,8 @@ class SoundInstance : public common::ParsedInstance { 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 diff --git a/src/sound/sound_manager.cc b/src/sound/sound_manager.cc index f8924163..bc72a0a8 100644 --- a/src/sound/sound_manager.cc +++ b/src/sound/sound_manager.cc @@ -45,9 +45,19 @@ std::string SoundManager::PlatformEnumToStr(const sound_type_e value) { // 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; @@ -162,9 +172,47 @@ double SoundManager::GetVolume(const picojson::object& args) { 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(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) {} diff --git a/src/sound/sound_manager.h b/src/sound/sound_manager.h index f7d63e7d..e17f5ca5 100644 --- a/src/sound/sound_manager.h +++ b/src/sound/sound_manager.h @@ -8,10 +8,17 @@ #include #include "common/picojson.h" +#include namespace extension { namespace sound { +class SoundManagerSoundModeChangedListener +{ +public: + virtual void OnSoundModeChange(const std::string& newmode) = 0; +}; + class SoundManager { public: static SoundManager* GetInstance(); @@ -19,8 +26,8 @@ class SoundManager { 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(); @@ -36,6 +43,10 @@ class SoundManager { 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