2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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.
18 * @file FSys_SettingClient.cpp
19 * @brief This is the implementation file for _SettingClient class.
22 #include <unique_ptr.h>
24 #include <FBaseBoolean.h>
25 #include <FBaseSysLog.h>
26 #include <FBaseRtThread.h>
28 #include <FApp_AppInfo.h>
29 #include <FIo_AppServiceIpcMessages.h>
31 #include "FSys_CommunicationDispatcherClient.h"
32 #include "FSys_SettingClient.h"
36 using namespace Tizen::App;
37 using namespace Tizen::Base;
38 using namespace Tizen::Base::Collection;
39 using namespace Tizen::Base::Runtime;
40 using namespace Tizen::Io;
42 namespace Tizen { namespace System
45 static const wchar_t* _MOTION_UI = L"http://tizen.org/setting/motion.ui";
46 static const wchar_t* _ENABLE_MOTION = L"EnableMotion";
49 static const wchar_t* _FONT_SIZE = L"http://tizen.org/setting/font.size";
50 static const wchar_t* _FONTSIZE = L"FontSize";
52 static const wchar_t* _FONT_TYPE = L"http://tizen.org/setting/font.type";
53 static const wchar_t* _FONTTYPE = L"FontType";
58 static const wchar_t* _LOCALE_COUNTRY = L"http://tizen.org/setting/locale.country";
59 static const wchar_t* _COUNTRY = L"Country";
62 static const wchar_t* _LOCALE_DATE_FORMAT = L"http://tizen.org/setting/locale.date.format";
63 static const wchar_t* _DATE_FORMAT = L"DateFormat";
65 static const wchar_t* _LOCALE_TIME_FORMAT = L"http://tizen.org/setting/locale.time.format";
66 static const wchar_t* _TIME_FORMAT = L"TimeFormat";
68 static const wchar_t* _LOCALE_TIME_FORMAT_24HOUR = L"http://tizen.org/setting/locale.time.format.24hour";
69 static const wchar_t* _HOUR_FORMAT_SELECTED = L"24HourFormatSelected";
72 static const wchar_t* _LOCALE_LANGUAGE = L"http://tizen.org/setting/locale.language";
73 static const wchar_t* _LANGUAGE = L"Language";
76 static const wchar_t* _LOCALE_DATETIME_FORMAT = L"http://tizen.org/setting/locale.date_time.format";
77 static const wchar_t* _DATE_TIME_FORMAT = L"DateTimeFormat";
81 static const wchar_t* _LOCATION_GPS = L"http://tizen.org/setting/location.gps";
82 static const wchar_t* _GPS_ENABLED = L"GPSEnabled";
84 static const wchar_t* _LOCATION_WPS = L"http://tizen.org/setting/location.wps";
85 static const wchar_t* _WPS_ENABLED = L"WPSEnabled";
88 static const wchar_t* _NETWORK_FLIGHTMODE = L"http://tizen.org/setting/network.flight_mode";
89 static const wchar_t* _FLIGHT_MODE_ENABLED = L"FlightModeEnabled";
92 static const wchar_t* _NETWORK_TELEPHONY_PACKETSERVICE = L"http://tizen.org/setting/network.telephony.packet_service";
93 static const wchar_t* _PACKET_SERVICE_ALLOWED = L"PacketServiceAllowed";
95 static const wchar_t* _NETWORK_TELEPHONY_ROAMING = L"http://tizen.org/setting/network.telephony.roaming";
96 static const wchar_t* _DATA_ROAMING_ENABLED = L"DataRoamingEnabled";
99 static const wchar_t* _SCREEN_WALLPAPER = L"http://tizen.org/setting/screen.wallpaper";
100 static const wchar_t* _WALLPAPER = L"Wallpaper";
103 static const wchar_t* _SOUND_MEDIA_VOLUME = L"http://tizen.org/setting/sound.media.volume";
104 static const wchar_t* _MEDIA_SOUND_VOLUME = L"MediaSoundVolume";
106 static const wchar_t* _SOUND_NOTIFICATION_VOLUME = L"http://tizen.org/setting/sound.notification.volume";
107 static const wchar_t* _NOTIFICATION_SOUND_VOLUME = L"NotificationSoundVolume";
109 static const wchar_t* _SOUND_RINGTONE = L"http://tizen.org/setting/sound.ringtone";
110 static const wchar_t* _RINGTONE = L"Ringtone";
112 static const wchar_t* _SOUND_RINGTONE_VOLUME = L"http://tizen.org/setting/sound.ringtone.volume";
113 static const wchar_t* _RINGTONE_SOUND_VOLUME = L"RingtoneSoundVolume";
115 static const wchar_t* _SOUND_SYSTEM_VOLUME = L"http://tizen.org/setting/sound.system.volume";
116 static const wchar_t* _SYSTEM_SOUND_VOLUME = L"SystemSoundVolume";
118 static const wchar_t* _SOUND_SILENTMODE = L"http://tizen.org/setting/sound.silent_mode";
119 static const wchar_t* _SILENT_MODE = L"SilentMode";
122 static const wchar_t* _TOUCH_VIBRATION_LEVEL = L"TouchVibrationLevel";
123 static const wchar_t* _VIBRATOR_LEVEL = L"http://tizen.org/setting/vibrator.level";
125 static const wchar_t* _SETTING_COMMAND_FACTORY_RESET = L"osp.setting.command.factory.reset";
128 static const wchar_t* _USBMODE = L"UsbMode";
129 static const wchar_t* _USBMODE_MTP = L"MTP";
131 const static wchar_t* SETTING_SERVICE_ID = L"osp.sys.ipcserver.setting_service";
133 const static wchar_t* SETTING_SERVICE_COMMAND_GET_BOOL = L"osp.sys.ipcserver.setting_service.command.get.bool";
134 const static wchar_t* SETTING_SERVICE_COMMAND_GET_INT = L"osp.sys.ipcserver.setting_service.command.get.int";
135 const static wchar_t* SETTING_SERVICE_COMMAND_GET_STRING = L"osp.sys.ipcserver.setting_service.command.get.string";
136 const static wchar_t* SETTING_SERVICE_COMMAND_SET_BOOL = L"osp.sys.ipcserver.setting_service.command.set.bool";
137 const static wchar_t* SETTING_SERVICE_COMMAND_SET_INT = L"osp.sys.ipcserver.setting_service.command.set.int";
138 const static wchar_t* SETTING_SERVICE_COMMAND_SET_STRING = L"osp.sys.ipcserver.setting_service.command.set.string";
140 const static wchar_t* SETTING_SERVICE_COMMAND_SET_PRIV_BOOL = L"osp.sys.ipcserver.setting_service.command.set.priv.bool";
141 const static wchar_t* SETTING_SERVICE_COMMAND_SET_PRIV_STRING = L"osp.sys.ipcserver.setting_service.command.set.priv.string";
142 const static wchar_t* SETTING_SERVICE_COMMAND_SET_ASYNC_BOOL = L"osp.sys.ipcserver.setting_service.command.set.async.bool";
143 const static wchar_t* SETTING_SERVICE_COMMAND_SET_PRIV_ASYNC_BOOL = L"osp.sys.ipcserver.setting_service.command.set.priv.async.bool";
144 const static wchar_t* SETTING_SERVICE_COMMAND_RESULT = L"osp.sys.ipcserver.setting_service.command.result";
146 const static wchar_t* SETTING_SERVICE_COMMAND_SUBSCRIBE = L"osp.sys.ipcserver.setting_service.command.subscribe";
147 const static wchar_t* SETTING_SERVICE_COMMAND_UNSUBSCRIBE = L"osp.sys.ipcserver.setting_service.command.unsubscribe";
148 const static wchar_t* SETTING_SERVICE_COMMAND_EVENT = L"osp.sys.ipcserver.setting_service.command.event";
150 const static wchar_t* SETTING_SERVICE_COMMAND_SUPPORTED = L"osp.sys.ipcserver.setting_service.command.supported";
152 const static wchar_t* SETTING_SERVICE_COMMAND_SUBSCRIBE_INTERNAL = L"osp.sys.ipcserver.setting_service.command.subscribe.internal";
153 const static wchar_t* SETTING_SERVICE_COMMAND_UNSUBSCRIBE_INTERNAL = L"osp.sys.ipcserver.setting_service.command.unsubscribe.internal";
154 const static wchar_t* SETTING_SERVICE_COMMAND_EVENT_INTERNAL = L"osp.sys.ipcserver.setting_service.command.event.internal";
156 const static int SETTING_SERVICE_IPC_MSG_COMMAND = 0;
157 const static int SETTING_SERVICE_IPC_MSG_KEY = 1;
158 const static int SETTING_SERVICE_IPC_MSG_VALUE = 2;
159 const static int SETTING_SERVICE_IPC_MSG_RESULT = 1;
161 const static wchar_t* _SETTING_RESULT_SUCCESS = L"E_SUCCESS";
162 const static wchar_t* _SETTING_RESULT_INVALID_ARG = L"E_INVALID_ARG";
163 const static wchar_t* _SETTING_RESULT_PRIVILEGE_DENIED = L"E_PRIVILEGE_DENIED";
164 const static wchar_t* _SETTING_RESULT_UNSUPPORTED_OPERATION = L"E_UNSUPPORTED_OPERATION";
165 const static wchar_t* _SETTING_RESULT_OBJ_NOT_FOUND = L"E_OBJ_NOT_FOUND";
166 const static wchar_t* _SETTING_RESULT_OBJ_ALREADY_EXIST = L"E_OBJ_ALREADY_EXIST";
167 const static wchar_t* _SETTING_RESULT_IN_PROGRESS = L"E_IN_PROGRESS";
168 const static wchar_t* _SETTING_RESULT_SYSTEM = L"E_SYSTEM";
170 _SettingClient* _SettingClient::__pSettingClient = null;
173 _SettingClient::InitSettingClient(void)
175 unique_ptr<_SettingClient> pSettingClient(new (std::nothrow) _SettingClient());
176 SysTryReturn(NID_SYS, pSettingClient, ,E_OUT_OF_MEMORY, "It is failed to create SettingClient by [E_OUT_OF_MEMORY].");
178 result r = pSettingClient->Construct();
179 SysTryReturn(NID_SYS, r == E_SUCCESS, , r, "It is failed to create SettingClient by [%s].", GetErrorMessage(r));
181 __pSettingClient = pSettingClient.release();
182 atexit(DestroySettingClient);
186 _SettingClient::DestroySettingClient(void)
188 delete __pSettingClient;
189 __pSettingClient = null;
193 _SettingClient::GetInstance(void)
195 static pthread_once_t once_block = PTHREAD_ONCE_INIT;
196 if(__pSettingClient == null)
198 pthread_once(&once_block, InitSettingClient);
200 result r = GetLastResult();
203 once_block = PTHREAD_ONCE_INIT;
206 return __pSettingClient;
209 _SettingClient::_SettingClient()
211 , __subscribed(false)
212 , __subscribedForInternal(false)
214 , __pSettingEvent(null)
215 , __pSettingEventForInternal(null)
219 _SettingClient::~_SettingClient()
221 __subscribed = false;
222 __subscribedForInternal = false;
225 if(__pSettingEvent != null)
227 delete __pSettingEvent;
230 if(__pSettingEventForInternal != null)
232 delete __pSettingEventForInternal;
237 _SettingClient::Construct(void)
239 result r = E_SUCCESS;
241 static String serviceId(SETTING_SERVICE_ID);
243 unique_ptr<_SettingEvent> settingEvent(new(nothrow) _SettingEvent());
244 unique_ptr<_SettingEvent> settingEventForInternal(new(nothrow) _SettingEvent());
245 unique_ptr<_IpcClient> pIpcClient(new (nothrow) _IpcClient());
247 r = pIpcClient->Construct(serviceId, this);
248 SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, "It is failed to construct IPC client.");
249 r = __asyncEventList.Construct();
250 SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, "It is failed to construct asyn event list.");
252 SysTryReturnResult(NID_SYS, settingEvent != null && settingEventForInternal != null, r, "It is failed to create event instances.");
254 __pSettingEvent = settingEvent.release();
255 __pSettingEventForInternal = settingEventForInternal.release();
256 __pIpcClient = pIpcClient.release();
261 _SettingClient::OnIpcServerDisconnected(_IpcClient& client)
263 result r = E_SUCCESS;
266 SysLog(NID_SYS, "Common-service is down.");
268 __pIpcClient = new (nothrow) _IpcClient();
271 while(r != E_SUCCESS)
273 r = __pIpcClient->Construct(SETTING_SERVICE_ID, this);
282 SysTryReturnVoidResult(NID_SYS, r == E_SUCCESS, r, "It is failed to establish connection to common-service.");
284 __subscribed = false;
285 __subscribedForInternal = false;
286 r = SubscribeEvent();
287 SysTryReturnVoidResult(NID_SYS, r == E_SUCCESS, r, "It is failed to subscribe event.");
291 _SettingClient::ConvertCode(String code)
293 result r = E_SUCCESS;
294 if(code == _SETTING_RESULT_SUCCESS)
298 else if(code == _SETTING_RESULT_INVALID_ARG)
302 else if(code == _SETTING_RESULT_PRIVILEGE_DENIED)
304 r = E_PRIVILEGE_DENIED;
306 else if(code == _SETTING_RESULT_UNSUPPORTED_OPERATION)
308 r = E_UNSUPPORTED_OPERATION;
310 else if(code == _SETTING_RESULT_OBJ_NOT_FOUND)
314 else if(code == _SETTING_RESULT_OBJ_ALREADY_EXIST)
316 r = E_OBJ_ALREADY_EXIST;
318 else if(code == _SETTING_RESULT_IN_PROGRESS)
322 else if(code == _SETTING_RESULT_SYSTEM)
334 _SettingClient::ConvertKeyOspToTizen(String ospKey)
336 String tizenKey = ospKey;
338 if(tizenKey == _HOUR_FORMAT_SELECTED)
339 tizenKey = _LOCALE_TIME_FORMAT_24HOUR;
341 else if(tizenKey == _ENABLE_MOTION)
342 tizenKey = _MOTION_UI;
344 else if(tizenKey == _DATA_ROAMING_ENABLED)
345 tizenKey = _NETWORK_TELEPHONY_ROAMING;
347 else if(tizenKey == _GPS_ENABLED)
348 tizenKey = _LOCATION_GPS;
350 else if(tizenKey == _PACKET_SERVICE_ALLOWED)
351 tizenKey = _NETWORK_TELEPHONY_PACKETSERVICE;
353 else if(tizenKey == _SILENT_MODE)
354 tizenKey = _SOUND_SILENTMODE;
356 else if(tizenKey == _WPS_ENABLED)
357 tizenKey = _LOCATION_WPS;
359 else if(tizenKey == _FLIGHT_MODE_ENABLED)
360 tizenKey = _NETWORK_FLIGHTMODE;
362 else if(tizenKey == _TOUCH_VIBRATION_LEVEL)
363 tizenKey = _VIBRATOR_LEVEL;
365 else if(tizenKey == _MEDIA_SOUND_VOLUME)
366 tizenKey = _SOUND_MEDIA_VOLUME;
368 else if(tizenKey == _NOTIFICATION_SOUND_VOLUME)
369 tizenKey = _SOUND_NOTIFICATION_VOLUME;
371 else if(tizenKey == _RINGTONE_SOUND_VOLUME)
372 tizenKey = _SOUND_RINGTONE_VOLUME;
374 else if(tizenKey == _SYSTEM_SOUND_VOLUME)
375 tizenKey = _SOUND_SYSTEM_VOLUME;
377 else if(tizenKey == _COUNTRY)
378 tizenKey = _LOCALE_COUNTRY;
380 else if(tizenKey == _DATE_FORMAT)
381 tizenKey = _LOCALE_DATE_FORMAT;
383 else if(tizenKey == _DATE_TIME_FORMAT)
384 tizenKey = _LOCALE_DATETIME_FORMAT;
386 else if(tizenKey == _FONTTYPE)
387 tizenKey = _FONT_TYPE;
389 else if(tizenKey == _FONTSIZE)
390 tizenKey = _FONT_SIZE;
392 else if(tizenKey == _RINGTONE)
393 tizenKey = _SOUND_RINGTONE;
395 else if(tizenKey == _TIME_FORMAT)
396 tizenKey = _LOCALE_TIME_FORMAT;
398 else if(tizenKey == _WALLPAPER)
399 tizenKey = _SCREEN_WALLPAPER;
405 _SettingClient::ConvertKeyTizenToOsp(String tizenKey, String& ospKey)
407 result r = E_SUCCESS;
408 if(tizenKey == _LOCALE_TIME_FORMAT_24HOUR)
410 ospKey = _HOUR_FORMAT_SELECTED;
412 else if(tizenKey == _MOTION_UI)
414 ospKey = _ENABLE_MOTION;
416 else if(tizenKey == _NETWORK_TELEPHONY_ROAMING)
418 ospKey = _DATA_ROAMING_ENABLED;
420 else if(tizenKey == _LOCATION_GPS)
422 ospKey = _GPS_ENABLED;
424 else if(tizenKey == _NETWORK_TELEPHONY_PACKETSERVICE)
426 ospKey = _PACKET_SERVICE_ALLOWED;
428 else if(tizenKey == _SOUND_SILENTMODE)
430 ospKey = _SILENT_MODE;
432 else if(tizenKey == _LOCATION_WPS)
434 ospKey = _WPS_ENABLED;
436 else if(tizenKey == _NETWORK_FLIGHTMODE)
438 ospKey = _FLIGHT_MODE_ENABLED;
440 else if(tizenKey == _VIBRATOR_LEVEL)
442 ospKey = _TOUCH_VIBRATION_LEVEL;
444 else if(tizenKey == _SOUND_MEDIA_VOLUME)
446 ospKey = _MEDIA_SOUND_VOLUME;
448 else if(tizenKey == _SOUND_NOTIFICATION_VOLUME)
450 ospKey = _NOTIFICATION_SOUND_VOLUME;
452 else if(tizenKey == _SOUND_RINGTONE_VOLUME)
454 ospKey = _RINGTONE_SOUND_VOLUME;
456 else if(tizenKey == _SOUND_SYSTEM_VOLUME)
458 ospKey = _SYSTEM_SOUND_VOLUME;
460 else if(tizenKey == _LOCALE_COUNTRY)
464 else if(tizenKey == _LOCALE_DATE_FORMAT)
466 ospKey = _DATE_FORMAT;
468 else if(tizenKey == _LOCALE_DATETIME_FORMAT)
470 ospKey = _DATE_TIME_FORMAT;
472 else if(tizenKey == _FONT_TYPE)
476 else if(tizenKey == _FONT_SIZE)
480 else if(tizenKey == _SOUND_RINGTONE)
484 else if(tizenKey == _LOCALE_TIME_FORMAT)
486 ospKey = _TIME_FORMAT;
488 else if(tizenKey == _SCREEN_WALLPAPER)
501 _SettingClient::GetOnService(String commandId, String key, String& response)
503 result r = E_SUCCESS;
505 SysTryReturnResult(NID_SYS, commandId.GetLength() > 0 && key.GetLength() > 0, E_INVALID_ARG, "There are invalid parameters.");
506 String requestKey = ConvertKeyOspToTizen(key);
507 String* pResult = null;
508 String* pValue = null;
510 ArrayList requestMessages;
511 ArrayList responseMessages;
513 r = requestMessages.Construct();
514 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to construct request message.");
515 r = responseMessages.Construct();
516 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to construct response message.");
518 r = requestMessages.Add(commandId);
519 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add command id on request message.");
520 r = requestMessages.Add(requestKey);
521 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add required key on request message.");
523 IoService_Request message(requestMessages, &responseMessages);
525 r = __pIpcClient->SendRequest(message);
526 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
528 pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
529 SysTryCatch(NID_SYS, pResult != null, r = E_SYSTEM, r, "There is no result code.");
530 r = ConvertCode(*pResult);
534 pValue = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_VALUE);
535 SysTryCatch(NID_SYS, pValue != null, r = E_SYSTEM, r, "There is no result value.");
540 responseMessages.RemoveAll(true);
545 _SettingClient::SetOnService(String commandId, String key, String value)
547 result r = E_SUCCESS;
549 SysTryReturnResult(NID_SYS, commandId.GetLength() > 0 && key.GetLength() > 0, E_INVALID_ARG, "There are invalid parameters.");
550 String requestKey = ConvertKeyOspToTizen(key);
551 String* pResult = null;
553 ArrayList requestMessages;
554 ArrayList responseMessages;
556 r = requestMessages.Construct();
557 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to construct request message.");
558 r = responseMessages.Construct();
559 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to construct response message.");
561 r = requestMessages.Add(commandId);
562 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add command id on request message.");
563 r = requestMessages.Add(requestKey);
564 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add required key on request message.");
565 r = requestMessages.Add(value);
566 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add required value on request message.");
568 IoService_Request message(requestMessages, &responseMessages);
570 r = __pIpcClient->SendRequest(message);
571 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
573 pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
574 SysTryCatch(NID_SYS, pResult != null, r = E_SYSTEM, r, "There is no result code.");
575 r = ConvertCode(*pResult);
578 responseMessages.RemoveAll(true);
583 _SettingClient::GetValue(const String& key, bool& value)
586 result r = GetOnService(SETTING_SERVICE_COMMAND_GET_BOOL, key, response);
588 SysLog(NID_SYS, "result is %ls.", response.GetPointer());
605 _SettingClient::GetValue(const String& key, int& value)
608 result r = GetOnService(SETTING_SERVICE_COMMAND_GET_INT, key, response);
612 r = Integer::Parse(response, value);
613 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to convert to integer from [%s]", response.GetPointer());
620 _SettingClient::GetValue(const String& key, long long& value)
622 return E_OBJ_NOT_FOUND;
626 _SettingClient::GetValue(const String& key, double& value)
628 return E_OBJ_NOT_FOUND;
632 _SettingClient::GetValue(const String& key, UuId& value)
634 return E_OBJ_NOT_FOUND;
638 _SettingClient::GetValue(const String& key, String& value)
641 result r = E_SUCCESS;
643 if(key == _USBMODE) //This is compatible issue. USB mode is fixed on Tizen.
645 value = _USBMODE_MTP;
649 if(key == _LANGUAGE) //This is not full compatible.
651 r = GetOnService(SETTING_SERVICE_COMMAND_GET_STRING, _LOCALE_LANGUAGE, response);
655 r = GetOnService(SETTING_SERVICE_COMMAND_GET_STRING, key, response);
663 if(key == _LANGUAGE) //This is not full compatible.
665 r = value.SubString(0, 3, value);
666 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to sub string on %ls.", value.GetPointer());
673 _SettingClient::GetValueForPrivilegedKey(const String& key, bool& value)
675 return E_OBJ_NOT_FOUND;
679 _SettingClient::SetValue(const String& key, const bool& value)
682 requestValue = Boolean::ToString(value);
683 return SetOnService(SETTING_SERVICE_COMMAND_SET_BOOL, key, requestValue);
687 _SettingClient::SetValue(const String& key, const int& value)
690 requestValue.Append(value);
691 return SetOnService(SETTING_SERVICE_COMMAND_SET_INT, key, requestValue);
695 _SettingClient::SetValue(const String& key, const String& value)
698 requestValue.Append(value);
699 return SetOnService(SETTING_SERVICE_COMMAND_SET_STRING, key, requestValue);
703 _SettingClient::SetValueForPrivilegedKey(const String& key, bool value)
706 requestValue = Boolean::ToString(value);
707 return SetOnService(SETTING_SERVICE_COMMAND_SET_PRIV_BOOL, key, requestValue);
711 _SettingClient::SetValueForPrivilegedKey(const String& key, String value)
714 requestValue.Append(value);
715 return SetOnService(SETTING_SERVICE_COMMAND_SET_PRIV_STRING, key, requestValue);
720 _SettingClient::SetValueAsync(const String& key, bool value, ISettingInfoSetValueAsyncResultListener* listener)
722 result r = E_SUCCESS;
725 SysTryReturnResult(NID_SYS, __asyncEventList.ContainsKey(key) == false, E_IN_PROGRESS, "Required key[%ls] is already in progress.", key.GetPointer());
727 requestValue = Boolean::ToString(value);
728 r = SetOnService(SETTING_SERVICE_COMMAND_SET_ASYNC_BOOL, key, requestValue);
734 _SettingAsyncEvent* pEvent = new (std::nothrow) _SettingAsyncEvent();
735 pEvent->AddListener(*listener);
737 __asyncEventList.Add(new String(key), pEvent);
745 _SettingClient::SetValueAsyncForPrivilegedKey(const String& key, bool value, ISettingInfoSetValueAsyncResultListener* listener)
747 result r = E_SUCCESS;
750 SysTryReturnResult(NID_SYS, __asyncEventList.ContainsKey(key) == false, E_IN_PROGRESS, "Required key[%ls] is already in progress.", key.GetPointer());
752 requestValue = Boolean::ToString(value);
753 r = SetOnService(SETTING_SERVICE_COMMAND_SET_PRIV_ASYNC_BOOL, key, requestValue);
759 _SettingAsyncEvent* pEvent = new (std::nothrow) _SettingAsyncEvent();
760 pEvent->AddListener(*listener);
762 __asyncEventList.Add(new String(key), pEvent);
770 _SettingClient::OnIpcResponseReceived(_IpcClient& client, const IPC::Message& message)
772 IPC_BEGIN_MESSAGE_MAP(_SettingClient, message)
773 IPC_MESSAGE_HANDLER_EX(IoService_Data, &client, OnDataReceived)
774 IPC_END_MESSAGE_MAP_EX()
778 _SettingClient::OnDataReceived(const ArrayList& data)
780 result r = E_SUCCESS;
781 String* pCommandCode = (String*)data.GetAt(SETTING_SERVICE_IPC_MSG_COMMAND);
782 String* pKey = (String*)data.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
783 String* pValue = null;
785 SysTryCatch(NID_SYS, pCommandCode != null && pKey != null, r = E_SYSTEM, r, "There is no valid data.");
787 SysLog(NID_SYS, "CommandCode: %ls", pCommandCode->GetPointer());
788 SysLog(NID_SYS, "Key: %ls", pKey->GetPointer());
790 if(*pCommandCode == SETTING_SERVICE_COMMAND_RESULT)
792 pValue = (String*)(data.GetAt(SETTING_SERVICE_IPC_MSG_VALUE));
793 SysTryCatch(NID_SYS, pValue != null, r = E_SYSTEM, r, "There is no valid value.");
795 r = ConvertCode(*pValue);
797 _SettingAsyncEvent* pEvent = dynamic_cast <_SettingAsyncEvent*> (__asyncEventList.GetValue(*pKey));
799 SysTryCatch(NID_SYS, pEvent != null, r = E_SYSTEM, r, "There is no reserved event.");
801 _SettingAsyncEventArg* pSettingAsyncEventArg = new (std::nothrow) _SettingAsyncEventArg;
802 SysTryCatch(NID_SYS, pSettingAsyncEventArg != null, r = E_SYSTEM, r, "There is no reserved event.");
804 pSettingAsyncEventArg->Key = *pKey;
805 pSettingAsyncEventArg->errorCode = r;
806 pEvent->Fire(*pSettingAsyncEventArg);
808 r = __asyncEventList.Remove(*pKey, true);
810 else if(*pCommandCode == SETTING_SERVICE_COMMAND_EVENT)
812 SysTryReturnVoidResult(NID_SYS, __pSettingEvent != null, E_SYSTEM, "Event is not ready.");
814 _SettingEventArg* pSettingEventArg = new (std::nothrow) _SettingEventArg();
815 pSettingEventArg->KeyName = *pKey;
817 if(_AppInfo::GetApiVersion() == _API_VERSION_2_0 && _AppInfo::IsOspCompat() == true)
820 r = ConvertKeyTizenToOsp(pSettingEventArg->KeyName, ospKey);
823 pSettingEventArg->KeyName = ospKey;
824 __pSettingEvent->Fire(*pSettingEventArg);
829 __pSettingEvent->Fire(*pSettingEventArg);
832 else if(*pCommandCode == SETTING_SERVICE_COMMAND_EVENT_INTERNAL)
834 SysTryReturnVoidResult(NID_SYS, __pSettingEvent != null, E_SYSTEM, "Event is not ready.");
836 _SettingEventArg* pSettingEventArg = new (std::nothrow) _SettingEventArg();
837 pSettingEventArg->KeyName = *pKey;
839 __pSettingEventForInternal->Fire(*pSettingEventArg);
843 ArrayList* pData = const_cast< ArrayList *> (&data);
844 pData->RemoveAll(true);
848 _SettingClient::HasKey(const String& key)
851 result r = GetOnService(SETTING_SERVICE_COMMAND_SUPPORTED, key, response);
853 SysLog(NID_SYS, "HasKey result key:%ls, %ls", key.GetPointer(), response.GetPointer());
854 if(response == L"1" && r == E_SUCCESS)
862 _SettingClient::ResetToFactoryDefault(void)
867 result r = GetOnService(_SETTING_COMMAND_FACTORY_RESET, value, response);
868 SysLog(NID_SYS, "Reset result is %s[%ls].", GetErrorMessage(r), response.GetPointer());
872 //For OSP_COMPAT mode
874 _SettingClient::SetVolume(const String& soundCategory, int level)
876 result r = SetValue(soundCategory, level);
877 if (r == E_INVALID_ARG)
881 else if(r == E_OBJ_NOT_FOUND)
885 else if(r == E_UNSUPPORTED_OPERATION)
894 _SettingClient::SubscribeEvent(void)
896 result r = E_SUCCESS;
897 SysTryReturnResult(NID_SYS, __pSettingEvent != null, E_SYSTEM, "listener event is not ready.");
898 _SettingEvent* pSettingEvent = dynamic_cast<_SettingEvent*> (__pSettingEvent);
899 SysTryReturnResult(NID_SYS, pSettingEvent != null, E_SYSTEM, "listener event is not ready.");
901 SysTryReturnResult(NID_SYS, __pSettingEventForInternal != null, E_SYSTEM, "listener list is not ready.");
902 _SettingEvent* pSettingEventForInternal = dynamic_cast<_SettingEvent*> (__pSettingEventForInternal);
903 SysTryReturnResult(NID_SYS, pSettingEventForInternal != null, E_SYSTEM, "listener list is not ready.");
905 if(pSettingEvent->GetCount() > 0 && __subscribed == false)
907 ArrayList requestMessages;
908 ArrayList responseMessages;
910 requestMessages.Construct();
911 responseMessages.Construct();
913 String commandId(SETTING_SERVICE_COMMAND_SUBSCRIBE);
915 requestMessages.Add(commandId);
917 unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
919 r = __pIpcClient->SendRequest(*(pMsg.get()));
920 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
922 String* pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
923 SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "There is no result code.");
924 r = ConvertCode(*pResult);
930 responseMessages.RemoveAll(true);
932 else if(pSettingEvent->GetCount() == 0 && __subscribed == true)
934 ArrayList requestMessages;
935 ArrayList responseMessages;
937 requestMessages.Construct();
938 responseMessages.Construct();
940 String commandId(SETTING_SERVICE_COMMAND_UNSUBSCRIBE);
942 requestMessages.Add(commandId);
944 unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
946 r = __pIpcClient->SendRequest(*(pMsg.get()));
947 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
949 String* pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
950 SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "There is no result code.");
951 r = ConvertCode(*pResult);
955 __subscribed = false;
957 responseMessages.RemoveAll(true);
960 if(pSettingEventForInternal->GetCount() > 0 && __subscribedForInternal == false)
962 ArrayList requestMessages;
963 ArrayList responseMessages;
965 requestMessages.Construct();
966 responseMessages.Construct();
968 String commandId(SETTING_SERVICE_COMMAND_SUBSCRIBE_INTERNAL);
970 requestMessages.Add(commandId);
972 unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
974 r = __pIpcClient->SendRequest(*(pMsg.get()));
975 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
977 String* pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
978 SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "There is no result code.");
979 r = ConvertCode(*pResult);
983 __subscribedForInternal = true;
985 responseMessages.RemoveAll(true);
987 else if(pSettingEventForInternal->GetCount() == 0 && __subscribedForInternal == true)
989 ArrayList requestMessages;
990 ArrayList responseMessages;
992 requestMessages.Construct();
993 responseMessages.Construct();
995 String commandId(SETTING_SERVICE_COMMAND_UNSUBSCRIBE_INTERNAL);
997 requestMessages.Add(commandId);
999 unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
1001 r = __pIpcClient->SendRequest(*(pMsg.get()));
1002 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
1004 String* pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
1005 SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "There is no result code.");
1006 r = ConvertCode(*pResult);
1010 __subscribedForInternal = false;
1012 responseMessages.RemoveAll(true);
1019 _SettingClient::AddSettingEventListener(ISettingEventListener& listener)
1021 SysTryReturnResult(NID_SYS, __pSettingEvent != null, E_SYSTEM, "listener event is not ready.");
1022 _SettingEvent* pSettingEvent = dynamic_cast<_SettingEvent*> (__pSettingEvent);
1023 SysTryReturnResult(NID_SYS, pSettingEvent != null, E_SYSTEM, "listener event is not ready.");
1025 result r = pSettingEvent->AddSettingEventListener(listener);
1027 if (r == E_OBJ_ALREADY_EXIST)
1029 SysLogException(NID_SYS, E_OBJ_ALREADY_EXIST, "It is already registered.");
1030 return E_OBJ_ALREADY_EXIST;
1033 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add event listener.");
1035 r = SubscribeEvent();
1036 SysLog(NID_SYS, "Event Subscription Result is %s.", GetErrorMessage(r));
1046 _SettingClient::RemoveSettingEventListener(ISettingEventListener& listener)
1048 SysTryReturnResult(NID_SYS, __pSettingEvent != null, E_SYSTEM, "listener event is not ready.");
1049 _SettingEvent* pSettingEvent = dynamic_cast<_SettingEvent*> (__pSettingEvent);
1050 SysTryReturnResult(NID_SYS, pSettingEvent != null, E_SYSTEM, "listener event is not ready.");
1052 result r = pSettingEvent->RemoveSettingEventListener(listener);
1054 if (r == E_OBJ_NOT_FOUND)
1056 SysLogException(NID_SYS, E_OBJ_NOT_FOUND, "It is not registered.");
1057 return E_OBJ_NOT_FOUND;
1059 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to remove event listener.[%s]", GetErrorMessage(r));
1061 r = SubscribeEvent();
1062 SysLog(NID_SYS, "Event Subscription Result is %s.", GetErrorMessage(r));
1071 // Event for internal
1073 _SettingClient::AddSettingEventListenerForInternal(ISettingEventListener& listener)
1075 SysTryReturnResult(NID_SYS, __pSettingEventForInternal != null, E_SYSTEM, "listener event is not ready.");
1076 _SettingEvent* pSettingEvent = dynamic_cast<_SettingEvent*> (__pSettingEventForInternal);
1077 SysTryReturnResult(NID_SYS, pSettingEvent != null, E_SYSTEM, "listener event is not ready.");
1079 result r = pSettingEvent->AddSettingEventListener(listener);
1080 SysLog(NID_SYS, "Add Setting event result is %s for internal.", GetErrorMessage(r));
1082 if (r == E_INVALID_OPERATION)
1087 SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, "It is failed to add event listener.");
1089 r = SubscribeEvent();
1090 SysLog(NID_SYS, "Event Subscription Result is %s.", GetErrorMessage(r));
1100 _SettingClient::RemoveSettingEventListenerForInternal(ISettingEventListener& listener)
1102 SysTryReturnResult(NID_SYS, __pSettingEventForInternal != null, E_SYSTEM, "listener list is not ready.");
1103 _SettingEvent* pSettingEvent = dynamic_cast<_SettingEvent*> (__pSettingEventForInternal);
1104 SysTryReturnResult(NID_SYS, pSettingEvent != null, E_SYSTEM, "listener event is not ready.");
1106 result r = pSettingEvent->RemoveSettingEventListener(listener);
1107 SysLog(NID_SYS, "Remove setting event result is %s for internal.", GetErrorMessage(r));
1109 SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, "It is failed to remove event listener.");
1111 r = SubscribeEvent();
1112 SysLog(NID_SYS, "Event Subscription Result is %s.", GetErrorMessage(r));
1121 //For OSP_COMPAT mode
1123 _SettingClient::SetSettingEventListener(ISettingEventListener* pListener)
1125 result r = E_SUCCESS;
1126 if(__pListener != null)
1128 r = RemoveSettingEventListener(*pListener);
1129 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to unregister exist listener.");
1130 if(pListener != null)
1132 r = AddSettingEventListener(*pListener);
1133 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to register listener.");
1137 __pListener = pListener;
1142 } } // Tizen::System