Merge "[Systeminfo] - refactoring logs" 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/platform_exception.h"
24 #include "sound_manager.h"
25
26 namespace extension {
27 namespace sound {
28
29 using namespace common;
30 using namespace extension::sound;
31
32 SoundInstance::SoundInstance(): manager_(*this) {
33   LoggerD("Enter");
34   using std::placeholders::_1;
35   using std::placeholders::_2;
36
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);
52   #undef REGISTER_SYNC
53 }
54
55 SoundInstance::~SoundInstance() {
56   LoggerD("Enter");
57 }
58
59 #define CHECK_EXIST(args, name, out) \
60     if (!args.contains(name)) {\
61       LogAndReportError(TypeMismatchException(name" is required argument"), out);\
62       return;\
63     }
64
65 void SoundInstance::SoundManagerGetSoundMode(const picojson::value& args,
66                                              picojson::object& out) {
67   LoggerD("Enter");
68   std::string sound_mode_type;
69   PlatformResult status = manager_.GetSoundMode(&sound_mode_type);
70
71   if (status.IsSuccess()) {
72     ReportSuccess(picojson::value(sound_mode_type), out);
73   } else {
74     LogAndReportError(status, &out);
75   }
76 }
77
78 void SoundInstance::SoundManagerSetVolume(const picojson::value& args,
79                                           picojson::object& out) {
80   LoggerD("Enter");
81   PlatformResult status = manager_.SetVolume(args.get<picojson::object>());
82
83   if (status.IsSuccess()) {
84     ReportSuccess(out);
85   } else {
86     LogAndReportError(status, &out);
87   }
88 }
89
90
91 void SoundInstance::SoundManagerGetVolume(const picojson::value& args,
92                                           picojson::object& out) {
93   LoggerD("Enter");
94   double volume;
95   PlatformResult status =
96       manager_.GetVolume(args.get<picojson::object>(), &volume);
97
98   if (status.IsSuccess()) {
99     ReportSuccess(picojson::value(volume), out);
100   } else {
101     LogAndReportError(status, &out);
102   }
103 }
104
105 void SoundInstance::SoundManagerSetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
106   LoggerD("Enter");
107   PlatformResult status = manager_.SetSoundModeChangeListener(this);
108
109   if (status.IsSuccess()) {
110     ReportSuccess(out);
111   } else {
112     LogAndReportError(status, &out);
113   }
114 }
115
116 void SoundInstance::SoundManagerUnsetSoundModeChangeListener(const picojson::value& args, picojson::object& out) {
117   PlatformResult status = manager_.UnsetSoundModeChangeListener();
118
119   LoggerD("Enter");
120
121   if (status.IsSuccess()) {
122     ReportSuccess(out);
123   } else {
124     LogAndReportError(status, &out);
125   }
126 }
127
128 void SoundInstance::OnSoundModeChange(const std::string& newmode)
129 {
130   LoggerD("Enter");
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());
138 }
139
140
141 void SoundInstance::SoundManagerSetVolumeChangeListener(
142     const picojson::value& args, picojson::object& out) {
143   LoggerD("Enter");
144   PlatformResult status = manager_.SetVolumeChangeListener();
145
146   if (status.IsSuccess()) {
147     ReportSuccess(out);
148   } else {
149     LogAndReportError(status, &out);
150   }
151 }
152
153 void SoundInstance::SoundManagerUnsetVolumeChangeListener(
154     const picojson::value& args, picojson::object& out) {
155   LoggerD("Enter");
156   PlatformResult status = manager_.UnsetVolumeChangeListener();
157
158   if (status.IsSuccess()) {
159     ReportSuccess(out);
160   } else {
161     LogAndReportError(status, &out);
162   }
163 }
164
165 void SoundInstance::SoundManagerGetConnectedDeviceList(
166     const picojson::value& args, picojson::object& out) {
167
168   LoggerD("Entered");
169   manager_.GetDeviceList(SOUND_DEVICE_ALL_MASK, out);
170 }
171
172 void SoundInstance::SoundManagerGetActivatedDeviceList(
173     const picojson::value& args, picojson::object& out) {
174
175   LoggerD("Entered");
176   manager_.GetDeviceList(SOUND_DEVICE_STATE_ACTIVATED_MASK, out);
177 }
178
179 void SoundInstance::SoundManagerAddDeviceStateChangeListener(
180     const picojson::value& args, picojson::object& out) {
181
182   LoggerD("Entered");
183   PlatformResult result = manager_.AddDeviceStateChangeListener();
184
185   if (result.IsSuccess()) {
186     ReportSuccess(out);
187   } else {
188     LogAndReportError(result, &out);
189   }
190 }
191
192 void SoundInstance::SoundManagerRemoveDeviceStateChangeListener(
193     const picojson::value& args, picojson::object& out) {
194
195   LoggerD("Entered");
196   PlatformResult result = manager_.RemoveDeviceStateChangeListener();
197
198   if (result.IsSuccess()) {
199     ReportSuccess(out);
200   } else {
201     LogAndReportError(result, &out);
202   }
203 }
204
205 #undef CHECK_EXIST
206
207 } // namespace sound
208 } // namespace extension