2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "sound/sound_instance.h"
21 #include "common/picojson.h"
22 #include "common/logger.h"
23 #include "common/platform_exception.h"
24 #include "sound_manager.h"
29 using namespace common;
30 using namespace extension::sound;
32 SoundInstance::SoundInstance(): manager_(*this) {
34 using std::placeholders::_1;
35 using std::placeholders::_2;
37 #define REGISTER_SYNC(c,x) \
38 RegisterSyncHandler(c, std::bind(&SoundInstance::x, this, _1, _2));
39 REGISTER_SYNC("SoundManager_setVolume", SoundManagerSetVolume);
40 REGISTER_SYNC("SoundManager_unsetSoundModeChangeListener", SoundManagerUnsetSoundModeChangeListener);
41 REGISTER_SYNC("SoundManager_getVolume", SoundManagerGetVolume);
42 REGISTER_SYNC("SoundManager_unsetVolumeChangeListener", SoundManagerUnsetVolumeChangeListener);
43 REGISTER_SYNC("SoundManager_setSoundModeChangeListener", SoundManagerSetSoundModeChangeListener);
44 REGISTER_SYNC("SoundManager_setVolumeChangeListener", SoundManagerSetVolumeChangeListener);
45 REGISTER_SYNC("SoundManager_getSoundMode", SoundManagerGetSoundMode);
46 REGISTER_SYNC("SoundManager_getConnectedDeviceList", SoundManagerGetConnectedDeviceList);
47 REGISTER_SYNC("SoundManager_getActivatedDeviceList", SoundManagerGetActivatedDeviceList);
48 REGISTER_SYNC("SoundManager_addDeviceStateChangeListener",
49 SoundManagerAddDeviceStateChangeListener);
50 REGISTER_SYNC("SoundManager_removeDeviceStateChangeListener",
51 SoundManagerRemoveDeviceStateChangeListener);
55 SoundInstance::~SoundInstance() {
59 #define CHECK_EXIST(args, name, out) \
60 if (!args.contains(name)) {\
61 LogAndReportError(TypeMismatchException(name" is required argument"), out);\
65 void SoundInstance::SoundManagerGetSoundMode(const picojson::value& args,
66 picojson::object& out) {
68 std::string sound_mode_type;
69 PlatformResult status = manager_.GetSoundMode(&sound_mode_type);
71 if (status.IsSuccess()) {
72 ReportSuccess(picojson::value(sound_mode_type), out);
74 LogAndReportError(status, &out);
78 void SoundInstance::SoundManagerSetVolume(const picojson::value& args,
79 picojson::object& out) {
81 PlatformResult status = manager_.SetVolume(args.get<picojson::object>());
83 if (status.IsSuccess()) {
86 LogAndReportError(status, &out);
91 void SoundInstance::SoundManagerGetVolume(const picojson::value& args,
92 picojson::object& out) {
95 PlatformResult status =
96 manager_.GetVolume(args.get<picojson::object>(), &volume);
98 if (status.IsSuccess()) {
99 ReportSuccess(picojson::value(volume), out);
101 LogAndReportError(status, &out);
105 void SoundInstance::SoundManagerSetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
107 PlatformResult status = manager_.SetSoundModeChangeListener(this);
109 if (status.IsSuccess()) {
112 LogAndReportError(status, &out);
116 void SoundInstance::SoundManagerUnsetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
117 PlatformResult status = manager_.UnsetSoundModeChangeListener();
121 if (status.IsSuccess()) {
124 LogAndReportError(status, &out);
128 void SoundInstance::OnSoundModeChange(const std::string& newmode)
131 picojson::value event = picojson::value(picojson::object());
132 picojson::object& obj = event.get<picojson::object>();
133 picojson::value result = picojson::value(newmode);
134 ReportSuccess(result, obj);
135 obj["listenerId"] = picojson::value("SoundModeChangeListener");
136 LoggerD("Posting: %s", event.serialize().c_str());
137 Instance::PostMessage(this, event.serialize().c_str());
141 void SoundInstance::SoundManagerSetVolumeChangeListener(
142 const picojson::value& args, picojson::object& out) {
144 PlatformResult status = manager_.SetVolumeChangeListener();
146 if (status.IsSuccess()) {
149 LogAndReportError(status, &out);
153 void SoundInstance::SoundManagerUnsetVolumeChangeListener(
154 const picojson::value& args, picojson::object& out) {
156 PlatformResult status = manager_.UnsetVolumeChangeListener();
158 if (status.IsSuccess()) {
161 LogAndReportError(status, &out);
165 void SoundInstance::SoundManagerGetConnectedDeviceList(
166 const picojson::value& args, picojson::object& out) {
169 manager_.GetDeviceList(SOUND_DEVICE_ALL_MASK, out);
172 void SoundInstance::SoundManagerGetActivatedDeviceList(
173 const picojson::value& args, picojson::object& out) {
176 manager_.GetDeviceList(SOUND_DEVICE_STATE_ACTIVATED_MASK, out);
179 void SoundInstance::SoundManagerAddDeviceStateChangeListener(
180 const picojson::value& args, picojson::object& out) {
183 PlatformResult result = manager_.AddDeviceStateChangeListener();
185 if (result.IsSuccess()) {
188 LogAndReportError(result, &out);
192 void SoundInstance::SoundManagerRemoveDeviceStateChangeListener(
193 const picojson::value& args, picojson::object& out) {
196 PlatformResult result = manager_.RemoveDeviceStateChangeListener();
198 if (result.IsSuccess()) {
201 LogAndReportError(result, &out);
208 } // namespace extension