Screen reader setting bug fix.
authorBumseung Cho <bumseung.cho@samsung.com>
Thu, 30 May 2013 05:34:43 +0000 (14:34 +0900)
committerBumseung Cho <bumseung.cho@samsung.com>
Thu, 30 May 2013 05:34:43 +0000 (14:34 +0900)
Change-Id: Ibab52c45dcfaa034e2b210c3e36f6e70e9f15451
Signed-off-by: Bumseung Cho <bumseung.cho@samsung.com>
packaging/osp-uifw.spec
src/ui/FUi_AccessibilityManager.cpp
src/ui/FUi_AccessibilitySystemSettingLoader.cpp
src/ui/FUi_EcoreEvas.cpp
src/ui/controls/FUiCtrl_CheckButton.cpp
src/ui/inc/FUi_AccessibilityManager.h
src/ui/inc/FUi_AccessibilitySystemSettingLoader.h

index 604761d..65b6c60 100644 (file)
@@ -52,6 +52,7 @@ BuildRequires:        pkgconfig(utilX)
 BuildRequires:  pkgconfig(xfixes)
 BuildRequires:  pkgconfig(xv)
 BuildRequires:  pkgconfig(xtst)
+BuildRequires:  pkgconfig(vconf)
 BuildRequires:  libexif-devel
 BuildRequires:  liblua-devel
 BuildRequires:  libtiff-devel
index 5f09dc8..179996b 100644 (file)
@@ -126,9 +126,13 @@ public:
        }
        virtual void OnTimerExpired(Timer& timer)
        {
+               if (!(__pAccessibilityManager->IsScreenReaderActivated()))
+               {
+                       return Stop();
+               }
                SysLog(NID_UI, "mode %d", __mode);
-               if (__pAccessibilityManager->GetTtsStatus() != Tizen::Ui::ACCESSIBILITY_SCREEN_READER_STATUS_READY
-                       && __pAccessibilityManager->GetTtsStatus() != Tizen::Ui::ACCESSIBILITY_SCREEN_READER_STATUS_PLAYING)
+               if (UiApp::GetInstance()->GetAppUiState() == APP_UI_STATE_BACKGROUND || (__pAccessibilityManager->GetTtsStatus() != Tizen::Ui::ACCESSIBILITY_SCREEN_READER_STATUS_READY
+                       && __pAccessibilityManager->GetTtsStatus() != Tizen::Ui::ACCESSIBILITY_SCREEN_READER_STATUS_PLAYING))
                {
                        __start = false;
                        Start(__mode);
@@ -1928,7 +1932,10 @@ _AccessibilityManager::ProcessGesture(_AccessibilityGestureType type, const Floa
                                        delete pList;
                                }
                        }
-                       __pTargetContainer->SetCurrentFocusedElement(null);
+                       if(__pTargetContainer)
+                       {
+                               __pTargetContainer->SetCurrentFocusedElement(null);
+                       }
                        if (pAccContainer->IsFocusManaged())
                        {
                                __pTargetContainer = pAccContainer;
@@ -2206,6 +2213,7 @@ _AccessibilityManager::OnChangedLocale(void)
 void
 _AccessibilityManager::OnAccessibilityScreenReaderIsActivated(bool set)
 {
+       SysLog(NID_UI, "Screen reader status is changed. %d", set);
        if (__screenReaderIsEnabled == set)
        {
                return;
@@ -2219,20 +2227,26 @@ _AccessibilityManager::OnAccessibilityScreenReaderIsActivated(bool set)
                        {
                                __pTtsPlayer->SetLocale(__pSettingLoader->GetLocale());
                                __pTtsPlayer->Activate();
+                               RequestAutoReading(_ACCESSIBILITY_AUTO_READING_MODE_FIRST_ITEM);
+                               
                        }
                }
                else
                {
                        __pTtsPlayer->Deactivate();
+                       EraseFocusUi();
+                       __pTargetContainer = null;
+                       __pTargetElement = null;
+                       __pTitleElement = null;
+                       __candidateList.RemoveAll();
+                       __mode = MODE_NONE;
+                       __targetControlHandle = _ControlHandle();
+                       __focusedControlHandle = _ControlHandle();
+                       __readingPopupParentHandle = _ControlHandle();
                }
        }
 }
 bool
-_AccessibilityManager::IsAccessibilityActivated(void)
-{
-       return __pSettingLoader->IsAccessibilityActivated();
-}
-bool
 _AccessibilityManager::IsScreenReaderActivated(void)
 {
        __screenReaderIsEnabled = __pSettingLoader->IsScreenReaderActivated();
@@ -2310,7 +2324,7 @@ _AccessibilityManager::IsFirstElementGainedFocus(void)
                }
        }
        return false;
-}\r
+}
 bool
 _AccessibilityManager::IsLastElementGainedFocus(void)
 {
index 5bed6c3..81648dd 100644 (file)
@@ -15,6 +15,7 @@
 // limitations under the License.
 //
 
+#include <vconf.h>
 #include <FBaseString.h>
 #include <FBaseSysLog.h>
 #include <FLclLocaleManager.h>
@@ -30,19 +31,20 @@ using namespace Tizen::System;
 
 namespace Tizen { namespace Ui {
 
-bool _activated = false;
 bool _screenReaderActivated = false;
+const char* VCONF_KEY_ACCESSIBILITY_SCREEN_READER = "db/setting/accessibility/tts";
 
 _AccessibilitySystemSettingLoader::_AccessibilitySystemSettingLoader(_AccessibilityManager& manager)
        : __pManager(&manager)
 {
        _screenReaderActivated = IsScreenReaderActivated();
-       _activated = _screenReaderActivated;
        _SettingInfoImpl::AddSettingEventListenerForInternal(*this);
+       vconf_notify_key_changed(VCONF_KEY_ACCESSIBILITY_SCREEN_READER, _AccessibilitySystemSettingLoader::SetSystemSetting, null);
 }
 _AccessibilitySystemSettingLoader::~_AccessibilitySystemSettingLoader(void)
 {
        _SettingInfoImpl::RemoveSettingEventListenerForInternal(*this);
+       vconf_ignore_key_changed(VCONF_KEY_ACCESSIBILITY_SCREEN_READER, _AccessibilitySystemSettingLoader::SetSystemSetting);
 }
 void
 _AccessibilitySystemSettingLoader::OnSettingChanged(String& key)
@@ -51,26 +53,23 @@ _AccessibilitySystemSettingLoader::OnSettingChanged(String& key)
        {
                __pManager->OnChangedLocale();
        }
-       else if (key == L"http://tizen.org/setting/speech.tts.screen")
-       {
-               _AccessibilityManager::GetInstance()->OnAccessibilityScreenReaderIsActivated(IsScreenReaderActivated());
-       }
-}
-
-bool
-_AccessibilitySystemSettingLoader::IsAccessibilityActivated(void)
-{
-       return _activated;
 }
 
 bool
 _AccessibilitySystemSettingLoader::IsScreenReaderActivated(void)
 {
-       return GetEcoreEvasMgr()->GetEcoreEvas()->IsAccessibilityScreenReaderActivated();
+//#if defined(_OSP_EMUL_)
 //     bool enable = false;
 //     _SettingInfoImpl::GetValue(L"http://tizen.org/setting/speech.tts.screen", enable);
-//     AppLog("bumseung %d", enable);
 //     return enable;
+//#else
+//     return GetEcoreEvasMgr()->GetEcoreEvas()->IsAccessibilityScreenReaderActivated();
+//#endif
+       int error = 0;
+       int value = 0;
+       error = vconf_get_bool(VCONF_KEY_ACCESSIBILITY_SCREEN_READER, &value);
+       SysTryReturnResult(NID_UI, error == 0, E_SYSTEM, "It is failed to get screen reader activation key.");
+       return (value ? true : false);
 }
 
 float
@@ -90,16 +89,14 @@ _AccessibilitySystemSettingLoader::GetLocale(void)
 }
 
 void
-_AccessibilitySystemSettingLoader::SetSystemSetting(const Tizen::Base::String key, bool value)
+_AccessibilitySystemSettingLoader::SetSystemSetting(keynode_t* node, void* userData)
 {
-       if (key == L"AccessibilityActivationStatus")
-       {
-               _activated = value;
-       }
-       else if (key == L"ScreenReaderActivationStatus")
+       if (strcmp(VCONF_KEY_ACCESSIBILITY_SCREEN_READER, vconf_keynode_get_name(node)) == 0)
        {
-               _screenReaderActivated = value;
-               _AccessibilityManager::GetInstance()->OnAccessibilityScreenReaderIsActivated(value);
+               int value = 0;
+               vconf_get_bool(VCONF_KEY_ACCESSIBILITY_SCREEN_READER, &value);
+               _screenReaderActivated = (value == 1);
+               _AccessibilityManager::GetInstance()->OnAccessibilityScreenReaderIsActivated(_screenReaderActivated);
        }
 }
 
index 40e02ad..7c0de8d 100644 (file)
@@ -92,7 +92,6 @@ namespace
 {
 
 Ecore_X_Atom __atomRotateRootAngle = 0;
-Ecore_X_Atom __atomAccessibility = 0;
 
 int __clipboardHeight = 0;
 
@@ -334,29 +333,6 @@ OnWindowShown(void* pData, int type, void* pEvent)
 }
 
 Eina_Bool
-OnAccessibilitySettingMessageReceived(void* pData, int type, void* pEvent)
-{
-       Ecore_X_Event_Client_Message* pClientEvent = static_cast<Ecore_X_Event_Client_Message*>(pEvent);
-       if (pClientEvent->message_type == __atomAccessibility)
-       {
-               if ((Eina_Bool)pClientEvent->data.l[0])
-               {
-                       _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", true);
-                       _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", true);
-                       SysLog(NID_UI, "Accessibility Screen reader is activated.");
-
-               }
-               else
-               {
-                       _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", false);
-                       _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", false);
-                       SysLog(NID_UI, "Accessibility Screen reader is deactivated.");
-               }
-       }
-       return ECORE_CALLBACK_PASS_ON;
-}
-
-Eina_Bool
 OnClientMessageReceived(void* pData, int type, void* pEvent)
 {
        Ecore_X_Event_Client_Message* pClientEvent = static_cast<Ecore_X_Event_Client_Message*>(pEvent);
@@ -1074,7 +1050,6 @@ _EcoreEvas::_EcoreEvas(void)
        __pClientMessageReceived = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnClientMessageReceived, NULL);
 
        ecore_x_event_mask_set(ecore_x_window_root_first_get(), ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
-       ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnAccessibilitySettingMessageReceived, NULL);
        ecore_x_event_mask_set(ecore_x_window_root_first_get(), ECORE_X_EVENT_MASK_WINDOW_PROPERTY);
 
        _pEvas = this;
@@ -2876,7 +2851,6 @@ _EcoreEvas::InitializeAtomList(void)
        SysTryCatch(NID_UI, __pClipboardClosed, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
 
        __atomRotateRootAngle = ecore_x_atom_get("_E_ILLUME_ROTATE_ROOT_ANGLE");
-       __atomAccessibility = ecore_x_atom_get("_E_MOD_ACC_SCR_READER_");
 
        return r;
 
index 1983e28..99cdc4d 100644 (file)
@@ -59,7 +59,7 @@ public:
        virtual bool OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element){return true;}
        virtual bool OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element)
        {
-               if (element.GetName() != L"CheckButtonText");
+               if (element.GetName() == L"MoreButtonText")
                {
                        return true;
                }
@@ -446,10 +446,6 @@ _CheckButton::OnAttachedToMainTree(void)
 void
 _CheckButton::UpdateAccessibilityElement(void)
 {
-       if(likely(!(_AccessibilityManager::IsActivated())))
-       {
-               return;
-       }
        _AccessibilityContainer* pContainer = GetAccessibilityContainer();
 
        if(pContainer)
index 1ab302f..c484808 100644 (file)
@@ -100,7 +100,6 @@ public:
 
        void OnChangedLocale(void);
        void OnAccessibilityScreenReaderIsActivated(bool set);
-       bool IsAccessibilityActivated(void);
        bool IsScreenReaderActivated(void);
        float GetLargeFontSize(void);
 
index 932e5ee..8134c20 100644 (file)
@@ -36,6 +36,9 @@ namespace Tizen { namespace Locales
 class Locale;
 }} //Tizen::Locales
 
+struct _keynode_t;
+typedef _keynode_t keynode_t;
+
 namespace Tizen { namespace Ui {
 
 class _AccessibilityManager;
@@ -47,11 +50,10 @@ public:
        _AccessibilitySystemSettingLoader(_AccessibilityManager& manager);
        virtual ~_AccessibilitySystemSettingLoader(void);
 
-       bool IsAccessibilityActivated(void);
        bool IsScreenReaderActivated(void);
        float GetLargeFontSize(void);
        Tizen::Locales::Locale GetLocale(void);
-       static void SetSystemSetting(const Tizen::Base::String key, bool value);
+       static void SetSystemSetting(keynode_t* node, void* userData);
 
 
 private: