memory leak fix
[platform/framework/native/uix.git] / src / FUixSensorSensorManager.cpp
1 // 
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // 
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.tizenopensource.org/license
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file     FUixSensorSensorManager.cpp
20  * @brief    This is the implementation file for the %SensorManager class.
21  *
22  * This files contains implementation of the %SensorManager class.
23  */
24
25 #include <new>
26 #include <unique_ptr.h>
27
28 #include <FBaseString.h>
29 #include <FBaseSysLog.h>
30
31 #include <FUixSensorSensorManager.h>
32 #include <FUixSensor_SensorManagerImpl.h>
33
34 namespace Tizen { namespace Uix { namespace Sensor
35 {
36 namespace
37 {
38 static wchar_t W_MSG_ALREADY_CONSTRUCTED[] = L"Already constructed! Calling Construct() twice or more on a same instance is not allowed for this class.";
39 static wchar_t W_MSG_NOT_YET_CONSTRUCTED[] = L"Not yet constructed! Construct() should be called before use.";
40 static wchar_t W_MSG_INVALID_SENSOR_TYPE[] = L"The specified type of sensor is not valid.";
41 static wchar_t W_MSG_UNSUPPORTED_OPERATION[] = L"The target device does not support the specified sensor.";
42 static wchar_t W_MSG_OPERATION_FAILED[] = L"The operation has failed.";
43 static wchar_t W_MSG_INVALID_INTERVAL[] = L"An interval must be greater than the maximum interval or less than the minimum interval.";
44 static wchar_t W_MSG_USER_ALREADY_REGISTERED[] = L"The specified listener is already registered for the specified sensor type.";
45 static wchar_t W_MSG_NOT_REGISTERED_LISETNER[] = L"The specified listener is not registered for the specified sensor type.";
46 static wchar_t W_MSG_NO_LISTENER_REGISTERED[] = L"There is no sensor listener registered for this type.";
47 static wchar_t W_MSG_DEVICE_UNAVAILABLE[] = L"The specified type of sensor is not available.";
48 } // Anonymous
49
50 // SensorManager life-cycle -------------------------------------------------------------------------------------------------- //
51 SensorManager::SensorManager(void)
52         : __pSensorManagerImpl(null)
53 {
54
55 }
56
57 SensorManager::~SensorManager(void)
58 {
59         if (__pSensorManagerImpl != null)
60         {
61                 delete __pSensorManagerImpl;
62         }
63 }
64
65 result
66 SensorManager::Construct(void)
67 {
68         ClearLastResult();
69
70         SysAssertf(__pSensorManagerImpl == null, "%ls", W_MSG_ALREADY_CONSTRUCTED);
71
72         std::unique_ptr<_SensorManagerImpl> pSensorManagerImpl(new (std::nothrow) _SensorManagerImpl());
73         SysTryReturnResult(NID_UIX, pSensorManagerImpl != null, E_OUT_OF_MEMORY, "Allocating new _SensorManagerImpl failed.");
74
75         result r = pSensorManagerImpl->Construct();
76         SysTryReturnResult(NID_UIX, !IsFailed(r), r, "Propagating.");
77
78         __pSensorManagerImpl = pSensorManagerImpl.release();
79
80         return E_SUCCESS;
81 }
82
83 // Getting sensor information ------------------------------------------------------------------------------------------------ //
84 bool
85 SensorManager::IsAvailable(SensorType sensorType) const
86 {
87         ClearLastResult();
88
89         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
90
91         bool isAvailable = __pSensorManagerImpl->IsAvailable(sensorType);
92         result r = GetLastResult();
93
94         SysTryReturn(NID_UIX, r != E_INVALID_ARG, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_INVALID_SENSOR_TYPE);
95         SysTryReturn(NID_UIX, r != E_OPERATION_FAILED, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_OPERATION_FAILED);
96         SysTryReturn(NID_UIX, r != E_UNSUPPORTED_OPERATION, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_UNSUPPORTED_OPERATION);
97         SysTryReturn(NID_UIX, r != E_DEVICE_UNAVAILABLE, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_DEVICE_UNAVAILABLE);
98
99         return isAvailable;
100 }
101
102 result
103 SensorManager::GetDescription(SensorType sensorType, Tizen::Base::String& description) const
104 {
105         ClearLastResult();
106
107         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
108
109         result r = __pSensorManagerImpl->GetDescription(sensorType, description);
110
111         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
112         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
113         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
114         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
115
116         return E_SUCCESS;
117 }
118
119 result
120 SensorManager::GetVendor(SensorType sensorType, Tizen::Base::String& vendor) const
121 {
122         ClearLastResult();
123
124         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
125
126         result r = __pSensorManagerImpl->GetVendor(sensorType, vendor);
127
128         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
129         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
130         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
131         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
132
133         return E_SUCCESS;
134 }
135
136 result
137 SensorManager::GetModelId(SensorType sensorType, Tizen::Base::String& modelId) const
138 {
139         ClearLastResult();
140
141         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
142
143         result r = __pSensorManagerImpl->GetModelId(sensorType, modelId);
144
145         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
146         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
147         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
148         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
149
150         return E_SUCCESS;
151 }
152
153 result
154 SensorManager::GetMeasurementRange(SensorType sensorType, float& min, float& max, float& resolution) const
155 {
156         ClearLastResult();
157
158         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
159
160         result r = __pSensorManagerImpl->GetMeasurementRange(sensorType, min, max, resolution);
161
162         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
163         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
164         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
165         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
166
167         return E_SUCCESS;
168 }
169
170 result
171 SensorManager::GetMinInterval(SensorType sensorType, long& interval) const
172 {
173         ClearLastResult();
174
175         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
176
177         long dummyInterval = 0L;
178         result r = __pSensorManagerImpl->GetIntervalRange(sensorType, interval, dummyInterval);
179
180         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
181         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
182         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
183         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
184
185         return E_SUCCESS;
186 }
187
188 result
189 SensorManager::GetMaxInterval(SensorType sensorType, long& interval) const
190 {
191         ClearLastResult();
192
193         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
194
195         long dummyInterval = 0L;
196         result r = __pSensorManagerImpl->GetIntervalRange(sensorType, dummyInterval, interval);
197
198         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
199         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
200         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
201         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
202
203         return E_SUCCESS;
204 }
205
206
207
208 // Sensor event listener management ------------------------------------------------------------------------------------------ //
209 result
210 SensorManager::AddSensorListener(ISensorEventListener& listener, SensorType sensorType, long interval, bool dataChanged)
211 {
212         ClearLastResult();
213
214         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
215
216         result r = __pSensorManagerImpl->AddSensorEventListener(listener, sensorType, interval, dataChanged);
217
218         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_INVALID_INTERVAL);
219         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
220         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
221         SysTryReturnResult(NID_UIX, r != E_USER_ALREADY_REGISTERED, r, "%ls", W_MSG_USER_ALREADY_REGISTERED);
222         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
223
224         return E_SUCCESS;
225 }
226
227 result
228 SensorManager::RemoveSensorListener(ISensorEventListener& listener)
229 {
230         ClearLastResult();
231
232         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
233
234         result r = __pSensorManagerImpl->RemoveSensorEventListener(listener);
235
236         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_NOT_REGISTERED_LISETNER);
237         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
238         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
239         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
240         return E_SUCCESS;
241 }
242
243 result
244 SensorManager::RemoveSensorListener(ISensorEventListener& listener, SensorType sensorType)
245 {
246         ClearLastResult();
247
248         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
249
250         result r = __pSensorManagerImpl->RemoveSensorEventListener(listener, sensorType);
251
252         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_NOT_REGISTERED_LISETNER);
253         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
254         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
255         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
256
257         return E_SUCCESS;
258 }
259
260 result
261 SensorManager::SetInterval(SensorType sensorType, long interval)
262 {
263         ClearLastResult();
264
265         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
266
267         result r = __pSensorManagerImpl->SetInterval(sensorType, interval);
268
269         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_NOT_REGISTERED_LISETNER);
270         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
271         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
272         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
273
274         return E_SUCCESS;
275 }
276
277 result
278 SensorManager::SetInterval(ISensorEventListener& listener, SensorType sensorType, long interval)
279 {
280         ClearLastResult();
281
282         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
283
284         result r = __pSensorManagerImpl->SetInterval(listener, sensorType, interval);
285
286         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_NOT_REGISTERED_LISETNER);
287         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
288         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
289         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
290
291         return E_SUCCESS;
292 }
293
294 // Sensor wake up management ------------------------------------------------------------------------------------------------- //
295 bool
296 SensorManager::IsWakeupSupported(SensorType sensorType) const
297 {
298         ClearLastResult();
299
300         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
301
302         bool isWakeupSupported = __pSensorManagerImpl->IsWakeupSupported(sensorType);
303         result r = GetLastResult();
304
305         SysTryReturn(NID_UIX, r != E_INVALID_ARG, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_INVALID_SENSOR_TYPE);
306         SysTryReturn(NID_UIX, r != E_OPERATION_FAILED, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_OPERATION_FAILED);
307         SysTryReturn(NID_UIX, r != E_UNSUPPORTED_OPERATION, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_UNSUPPORTED_OPERATION);
308         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
309
310         return isWakeupSupported;
311 }
312
313 result
314 SensorManager::SetWakeupEnabled(SensorType sensorType, bool enable)
315 {
316         ClearLastResult();
317
318         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
319
320         result r = __pSensorManagerImpl->SetWakeupEnabled(sensorType, enable);
321
322         SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_NOT_REGISTERED_LISETNER);
323         SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
324         SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
325         SysTryReturnResult(NID_UIX, r != E_INVALID_STATE, r, "%ls", W_MSG_NO_LISTENER_REGISTERED);
326         SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
327
328         return E_SUCCESS;
329 }
330
331 bool
332 SensorManager::IsWakeupEnabled(SensorType sensorType) const
333 {
334         ClearLastResult();
335
336         SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
337
338         bool isWakeupSupported = __pSensorManagerImpl->IsWakeupEnabled(sensorType);
339         result r = GetLastResult();
340
341         SysTryReturn(NID_UIX, r != E_INVALID_ARG, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_INVALID_SENSOR_TYPE);
342         SysTryReturn(NID_UIX, r != E_OPERATION_FAILED, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_OPERATION_FAILED);
343         SysTryReturn(NID_UIX, r != E_UNSUPPORTED_OPERATION, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_UNSUPPORTED_OPERATION);
344         SysTryReturn(NID_UIX, r != E_DEVICE_UNAVAILABLE, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_DEVICE_UNAVAILABLE);
345
346         return isWakeupSupported;
347 }
348 } } }// Tizen::Uix::Sensor