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/tools.h"
24 #include "common/platform_exception.h"
25 #include "sound_manager.h"
31 // The privileges that required in Sound API
32 const std::string kPrivilegeSound = "http://tizen.org/privilege/volume.set";
36 using namespace common;
37 using namespace extension::sound;
39 SoundInstance::SoundInstance(): manager_(*this) {
41 using std::placeholders::_1;
42 using std::placeholders::_2;
44 #define REGISTER_SYNC(c,x) \
45 RegisterSyncHandler(c, std::bind(&SoundInstance::x, this, _1, _2));
46 REGISTER_SYNC("SoundManager_setVolume", SoundManagerSetVolume);
47 REGISTER_SYNC("SoundManager_unsetSoundModeChangeListener", SoundManagerUnsetSoundModeChangeListener);
48 REGISTER_SYNC("SoundManager_getVolume", SoundManagerGetVolume);
49 REGISTER_SYNC("SoundManager_unsetVolumeChangeListener", SoundManagerUnsetVolumeChangeListener);
50 REGISTER_SYNC("SoundManager_setSoundModeChangeListener", SoundManagerSetSoundModeChangeListener);
51 REGISTER_SYNC("SoundManager_setVolumeChangeListener", SoundManagerSetVolumeChangeListener);
52 REGISTER_SYNC("SoundManager_getSoundMode", SoundManagerGetSoundMode);
53 REGISTER_SYNC("SoundManager_getConnectedDeviceList", SoundManagerGetConnectedDeviceList);
54 REGISTER_SYNC("SoundManager_getActivatedDeviceList", SoundManagerGetActivatedDeviceList);
55 REGISTER_SYNC("SoundManager_addDeviceStateChangeListener",
56 SoundManagerAddDeviceStateChangeListener);
57 REGISTER_SYNC("SoundManager_removeDeviceStateChangeListener",
58 SoundManagerRemoveDeviceStateChangeListener);
62 SoundInstance::~SoundInstance() {
66 #define CHECK_EXIST(args, name, out) \
67 if (!args.contains(name)) {\
68 LogAndReportError(TypeMismatchException(name" is required argument"), out);\
72 void SoundInstance::SoundManagerGetSoundMode(const picojson::value& args,
73 picojson::object& out) {
75 std::string sound_mode_type;
76 PlatformResult status = manager_.GetSoundMode(&sound_mode_type);
78 if (status.IsSuccess()) {
79 ReportSuccess(picojson::value(sound_mode_type), out);
81 LogAndReportError(status, &out);
85 void SoundInstance::SoundManagerSetVolume(const picojson::value& args,
86 picojson::object& out) {
88 CHECK_PRIVILEGE_ACCESS(kPrivilegeSound, &out);
89 PlatformResult status = manager_.SetVolume(args.get<picojson::object>());
91 if (status.IsSuccess()) {
94 LogAndReportError(status, &out);
99 void SoundInstance::SoundManagerGetVolume(const picojson::value& args,
100 picojson::object& out) {
103 PlatformResult status =
104 manager_.GetVolume(args.get<picojson::object>(), &volume);
106 if (status.IsSuccess()) {
107 ReportSuccess(picojson::value(volume), out);
109 LogAndReportError(status, &out);
113 void SoundInstance::SoundManagerSetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
115 PlatformResult status = manager_.SetSoundModeChangeListener(this);
117 if (status.IsSuccess()) {
120 LogAndReportError(status, &out);
124 void SoundInstance::SoundManagerUnsetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
125 PlatformResult status = manager_.UnsetSoundModeChangeListener();
129 if (status.IsSuccess()) {
132 LogAndReportError(status, &out);
136 void SoundInstance::OnSoundModeChange(const std::string& newmode)
139 picojson::value event = picojson::value(picojson::object());
140 picojson::object& obj = event.get<picojson::object>();
141 picojson::value result = picojson::value(newmode);
142 ReportSuccess(result, obj);
143 obj["listenerId"] = picojson::value("SoundModeChangeListener");
144 LoggerD("Posting: %s", event.serialize().c_str());
145 Instance::PostMessage(this, event.serialize().c_str());
149 void SoundInstance::SoundManagerSetVolumeChangeListener(
150 const picojson::value& args, picojson::object& out) {
152 PlatformResult status = manager_.SetVolumeChangeListener();
154 if (status.IsSuccess()) {
157 LogAndReportError(status, &out);
161 void SoundInstance::SoundManagerUnsetVolumeChangeListener(
162 const picojson::value& args, picojson::object& out) {
164 PlatformResult status = manager_.UnsetVolumeChangeListener();
166 if (status.IsSuccess()) {
169 LogAndReportError(status, &out);
173 void SoundInstance::SoundManagerGetConnectedDeviceList(
174 const picojson::value& args, picojson::object& out) {
177 manager_.GetDeviceList(SOUND_DEVICE_ALL_MASK, out);
180 void SoundInstance::SoundManagerGetActivatedDeviceList(
181 const picojson::value& args, picojson::object& out) {
184 manager_.GetDeviceList(SOUND_DEVICE_STATE_ACTIVATED_MASK, out);
187 void SoundInstance::SoundManagerAddDeviceStateChangeListener(
188 const picojson::value& args, picojson::object& out) {
191 PlatformResult result = manager_.AddDeviceStateChangeListener();
193 if (result.IsSuccess()) {
196 LogAndReportError(result, &out);
200 void SoundInstance::SoundManagerRemoveDeviceStateChangeListener(
201 const picojson::value& args, picojson::object& out) {
204 PlatformResult result = manager_.RemoveDeviceStateChangeListener();
206 if (result.IsSuccess()) {
209 LogAndReportError(result, &out);
216 } // namespace extension