Fixed DynamicBox Accessibility 66/14866/1
authorchoimunseok <ms47.choi@samsung.com>
Wed, 18 Dec 2013 04:17:55 +0000 (13:17 +0900)
committerKeebong <keebong.bahn@samsung.com>
Mon, 13 Jan 2014 09:40:17 +0000 (18:40 +0900)
Change-Id: I61ced14ca62d861204e47bf9639e1d16af556c7e
Signed-off-by: choimunseok <ms47.choi@samsung.com>
src/FShell_AppWidgetLayer.cpp
src/FShell_AppWidgetView.cpp
src/FShell_AppWidgetView.h
src/FShell_AppWidgetViewManager.cpp

index e593ba2..bcc9e15 100644 (file)
@@ -38,6 +38,8 @@
 #include "FUi_CoordinateSystemUtils.h"
 #include "FUi_Window.h"
 #include "FUi_TouchManager.h"
+#include "FUi_AccessibilityContainer.h"
+#include "FUi_AccessibilityElement.h"
 #include "FShell_AppWidgetBuffer.h"
 #include "FShell_AppWidgetLayer.h"
 #include "FShell_AppWidgetProviderManagerImpl.h"
@@ -436,7 +438,25 @@ _AppWidgetLayer::SyncBuffer(const Dimension& size)
 {
        SysTryReturn(NID_SHELL, !__providerId.IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
 
-       result r = _AppWidgetProviderManagerImpl::GetInstance()->SyncRemoteBuffer(__providerId, size.width, size.height);
+       String screenReaderText(L"");
+       
+       if (__pWindow)
+       {
+               _AccessibilityContainer* pAccessibilityContainer = __pWindow->GetAccessibilityContainer();
+               if (pAccessibilityContainer)
+               {
+                       _AccessibilityElement* pAccessibilityElement = pAccessibilityContainer->GetChildElement(0);
+                       if (pAccessibilityElement)
+                       {
+                               screenReaderText = pAccessibilityElement->GetTraitString();
+                       }
+               }
+       }
+
+       bool isEmpty = screenReaderText.IsEmpty();
+       SysLog(NID_SHELL, "IsEmpty(%d) %ls", isEmpty, screenReaderText.GetPointer());
+
+       result r = _AppWidgetProviderManagerImpl::GetInstance()->SyncRemoteBuffer(__providerId, size.width, size.height, screenReaderText);
        SysTryReturn(NID_SHELL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        return r;
index e954a0a..ef3bda4 100644 (file)
@@ -34,6 +34,7 @@
 #include <FMediaImage.h>
 #include <FUiAnimDisplayContext.h>
 #include <FUiAnimVisualElementPropertyAnimation.h>
+#include <FShellAppWidgetProviderInfo.h>
 #include <FBase_StringConverter.h>
 #include <FGrp_BitmapImpl.h>
 #include <FUi_IAccessibilityListener.h>
@@ -225,9 +226,16 @@ _AppWidgetView::Initialize(const AppId& appId, const Tizen::Base::String& provid
                __pAccessibilityElement = new (std::nothrow) _AccessibilityElement(true);
                SysTryReturn(NID_SHELL, __pAccessibilityElement, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
 
-               __pAccessibilityElement->SetLabel(GetProviderName());
-               __pAccessibilityElement->SetTrait(L"Dynamic box. Double tap and hold to move.");
-//             __pAccessibilityElement->SetTraitWithStringId(const char* id)
+               unique_ptr<AppWidgetProviderInfo> pAppWidgetProviderInfo(GetAppWidgetProviderInfoN());
+               if (pAppWidgetProviderInfo.get())
+               {
+                       __pAccessibilityElement->SetLabel(pAppWidgetProviderInfo->GetDisplayName());
+               }
+               else
+               {
+                       __pAccessibilityElement->SetLabel(GetProviderName());
+               }
+               __pAccessibilityElement->SetTrait(L"Dynamic box");
                __pAccessibilityElement->SetName(L"AppWidgetView");
                __pAccessibilityElement->SetBounds(FloatRectangle(0.0f, 0.0f, rect.width, rect.height));
                pAccessibilityContainer->AddElement(*__pAccessibilityElement);
@@ -625,6 +633,33 @@ _AppWidgetView::OnBoundsChanged(void)
        }
 }
 
+void
+_AppWidgetView::UpdateAccessibility(const Tizen::Base::String& text)
+{
+       if (__pAccessibilityElement)
+       {
+               if (text.IsEmpty() == true)
+               {
+                       unique_ptr<AppWidgetProviderInfo> pAppWidgetProviderInfo(GetAppWidgetProviderInfoN());
+                       if (pAppWidgetProviderInfo.get())
+                       {
+                               __pAccessibilityElement->SetLabel(pAppWidgetProviderInfo->GetDisplayName());
+                               SysLog(NID_SHELL, "%ls", pAppWidgetProviderInfo->GetDisplayName().GetPointer());
+                       }
+                       else
+                       {
+                               __pAccessibilityElement->SetLabel(GetProviderName());
+                               SysLog(NID_SHELL, "%ls", GetProviderName().GetPointer());
+                       }
+               }
+               else
+               {
+                       __pAccessibilityElement->SetLabel(text);
+                       SysLog(NID_SHELL, "%ls", text.GetPointer());
+               }
+       }
+}
+
 bool
 _AppWidgetView::OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
 {
index dbf3e25..1d76d9a 100644 (file)
@@ -92,6 +92,7 @@ public:
        void CallProviderRemoved(void);
        int GetPixmapId(void) const;
        _AppWidgetViewPresenter* GetPresenter(void) const;
+       void UpdateAccessibility(const Tizen::Base::String& text);
 
 protected:
        _AppWidgetView(void);
index 86642f6..400df78 100644 (file)
@@ -459,6 +459,16 @@ _AppWidgetViewManager::OnAppWidgetUpdated(livebox* pAppWidget)
 
 //     SysLog(NID_SHELL, "type (%d)", type);
 
+       const char* pTitle = livebox_category_title(pAppWidget);
+       if (pTitle)
+       {
+               pAppWidgetView->UpdateAccessibility(String(pTitle));
+       }
+       else
+       {
+               pAppWidgetView->UpdateAccessibility(String(L""));
+       }
+
        switch (type)
        {
        case LB_TYPE_IMAGE: