Merge "Revert "[secureelement] - Checking privileges moved to JS layer"" into tizen_3.0
[platform/core/api/webapi-plugins.git] / src / sound / sound_instance.cc
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #include "sound/sound_instance.h"
18
19 #include <functional>
20
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"
26
27 namespace extension {
28 namespace sound {
29
30 namespace {
31 // The privileges that required in Sound API
32 const std::string kPrivilegeSound = "http://tizen.org/privilege/volume.set";
33
34 } // namespace
35
36 using namespace common;
37 using namespace extension::sound;
38
39 SoundInstance::SoundInstance(): manager_(*this) {
40   LoggerD("Enter");
41   using std::placeholders::_1;
42   using std::placeholders::_2;
43
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);
59   #undef REGISTER_SYNC
60 }
61
62 SoundInstance::~SoundInstance() {
63   LoggerD("Enter");
64 }
65
66 #define CHECK_EXIST(args, name, out) \
67     if (!args.contains(name)) {\
68       LogAndReportError(TypeMismatchException(name" is required argument"), out);\
69       return;\
70     }
71
72 void SoundInstance::SoundManagerGetSoundMode(const picojson::value& args,
73                                              picojson::object& out) {
74   LoggerD("Enter");
75   std::string sound_mode_type;
76   PlatformResult status = manager_.GetSoundMode(&sound_mode_type);
77
78   if (status.IsSuccess()) {
79     ReportSuccess(picojson::value(sound_mode_type), out);
80   } else {
81     LogAndReportError(status, &out);
82   }
83 }
84
85 void SoundInstance::SoundManagerSetVolume(const picojson::value& args,
86                                           picojson::object& out) {
87   LoggerD("Enter");
88   CHECK_PRIVILEGE_ACCESS(kPrivilegeSound, &out);
89   PlatformResult status = manager_.SetVolume(args.get<picojson::object>());
90
91   if (status.IsSuccess()) {
92     ReportSuccess(out);
93   } else {
94     LogAndReportError(status, &out);
95   }
96 }
97
98
99 void SoundInstance::SoundManagerGetVolume(const picojson::value& args,
100                                           picojson::object& out) {
101   LoggerD("Enter");
102   double volume;
103   PlatformResult status =
104       manager_.GetVolume(args.get<picojson::object>(), &volume);
105
106   if (status.IsSuccess()) {
107     ReportSuccess(picojson::value(volume), out);
108   } else {
109     LogAndReportError(status, &out);
110   }
111 }
112
113 void SoundInstance::SoundManagerSetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
114   LoggerD("Enter");
115   PlatformResult status = manager_.SetSoundModeChangeListener(this);
116
117   if (status.IsSuccess()) {
118     ReportSuccess(out);
119   } else {
120     LogAndReportError(status, &out);
121   }
122 }
123
124 void SoundInstance::SoundManagerUnsetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
125   PlatformResult status = manager_.UnsetSoundModeChangeListener();
126
127   LoggerD("Enter");
128
129   if (status.IsSuccess()) {
130     ReportSuccess(out);
131   } else {
132     LogAndReportError(status, &out);
133   }
134 }
135
136 void SoundInstance::OnSoundModeChange(const std::string& newmode)
137 {
138   LoggerD("Enter");
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());
146 }
147
148
149 void SoundInstance::SoundManagerSetVolumeChangeListener(
150     const picojson::value& args, picojson::object& out) {
151   LoggerD("Enter");
152   PlatformResult status = manager_.SetVolumeChangeListener();
153
154   if (status.IsSuccess()) {
155     ReportSuccess(out);
156   } else {
157     LogAndReportError(status, &out);
158   }
159 }
160
161 void SoundInstance::SoundManagerUnsetVolumeChangeListener(
162     const picojson::value& args, picojson::object& out) {
163   LoggerD("Enter");
164   PlatformResult status = manager_.UnsetVolumeChangeListener();
165
166   if (status.IsSuccess()) {
167     ReportSuccess(out);
168   } else {
169     LogAndReportError(status, &out);
170   }
171 }
172
173 void SoundInstance::SoundManagerGetConnectedDeviceList(
174     const picojson::value& args, picojson::object& out) {
175
176   LoggerD("Entered");
177   manager_.GetDeviceList(SOUND_DEVICE_ALL_MASK, out);
178 }
179
180 void SoundInstance::SoundManagerGetActivatedDeviceList(
181     const picojson::value& args, picojson::object& out) {
182
183   LoggerD("Entered");
184   manager_.GetDeviceList(SOUND_DEVICE_STATE_ACTIVATED_MASK, out);
185 }
186
187 void SoundInstance::SoundManagerAddDeviceStateChangeListener(
188     const picojson::value& args, picojson::object& out) {
189
190   LoggerD("Entered");
191   PlatformResult result = manager_.AddDeviceStateChangeListener();
192
193   if (result.IsSuccess()) {
194     ReportSuccess(out);
195   } else {
196     LogAndReportError(result, &out);
197   }
198 }
199
200 void SoundInstance::SoundManagerRemoveDeviceStateChangeListener(
201     const picojson::value& args, picojson::object& out) {
202
203   LoggerD("Entered");
204   PlatformResult result = manager_.RemoveDeviceStateChangeListener();
205
206   if (result.IsSuccess()) {
207     ReportSuccess(out);
208   } else {
209     LogAndReportError(result, &out);
210   }
211 }
212
213 #undef CHECK_EXIST
214
215 } // namespace sound
216 } // namespace extension