Fix speech option and change internal event
authorJoohyun Kim <joohyune.kim@samsung.com>
Wed, 22 May 2013 13:46:48 +0000 (22:46 +0900)
committerJoohyun Kim <joohyune.kim@samsung.com>
Wed, 22 May 2013 13:49:47 +0000 (22:49 +0900)
Change-Id: I0f65b14e5f3422347ac53103e0765f9fe1d12226
Signed-off-by: Joohyun Kim <joohyune.kim@samsung.com>
inc/FSys_SettingService.h
src/FSys_SettingService.cpp
src/setting/FSys_SettingFontProvider.cpp
src/setting/FSys_SettingLocaleProvider.cpp
src/setting/FSys_SettingSpeechProvider.cpp

index d19d584..cb85c29 100644 (file)
@@ -53,6 +53,7 @@ public:
        result RegisterSettingProvider(_ISettingProvider& settingProvider);
        result UnregisterSettingProvider(_ISettingProvider& settingProvider);
        result SendEvent(Tizen::Base::String key);
+       result SendEventForInternal(Tizen::Base::String key);
        result SendResponse(int pid, Tizen::Base::String responseId, Tizen::Base::String key, Tizen::Base::String value);
 
 public:
@@ -62,6 +63,7 @@ private:
        Tizen::Base::Collection::HashMapT<Tizen::Base::String, _ISettingProvider*> __settingProviderList;
        Tizen::App::_CommunicationDispatcher*   __pCommunicationDispatcher;
        Tizen::Base::Collection::ArrayList      __eventListenerList;
+       Tizen::Base::Collection::ArrayList      __eventListenerListForInternal;
 
        Tizen::Base::Runtime::Mutex             __eventProtect;
        bool                                    __firstRequest;
index 00b9bad..312bbc3 100644 (file)
@@ -78,6 +78,10 @@ namespace {
        static const wchar_t* _SETTING_COMMAND_ADD_EVENT = L"osp.setting.command.add.event";
        static const wchar_t* _SETTING_COMMAND_REMOVE_EVENT = L"osp.setting.command.remove.event";
 
+       static const wchar_t* _SETTING_COMMAND_ADD_EVENT_INTERNAL = L"osp.setting.command.add.event.internal";
+       static const wchar_t* _SETTING_COMMAND_REMOVE_EVENT_INTERNAL = L"osp.setting.command.remove.event.internal";
+       static const wchar_t* _SETTING_SERVICE_TYPE_EVENT_INTERNAL = L"osp.setting.service.type.event.internal";
+
        static const wchar_t* _SETTING_COMMAND_SUPPORTED = L"osp.setting.command.supported";
 
        static const wchar_t* _SETTING_RESULT_SUCCESS = L"osp.system.result.success";
@@ -120,6 +124,7 @@ _SettingService::_SettingService()
 
        __settingProviderList.Construct(0, 0, hashProvider, stringComparer);
        __eventListenerList.Construct();
+       __eventListenerListForInternal.Construct();
        __eventProtect.Create();
 
 
@@ -259,6 +264,37 @@ _SettingService::OnRequestOccured(AppId appId, int pid, ArrayList* request, Arra
                        r = E_OBJ_NOT_FOUND;
                }
        }
+       else if(*command == _SETTING_COMMAND_ADD_EVENT_INTERNAL)
+       {
+               SysLog(NID_SYS, "Setting Event subscription is required. (Internal)");
+
+               if(__eventListenerListForInternal.Contains(processId) == false)
+               {
+                       __eventProtect.Acquire();
+                       r = __eventListenerListForInternal.Add(new (std::nothrow) Integer(pid));
+                       __eventProtect.Release();
+               }
+               else
+               {
+                       SysLogException(NID_SYS, E_OBJ_ALREADY_EXIST, "Required Application[%ls] is already registered.", appId.GetPointer());
+                       r = E_OBJ_ALREADY_EXIST;
+               }
+       }
+       else if(*command == _SETTING_COMMAND_REMOVE_EVENT_INTERNAL)
+       {
+               SysLog(NID_SYS, "Setting Event un-subscription is required. (Internal)");
+               if(__eventListenerListForInternal.Contains(processId) == true)
+               {
+                       __eventProtect.Acquire();
+                       r = __eventListenerListForInternal.Remove(processId, true);
+                       __eventProtect.Release();
+               }
+               else
+               {
+                       SysLogException(NID_SYS, E_OBJ_NOT_FOUND, "Required Application[%ls] is not registered.", appId.GetPointer());
+                       r = E_OBJ_NOT_FOUND;
+               }
+       }
        else if(*command == _SETTING_COMMAND_FACTORY_RESET)
        {
                SysLog(NID_SYS, "Warning !!!, Factory reset is required.");
@@ -589,6 +625,44 @@ _SettingService::SendEvent(String key)
 }
 
 result
+_SettingService::SendEventForInternal(String key)
+{
+       result r = E_SUCCESS;
+       unique_ptr<IEnumerator> pEnum(__eventListenerListForInternal.GetEnumeratorN());
+
+       SysTryReturnResult(NID_SYS, pEnum != null, E_SYSTEM, "There is no listener(s).");
+
+       SysTryReturnResult(NID_SYS, __pCommunicationDispatcher != null, E_SYSTEM, "Communication Dispatcher is not ready.");
+
+       __eventProtect.Acquire();
+       while(pEnum->MoveNext() == E_SUCCESS)
+       {
+               Integer* pProcessId = (Integer*)pEnum->GetCurrent();
+               SysTryReturnResult(NID_SYS, pProcessId != null, E_SYSTEM, "There is no listener id.");
+
+               String serviceId(_SETTING_SERVICE_ID);
+               String eventId(_SETTING_SERVICE_TYPE_EVENT);
+
+               ArrayList data;
+               data.Construct();
+               data.Add(serviceId);
+               data.Add(eventId);
+               data.Add(key);
+               r = __pCommunicationDispatcher->SendData(pProcessId->value, data);
+               if(r != E_SUCCESS)
+               {
+                       SysLog(NID_SYS, "Required Key[%ls] is failed to delivered to application[%d]. [%s]", key.GetPointer(), pProcessId->value, GetErrorMessage(r));
+               }
+               else
+               {
+                       SysLog(NID_SYS, "Required Key[%ls] is delivered to application[%d] successfully.", key.GetPointer(), pProcessId->value);
+               }
+       }
+       __eventProtect.Release();
+       return E_SUCCESS;
+}
+
+result
 _SettingService::SendResponse(int pid, String responseId, String key, String value)
 {
        SysTryReturnResult(NID_SYS, __pCommunicationDispatcher != null, E_SYSTEM, "Communication Dispatcher is not ready.");
@@ -613,6 +687,7 @@ _SettingService::OnApplicationTerminated(const Tizen::App::AppId& appId, int pid
        __eventProtect.Acquire();
        Integer processId(pid);
        r = __eventListenerList.Remove(processId, true);
+       r = __eventListenerListForInternal.Remove(processId, true);
        __eventProtect.Release();
        SysLog(NID_SYS, "Application[%ls, %d] is terminated. And remove event listener [%s]", appId.GetPointer(), pid, GetErrorMessage(r));
 }
index d853459..b61774f 100644 (file)
@@ -331,6 +331,7 @@ _SettingFontProvider::SettingEventSettingInfo(system_settings_key_e key, void* u
        _SettingService* pSettingService = _SettingService::GetInstance();
        if(pSettingService != null)
        {
+               pSettingService->SendEventForInternal(settingKey);
                pSettingService->SendEvent(settingKey);
        }
 }
index 1e8fc48..731dca6 100644 (file)
@@ -648,11 +648,13 @@ _SettingLocaleProvider::SettingEventRuntimeInfo(runtime_info_key_e key, void* us
                deliveredKey = settingKey + _LOCALE_TIME_FORMAT;
                pSettingService->SendEvent(deliveredKey);
                deliveredKey = settingKey + _LOCALE_COUNTRY;
+               pSettingService->SendEventForInternal(deliveredKey);
                pSettingService->SendEvent(deliveredKey);
        }
        else if(key == RUNTIME_INFO_KEY_LANGUAGE)
        {
                settingKey.Append(_LOCALE_LANGUAGE);
+               pSettingService->SendEventForInternal(settingKey);
                pSettingService->SendEvent(settingKey);
        }
        else if(key == RUNTIME_INFO_KEY_24HOUR_CLOCK_FORMAT_ENABLED)
index c5dc07f..8390b34 100644 (file)
@@ -114,10 +114,16 @@ _SettingSpeechProvider::GetValue(const String& key, bool& value)
                SysTryReturnResult(NID_SYS, HasKey(key) == true, E_UNSUPPORTED_OPERATION, "Current device does not support screen reader.");
                r = E_SUCCESS;
                int current_value = 0;
-               errorCode = vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &current_value);
+               errorCode = vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &current_value);
                SysTryReturnResult(NID_SYS, errorCode == 0, E_SYSTEM, "It is failed to get VCONFKEY_SETAPPL_ACCESSIBILITY_TTS key.");
-
-               value = (current_value == 1);
+               if(current_value == 0)
+               {
+                       value = false;
+               }
+               else
+               {
+                       value = true;
+               }
        }
        return r;
 }
@@ -150,9 +156,8 @@ _SettingSpeechProvider::SetValueForPrivilegedKey(const String& key, bool value)
                SysTryReturnResult(NID_SYS, HasKey(key) == true, E_UNSUPPORTED_OPERATION, "Current device does not support screen reader.");
                r = E_SUCCESS;
 
-               int tts_value = (int)value;
-
-               errorCode = vconf_set_int(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, tts_value);
+               int current_value = (int)value;
+               errorCode = vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, current_value);
                SysTryReturnResult(NID_SYS, errorCode == 0, E_SYSTEM, "It is failed to get VCONFKEY_SETAPPL_ACCESSIBILITY_TTS key.");
        }
        return r;