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/logger.h"
22 #include "common/picojson.h"
23 #include "common/platform_exception.h"
24 #include "common/tools.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) RegisterSyncHandler(c, std::bind(&SoundInstance::x, this, _1, _2));
45 REGISTER_SYNC("SoundManager_setVolume", SoundManagerSetVolume);
46 REGISTER_SYNC("SoundManager_unsetSoundModeChangeListener",
47 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, picojson::object& out) {
74 std::string sound_mode_type;
75 PlatformResult status = manager_.GetSoundMode(&sound_mode_type);
77 if (status.IsSuccess()) {
78 ReportSuccess(picojson::value(sound_mode_type), out);
80 LogAndReportError(status, &out);
84 void SoundInstance::SoundManagerSetVolume(const picojson::value& args, picojson::object& out) {
86 CHECK_PRIVILEGE_ACCESS(kPrivilegeSound, &out);
87 PlatformResult status = manager_.SetVolume(args.get<picojson::object>());
89 if (status.IsSuccess()) {
92 LogAndReportError(status, &out);
96 void SoundInstance::SoundManagerGetVolume(const picojson::value& args, picojson::object& out) {
99 PlatformResult status = manager_.GetVolume(args.get<picojson::object>(), &volume);
101 if (status.IsSuccess()) {
102 ReportSuccess(picojson::value(volume), out);
104 LogAndReportError(status, &out);
108 void SoundInstance::SoundManagerSetSoundModeChangeListener(const picojson::value& args,
109 picojson::object& out) {
111 PlatformResult status = manager_.SetSoundModeChangeListener(this);
113 if (status.IsSuccess()) {
116 LogAndReportError(status, &out);
120 void SoundInstance::SoundManagerUnsetSoundModeChangeListener(const picojson::value& args,
121 picojson::object& out) {
122 PlatformResult status = manager_.UnsetSoundModeChangeListener();
126 if (status.IsSuccess()) {
129 LogAndReportError(status, &out);
133 void SoundInstance::OnSoundModeChange(const std::string& newmode) {
135 if (current_sound_mode == newmode) {
136 LoggerD("New sound mode equals to current sound mode");
139 current_sound_mode = newmode;
140 picojson::value event = picojson::value(picojson::object());
141 picojson::object& obj = event.get<picojson::object>();
142 picojson::value result = picojson::value(newmode);
143 ReportSuccess(result, obj);
144 obj["listenerId"] = picojson::value("SoundModeChangeListener");
145 LoggerD("Posting: %s", event.serialize().c_str());
146 Instance::PostMessage(this, event.serialize().c_str());
149 void SoundInstance::SoundManagerSetVolumeChangeListener(const picojson::value& args,
150 picojson::object& out) {
152 PlatformResult status = manager_.SetVolumeChangeListener();
154 if (status.IsSuccess()) {
157 LogAndReportError(status, &out);
161 void SoundInstance::SoundManagerUnsetVolumeChangeListener(const picojson::value& args,
162 picojson::object& out) {
164 PlatformResult status = manager_.UnsetVolumeChangeListener();
166 if (status.IsSuccess()) {
169 LogAndReportError(status, &out);
173 void SoundInstance::SoundManagerGetConnectedDeviceList(const picojson::value& args,
174 picojson::object& out) {
176 manager_.GetDeviceList(SOUND_DEVICE_ALL_MASK, out);
179 void SoundInstance::SoundManagerGetActivatedDeviceList(const picojson::value& args,
180 picojson::object& out) {
182 manager_.GetDeviceList(SOUND_DEVICE_STATE_ACTIVATED_MASK, out);
185 void SoundInstance::SoundManagerAddDeviceStateChangeListener(const picojson::value& args,
186 picojson::object& out) {
188 PlatformResult result = manager_.AddDeviceStateChangeListener();
190 if (result.IsSuccess()) {
193 LogAndReportError(result, &out);
197 void SoundInstance::SoundManagerRemoveDeviceStateChangeListener(const picojson::value& args,
198 picojson::object& out) {
200 PlatformResult result = manager_.RemoveDeviceStateChangeListener();
202 if (result.IsSuccess()) {
205 LogAndReportError(result, &out);
212 } // namespace extension