Accessibility Issues fixed in DateTimeBar.
authorSyed Khaja Moinuddin <moinuddin.s@samsung.com>
Thu, 11 Apr 2013 03:14:27 +0000 (12:14 +0900)
committersriram.k <sriram.k@samsung.com>
Tue, 23 Apr 2013 16:12:10 +0000 (21:42 +0530)
Signed-off-by: Syed Khaja Moinuddin <moinuddin.s@samsung.com>
Change-Id: Icd666e637c003ed50dc5b5b29db9671b9ae8c8ed
Signed-off-by: Syed Khaja Moinuddin <moinuddin.s@samsung.com>
src/ui/controls/FUiCtrl_DateTimeBar.cpp
src/ui/controls/FUiCtrl_DateTimeBarPresenter.cpp
src/ui/controls/FUiCtrl_DateTimeUtils.cpp
src/ui/controls/FUiCtrl_EditDate.cpp
src/ui/controls/FUiCtrl_EditTime.cpp
src/ui/inc/FUiCtrl_DateTimeBar.h
src/ui/inc/FUiCtrl_DateTimeBarPresenter.h
src/ui/inc/FUiCtrl_DateTimeUtils.h

index ed61c9a..a29ed35 100644 (file)
@@ -48,6 +48,7 @@ _DateTimeBar::_DateTimeBar(void)
        , __pGestureFlick(null)
        , __parentWindowBounds(0.0f, 0.0f, 0.0f, 0.0f)
        , __pOwner(null)
+       , __accessibilityFocusOutIndex(-1)
 {
 
 }
@@ -232,10 +233,6 @@ _DateTimeBar::SetSelectedBoxId(_DateTimeId boxId)
 void
 _DateTimeBar::InitializeAccessibilityElement(void)
 {
-       if (likely(!(_AccessibilityManager::IsActivated())))
-       {
-               return;
-       }
 
        _AccessibilityContainer* pContainer = GetAccessibilityContainer();
 
@@ -445,43 +442,65 @@ _DateTimeBar::OnDeactivated(void)
 void
 _DateTimeBar::AddAccessibilityElement(const FloatRectangle& itemBounds, const String& itemText)
 {
-       if (likely(!(_AccessibilityManager::IsActivated())))
-       {
-               return;
-       }
-
        _AccessibilityContainer* pContainer = GetAccessibilityContainer();
-       if (pContainer)
-       {
-               _AccessibilityElement* pAccessibilityElement = new (std::nothrow) _AccessibilityElement(true);
-               SysTryReturnVoidResult(NID_UI_CTRL, pAccessibilityElement != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
-
-               String labelText = itemText;
-               pAccessibilityElement->SetBounds(itemBounds);
-               pAccessibilityElement->SetLabel(labelText);
-               pAccessibilityElement->SetTrait(GetAccessibilityTraitValue());
-               pContainer->AddElement(*pAccessibilityElement);
-               __accessibilityElements.Add(pAccessibilityElement);
-       }
+       SysTryReturnVoidResult(NID_UI_CTRL, (pContainer != null), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+       _AccessibilityElement* pAccessibilityElement = new (std::nothrow) _AccessibilityElement(true);
+       SysTryReturnVoidResult(NID_UI_CTRL, pAccessibilityElement != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+       String labelText = itemText;
+       pAccessibilityElement->SetBounds(itemBounds);
+       pAccessibilityElement->SetLabel(labelText);
+       pAccessibilityElement->SetTrait(GetAccessibilityTraitValue());
+       pContainer->AddElement(*pAccessibilityElement);
+       __accessibilityElements.Add(pAccessibilityElement);
 
        return;
 }
 
 void
-_DateTimeBar::RemoveAllAccessibilityElement(void)
+_DateTimeBar::InsertAccessibilityElementAt(int index, const FloatRectangle& itemBounds, const String& itemText)
 {
-       if (likely(!(_AccessibilityManager::IsActivated())))
-       {
-               return;
-       }
+       _AccessibilityContainer* pContainer = GetAccessibilityContainer();
+       SysTryReturnVoidResult(NID_UI_CTRL, (pContainer != null), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+       _AccessibilityElement* pAccessibilityElement = new (std::nothrow) _AccessibilityElement(true);
+       SysTryReturnVoidResult(NID_UI_CTRL, pAccessibilityElement != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
 
+       String labelText = itemText;
+       pAccessibilityElement->SetBounds(itemBounds);
+       pAccessibilityElement->SetLabel(labelText);
+       pAccessibilityElement->SetTrait(GetAccessibilityTraitValue());
+       pContainer->InsertElement(*pAccessibilityElement, index);
+       __accessibilityElements.InsertAt(pAccessibilityElement, index);
+
+       return;
+}
+
+void
+_DateTimeBar::RemoveAccessibilityElementAt(int index)
+{
        _AccessibilityContainer* pContainer = GetAccessibilityContainer();
+       SysTryReturnVoidResult(NID_UI_CTRL, (pContainer != null), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+       _AccessibilityElement* pAccessibilityElement = null;
+       __accessibilityElements.GetAt(index, pAccessibilityElement);
 
-       if (pContainer == null)
+       if (pAccessibilityElement != null)
        {
-               return;
+               __accessibilityElements.RemoveAt(index);
+               pContainer->RemoveElement(*pAccessibilityElement);
        }
 
+       return;
+}
+
+void
+_DateTimeBar::RemoveAllAccessibilityElement(void)
+{
+       _AccessibilityContainer* pContainer = GetAccessibilityContainer();
+       SysTryReturnVoidResult(NID_UI_CTRL, (pContainer != null), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
        _AccessibilityElement* pAccessibilityElement = null;
 
        while (__accessibilityElements.GetCount() > 0)
@@ -491,10 +510,6 @@ _DateTimeBar::RemoveAllAccessibilityElement(void)
                        __accessibilityElements.RemoveAt(0);
                        pContainer->RemoveElement(*pAccessibilityElement);
                }
-               else
-               {
-                       __accessibilityElements.RemoveAt(0);
-               }
        }
 
        return;
@@ -622,6 +637,16 @@ _DateTimeBar::RefreshItems(void)
 
        __pDateTimeBarPresenter->StartAnimationEffect();
 
+       if (likely((_AccessibilityManager::IsActivated())))
+       {
+               _AccessibilityElement* pAccessibilityElement = GetAccessibilityElementAt(__pDateTimeBarPresenter->GetSelectedItemIndex() - 1);
+
+               if (pAccessibilityElement != null)
+               {
+                       _AccessibilityManager::GetInstance()->SetGlobalFocusedElement(*pAccessibilityElement);
+               }
+       }
+
        return;
 }
 
@@ -642,20 +667,67 @@ _DateTimeBar::OnAccessibilityReadingElement(const _AccessibilityContainer& contr
 {
        return false;
 }
+
 bool
 _DateTimeBar::OnAccessibilityReadedElement(const _AccessibilityContainer& control, const _AccessibilityElement& element)
 {
        return false;
 }
+
 bool
 _DateTimeBar::OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element)
 {
+       if (__accessibilityFocusOutIndex == -1)
+       {
+               return false;
+       }
+
+       float itemWidth = 0;
+
+       if (GetSelectedBoxId() == DATETIME_ID_MONTH)
+       {
+               GET_SHAPE_CONFIG(DATETIMEBAR::MONTH_ITEM_WIDTH, _ControlManager::GetInstance()->GetOrientation(), itemWidth);
+       }
+       else if (GetSelectedBoxId() == DATETIME_ID_YEAR)
+       {
+               GET_SHAPE_CONFIG(DATETIMEBAR::YEAR_ITEM_WIDTH, _ControlManager::GetInstance()->GetOrientation(), itemWidth);
+       }
+       else
+       {
+               GET_SHAPE_CONFIG(DATETIMEBAR::DAY_ITEM_WIDTH, _ControlManager::GetInstance()->GetOrientation(), itemWidth);
+       }
+
+       _AccessibilityElement* pFocusInAccessibilityElement = null;
+
+       int focusInIndex = GetIndexFromAccessibilityElementPoint(FloatPoint(element.GetBounds().x, element.GetBounds().y));
+
+       pFocusInAccessibilityElement = GetAccessibilityElementAt(focusInIndex);
+
+       if (__accessibilityFocusOutIndex < focusInIndex)
+       {
+               if (pFocusInAccessibilityElement != null && (pFocusInAccessibilityElement->GetBounds().x + pFocusInAccessibilityElement->GetBounds().width >
+               __pDateTimeBarPresenter->GetWindowBounds().x + __pDateTimeBarPresenter->GetWindowBounds().width))
+               {
+                       __pDateTimeBarPresenter->MoveNext();
+
+               }
+       }
+       else if (__accessibilityFocusOutIndex > focusInIndex)
+       {
+               if(pFocusInAccessibilityElement != null && pFocusInAccessibilityElement->GetBounds().x < 0)
+               {
+                       __pDateTimeBarPresenter->MovePrevious();
+               }
+       }
+
        return false;
 }
 
 bool
 _DateTimeBar::OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element)
 {
+       __accessibilityFocusOutIndex = GetIndexFromAccessibilityElementPoint(FloatPoint(element.GetBounds().x, element.GetBounds().y));
+
        return false;
 }
 
@@ -677,4 +749,33 @@ _DateTimeBar::OnAccessibilityValueDecreased(const Tizen::Ui::_AccessibilityConta
        return false;
 }
 
+_AccessibilityElement*
+_DateTimeBar::GetAccessibilityElementAt(int index) const
+{
+       _AccessibilityElement* pAccessibilityElement = null;
+
+       __accessibilityElements.GetAt(index, pAccessibilityElement);
+
+       return pAccessibilityElement;
+}
+
+int
+_DateTimeBar::GetIndexFromAccessibilityElementPoint(const FloatPoint& point) const
+{
+       _AccessibilityElement* pAccessibilityElement = null;
+
+       for (int index = __accessibilityElements.GetCount() -1; index >= 0; index--)
+       {
+               if ((__accessibilityElements.GetAt(index, pAccessibilityElement)) == E_SUCCESS)
+               {
+                       if (pAccessibilityElement->GetBounds().Contains(point))
+                       {
+                               return index;
+                       }
+               }
+       }
+
+       return -1;
+}
+
 }}} // Tizen::Ui::Controls
index b7e4ee5..daee0e7 100644 (file)
@@ -255,8 +255,6 @@ _DateTimeBarPresenter::DrawItem(Canvas& canvas)
 
        int itemCount = GetItemCount();
 
-       RefreshAccessibilityElement();
-
        for (int i = __pDateTimeBarModel->GetFirstDrawnItemIndex(); i < itemCount; i++)
        {
                pDrawItem = __pDateTimeBarModel->GetItemAt(i);
@@ -299,7 +297,7 @@ _DateTimeBarPresenter::DrawItem(Canvas& canvas)
 
                if (itemStatus == DATETIMEBAR_ITEM_STATUS_SELECTED)
                {
-                       (_FontImpl::GetInstance(*__pFont))->SetSize(fontSize);
+                       (_FontImpl::GetInstance(*__pFont))->SetSize(fontSize);
                        (_FontImpl::GetInstance(*__pFont))->SetStyle(FONT_STYLE_BOLD);
                        pTextObject->SetFont(__pFont, 0, pTextObject->GetTextLength());
                        pTextObject->SetForegroundColor(textPressedColor, 0, pTextObject->GetTextLength());
@@ -631,6 +629,7 @@ _DateTimeBarPresenter::AdjustItemPosition(float distance)
        int index = 0;
 
        _DateTimeBarItem* pItem = null;
+
        pItem = __pDateTimeBarModel->GetItemAt(index);
 
        while (pItem != null)
@@ -648,6 +647,33 @@ _DateTimeBarPresenter::AdjustItemPosition(float distance)
                pItem = __pDateTimeBarModel->GetItemAt(index);
        }
 
+       return AdjustAccessibilityElementPosition(distance);
+}
+
+result
+_DateTimeBarPresenter::AdjustAccessibilityElementPosition(float distance)
+{
+       _AccessibilityElement* pAccessibilityElement = null;
+
+       int index = 0;
+
+       pAccessibilityElement = __pDateTimeBar->GetAccessibilityElementAt(index);
+
+       while (pAccessibilityElement != null)
+       {
+               FloatRectangle bounds = pAccessibilityElement->GetBounds();
+               bounds.x += distance;
+               pAccessibilityElement->SetBounds(bounds);
+               index++;
+
+               if (index == GetItemCount())
+               {
+                       break;
+               }
+
+               pAccessibilityElement = __pDateTimeBar->GetAccessibilityElementAt(index);
+       }
+
        return E_SUCCESS;
 }
 
@@ -701,6 +727,7 @@ _DateTimeBarPresenter::AddItems(int actionId)
                r = __pDateTimeBarModel->AddItem(string, value, __pDateTimeBar->GetAlignment(), itemWidth, itemMargin);
                SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
+               AddAccessibilityElement();
                cachingSize--;
 
                value++;
@@ -751,7 +778,7 @@ _DateTimeBarPresenter::InsertItems(int actionId)
                string = GetDisplayedText(value);
                r = __pDateTimeBarModel->InsertItemAt(0, string, value, __pDateTimeBar->GetAlignment(), itemWidth, itemMargin);
                SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
+               InsertAccessibilityElementAt(0);
                cachingSize--;
 
                value--;
@@ -771,7 +798,7 @@ _DateTimeBarPresenter::InsertItem(int index, int actionId)
 
        r = __pDateTimeBarModel->InsertItemAt(index, string, actionId, __pDateTimeBar->GetAlignment(), GetItemWidth(), GetItemMargin());
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
+       InsertAccessibilityElementAt(index);
        return r;
 }
 
@@ -787,6 +814,7 @@ _DateTimeBarPresenter::AddItem(int actionId)
        r = __pDateTimeBarModel->AddItem(string, actionId, __pDateTimeBar->GetAlignment(), GetItemWidth(), GetItemMargin());
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
+       AddAccessibilityElement();
        return r;
 }
 
@@ -809,6 +837,8 @@ _DateTimeBarPresenter::DeleteItem(int index)
        r = __pDateTimeBarModel->RemoveItemAt(index);
        SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
+       __pDateTimeBar->RemoveAccessibilityElementAt(index);
+
        return r;
 }
 
@@ -816,12 +846,14 @@ result
 _DateTimeBarPresenter::RemoveAllItems(void)
 {
        SysTryReturn(NID_UI_CTRL, GetItemCount() > 0, E_INVALID_OPERATION, E_INVALID_OPERATION,
-                               "[E_INVALID_OPERATION] Items count is zero.");
+                       "[E_INVALID_OPERATION] Items count is zero.");
 
        result r = E_SUCCESS;
 
        __pDateTimeBarModel->RemoveAllItems();
 
+       __pDateTimeBar->RemoveAllAccessibilityElement();
+
        return r;
 }
 
@@ -1212,8 +1244,6 @@ _DateTimeBarPresenter::LoadItems()
 
        _DateTimeBarItem* pItem = null;
 
-       Rectangle itemBounds;
-
        int updateItemCount = UPDATE_ITEM_COUNT;
 
        if (__distance > 0.0f)
@@ -1492,27 +1522,13 @@ _DateTimeBarPresenter::SetFont(Font& pFont)
 bool
 _DateTimeBarPresenter::OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element)
 {
-       __distance = (GetItemWidth() + GetItemMargin()) * (-1.0f);
-
-       if (element.GetBounds().x + element.GetBounds().width > GetWindowBounds().width)
-       {
-               AdjustItemPosition(__distance);
-               Draw();
-       }
-       return true;
+       return false;
 }
 
 bool
 _DateTimeBarPresenter::OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element)
 {
-       __distance = (GetItemWidth() + GetItemMargin());
-
-       if (element.GetBounds().x < GetWindowBounds().x)
-       {
-               AdjustItemPosition(__distance);
-               Draw();
-       }
-       return true;
+       return false;
 }
 
 void
@@ -1529,27 +1545,68 @@ _DateTimeBarPresenter::OnTouchMoveHandled(const Tizen::Ui::_Control& control)
 }
 
 void
-_DateTimeBarPresenter::RefreshAccessibilityElement(void)
+_DateTimeBarPresenter::AddAccessibilityElement(void)
 {
-       __pDateTimeBar->RemoveAllAccessibilityElement();
+       _DateTimeBarItem* pItem = null;
+       pItem = __pDateTimeBarModel->GetItemAt(__pDateTimeBarModel->GetItemCount() - 1);
 
-       for (int index = 0; index < __pDateTimeBarModel->GetItemCount(); index++)
+       if (pItem == null)
        {
-               _DateTimeBarItem* pItem = __pDateTimeBarModel->GetItemAt(index);
+               return;
+       }
 
-               if (pItem != null)
-               {
-                       if (__pDateTimeBar->GetSelectedBoxId() == DATETIME_ID_MONTH)
-                       {
-                               __pDateTimeBar->AddAccessibilityElement(pItem->GetBounds(), __pDateTimeBar->GetMonthValue(pItem->GetActionId()));
-                       }
-                       else
-                       {
-                               __pDateTimeBar->AddAccessibilityElement(pItem->GetBounds(), pItem->GetText());
-                       }
-               }
+       if (__pDateTimeBar->GetSelectedBoxId() == DATETIME_ID_MONTH)
+       {
+               __pDateTimeBar->AddAccessibilityElement(pItem->GetBounds(), __pDateTimeBar->GetMonthValue(pItem->GetActionId()));
+       }
+       else
+       {
+               __pDateTimeBar->AddAccessibilityElement(pItem->GetBounds(), pItem->GetText());
+       }
+
+       return;
+}
+
+void
+_DateTimeBarPresenter::InsertAccessibilityElementAt(int index)
+{
+       _DateTimeBarItem* pItem = null;
+       pItem = __pDateTimeBarModel->GetItemAt(index);
+
+       if (pItem == null)
+       {
+               return;
        }
 
+       if (__pDateTimeBar->GetSelectedBoxId() == DATETIME_ID_MONTH)
+       {
+               __pDateTimeBar->InsertAccessibilityElementAt(index, pItem->GetBounds(), __pDateTimeBar->GetMonthValue(pItem->GetActionId()));
+       }
+       else
+       {
+               __pDateTimeBar->InsertAccessibilityElementAt(index, pItem->GetBounds(), pItem->GetText());
+       }
+
+       return;
+}
+
+void
+_DateTimeBarPresenter::MoveNext(void)
+{
+       __distance = (GetItemWidth() + GetItemMargin()) * (-1.0f);
+       LoadItems();
+       AdjustItemPosition(__distance);
+       Draw();
+       return;
+}
+
+void
+_DateTimeBarPresenter::MovePrevious(void)
+{
+       __distance = (GetItemWidth() + GetItemMargin());
+       LoadItems();
+       AdjustItemPosition(__distance);
+       Draw();
        return;
 }
 
index d7409ec..41013ce 100644 (file)
@@ -129,4 +129,26 @@ _DateTimeUtils::GetAmPm(String& timeFormat, _AmPmType amPmType) const
        return;
 }
 
+const String
+_DateTimeUtils::GetFullMonthString(int month) const
+{
+       String text;
+       text.Clear();
+
+       DateTimeSymbols dateSymbols;
+       dateSymbols.Construct(CALENDAR_GREGORIAN);
+
+       const IList* pListOfFullMonths = dateSymbols.GetMonths();
+       SysTryReturn(NID_LCL, (pListOfFullMonths != null), text, E_SYSTEM, "[E_SYSTEM] A system error has occurred. pListOfFullMonths is null.");
+
+       String* pObj = null;
+       pObj = static_cast<String*>(const_cast<Object*>(pListOfFullMonths->GetAt(month - 1)));
+
+       if (pObj)
+       {
+               text.Append(*pObj);
+       }
+
+       return text;
+}
 }}} // Tizen::Ui::Controls
index 695c0d7..d456513 100644 (file)
@@ -685,7 +685,7 @@ _EditDate::CreateAccessibilityElement(void)
        if (__pAccessibilityEditDateElement == null)
        {
                __pAccessibilityEditDateElement = new _AccessibilityElement(true);
-               __pAccessibilityEditDateElement->SetBounds(GetClientBounds());
+               __pAccessibilityEditDateElement->SetBounds(GetClientBoundsF());
                __pAccessibilityEditDateElement->SetTrait(ACCESSIBILITY_TRAITS_NONE);
                __pAccessibilityEditDateElement->SetName("EditDateText");
                pContainer->AddElement(*__pAccessibilityEditDateElement);
@@ -753,7 +753,7 @@ _EditDate::OnBoundsChanged(void)
 
        if (__pAccessibilityEditDateElement)
        {
-               __pAccessibilityEditDateElement->SetBounds(__pEditDatePresenter->GetTitleBounds());
+               __pAccessibilityEditDateElement->SetBounds(GetClientBoundsF());
        }
        if (__pAccessibilityYearElement)
        {
index d9ff9ed..f6463a0 100644 (file)
@@ -483,10 +483,12 @@ _EditTime::OnDraw(void)
        }
 
        __pEditTimePresenter->Draw();
+
        if(likely((_AccessibilityManager::IsActivated())))
        {
                UpdateAccessibilityElement();
        }
+
        return;
 }
 
@@ -502,7 +504,7 @@ _EditTime::CreateAccessibilityElement(void)
        if (__pAccessibilityEditTimeElement == null)
        {
                __pAccessibilityEditTimeElement = new _AccessibilityElement(true);
-               __pAccessibilityEditTimeElement->SetBounds(GetClientBounds());
+               __pAccessibilityEditTimeElement->SetBounds(GetClientBoundsF());
                __pAccessibilityEditTimeElement->SetTrait(ACCESSIBILITY_TRAITS_NONE);
                __pAccessibilityEditTimeElement->SetName(L"EditTimeText");
                pContainer->AddElement(*__pAccessibilityEditTimeElement);
@@ -530,6 +532,9 @@ _EditTime::CreateAccessibilityElement(void)
                        __pAccessibilityAmPmElement->SetBounds(ampmBounds);
                        __pAccessibilityAmPmElement->SetTrait(ACCESSIBILITY_TRAITS_BUTTON);
                        pContainer->AddElement(*__pAccessibilityAmPmElement);
+
+                       __pAccessibilityHourElement->SetBounds(FloatRectangle(hourBounds.x, ampmBounds.y, hourBounds.width, ampmBounds.height));
+                       __pAccessibilityMinuteElement->SetBounds(FloatRectangle(minuteBounds.x, ampmBounds.y, minuteBounds.width, ampmBounds.height));
                }
        }
 }
@@ -548,19 +553,26 @@ _EditTime::OnBoundsChanged(void)
 
        if (__pAccessibilityEditTimeElement)
        {
-               __pAccessibilityEditTimeElement->SetBounds(__pEditTimePresenter->GetTitleBounds());
+               __pAccessibilityEditTimeElement->SetBounds(GetClientBoundsF());
        }
+
+       FloatRectangle hourBounds = __pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_HOUR);
+       FloatRectangle minuteBounds = __pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_MINUTE);
+       FloatRectangle ampmBounds = __pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_AMPM);
+
        if (__pAccessibilityHourElement)
        {
-               __pAccessibilityHourElement->SetBounds(__pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_HOUR));
+               __pAccessibilityHourElement->SetBounds(hourBounds);
        }
        if (__pAccessibilityMinuteElement)
        {
-               __pAccessibilityMinuteElement->SetBounds(__pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_MINUTE));
+               __pAccessibilityMinuteElement->SetBounds(minuteBounds);
        }
        if (__pAccessibilityAmPmElement)
        {
-               __pAccessibilityAmPmElement->SetBounds(__pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_AMPM));
+               __pAccessibilityHourElement->SetBounds(FloatRectangle(hourBounds.x, ampmBounds.y, hourBounds.width, ampmBounds.height));
+               __pAccessibilityMinuteElement->SetBounds(FloatRectangle(minuteBounds.x, ampmBounds.y, minuteBounds.width, ampmBounds.height));
+               __pAccessibilityAmPmElement->SetBounds(ampmBounds);
        }
 
        return;
@@ -798,10 +810,11 @@ _EditTime::SetXmlBoundsExist(bool isXmlBoundsExist)
 void
 _EditTime::UpdateAccessibilityElement(void)
 {
+
        String string;
 
        if (__pAccessibilityEditTimeElement == null && __pAccessibilityHourElement == null
-                       && __pAccessibilityMinuteElement == null && __pAccessibilityAmPmElement == null)
+                       && __pAccessibilityMinuteElement == null)
        {
                return;
        }
@@ -830,8 +843,31 @@ _EditTime::UpdateAccessibilityElement(void)
        string.Append(GetMinute());
        string.Append(L" ");
 
+       FloatRectangle hourBounds = __pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_HOUR);
+       FloatRectangle minuteBounds = __pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_MINUTE);
+       FloatRectangle ampmBounds = __pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_AMPM);
+
        if (Is24HourNotationEnabled() == false)
        {
+               _AccessibilityContainer* pContainer = GetAccessibilityContainer();
+
+               if (pContainer != null && __pAccessibilityAmPmElement == null)
+               {
+                       __pAccessibilityAmPmElement = new (std::nothrow) _AccessibilityElement(true);
+                       SysTryReturnVoidResult(NID_UI_CTRL, (__pAccessibilityAmPmElement != null), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+                       __pAccessibilityAmPmElement->SetBounds(ampmBounds);
+                       __pAccessibilityAmPmElement->SetTrait(ACCESSIBILITY_TRAITS_BUTTON);
+                       pContainer->AddElement(*__pAccessibilityAmPmElement);
+
+                       __pAccessibilityHourElement->SetBounds(FloatRectangle(hourBounds.x, ampmBounds.y, hourBounds.width, ampmBounds.height));
+                       __pAccessibilityMinuteElement->SetBounds(FloatRectangle(minuteBounds.x, ampmBounds.y, minuteBounds.width, ampmBounds.height));
+               }
+               else if (__pAccessibilityAmPmElement != null)
+               {
+                       __pAccessibilityAmPmElement->Activate(true);
+               }
+
                String hintAmPmText(L"Double tap to change to ");
 
                String amString;
@@ -855,6 +891,10 @@ _EditTime::UpdateAccessibilityElement(void)
 
                __pAccessibilityAmPmElement->SetHint(hintAmPmText);
        }
+       else if (__pAccessibilityAmPmElement != null)
+       {
+               __pAccessibilityAmPmElement->Activate(false);
+       }
 
        __pAccessibilityEditTimeElement->SetLabel(string);
 
index aebca85..e45eb67 100644 (file)
@@ -95,7 +95,9 @@ public:
        virtual bool OnFlickGestureDetected(_TouchFlickGestureDetector& gesture);
        virtual bool OnFlickGestureCanceled(_TouchFlickGestureDetector& gesture);
        void AddAccessibilityElement(const Tizen::Graphics::FloatRectangle& itemBounds, const Tizen::Base::String& itemText);
+       void InsertAccessibilityElementAt(int index, const Tizen::Graphics::FloatRectangle& itemBounds, const Tizen::Base::String& itemText);
        void RemoveAllAccessibilityElement(void);
+       void RemoveAccessibilityElementAt(int index);
        Tizen::Ui::AccessibilityTraits GetAccessibilityTraitValue();
        Tizen::Base::String GetMonthValue(int month) const;
        void SetFont(Tizen::Graphics::Font& pFont);
@@ -113,6 +115,8 @@ public:
        virtual bool OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element);
        virtual bool OnAccessibilityValueIncreased(const Tizen::Ui::_AccessibilityContainer&, const Tizen::Ui::_AccessibilityElement&);
        virtual bool OnAccessibilityValueDecreased(const Tizen::Ui::_AccessibilityContainer&, const Tizen::Ui::_AccessibilityElement&);
+       _AccessibilityElement* GetAccessibilityElementAt(int index) const;
+       int GetIndexFromAccessibilityElementPoint(const Tizen::Graphics::FloatPoint& point) const;
 
 private:
        _DateTimeBar(void);
@@ -134,6 +138,7 @@ private:
        Tizen::Base::Collection::LinkedListT<_AccessibilityElement*> __accessibilityElements;
        Tizen::Graphics::FloatRectangle __parentWindowBounds;
        _Control* __pOwner;
+       int __accessibilityFocusOutIndex;
 }; // _DateTimeBar
 
 }}} // Tizen::Ui::Controls
index 5b1487a..7cbc100 100644 (file)
@@ -79,12 +79,14 @@ public:
        virtual bool OnTouchMoved(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
        virtual bool OnTouchCanceled(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
        virtual void OnTouchMoveHandled(const Tizen::Ui::_Control& control);
-       void RefreshAccessibilityElement(void);
        virtual bool OnFlickGestureDetected(int distanceX,int distanceY,int duration);
        void StartFlickAnimation(void);
        void StartAnimationEffect(void);
        void SetInitialAnimationValue(float animationValue);
        void SetFont(Tizen::Graphics::Font& pFont);
+       int GetSelectedItemIndex(void) const;
+       void MoveNext(void);
+       void MovePrevious(void);
 
        virtual bool OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element);
        virtual bool OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element);
@@ -108,7 +110,6 @@ private:
        result ResetFlickAnimationTimer(void);
 
        void SetItemSelected(int index);
-       int GetSelectedItemIndex(void) const;
 
        void SetFirstDrawnItemIndex(int index);
        int GetItemIndexFromPosition(const Tizen::Graphics::FloatPoint& point) const;
@@ -116,6 +117,9 @@ private:
        void SetWindowBounds(const Tizen::Graphics::FloatRectangle& bounds);
        void SetBodyBounds(const Tizen::Graphics::FloatRectangle& bounds);
        result AdjustItemPosition(float distance);
+       result AdjustAccessibilityElementPosition(float distance);
+       void AddAccessibilityElement(void);
+       void InsertAccessibilityElementAt(int index);
 
        Tizen::Base::String GetDisplayedText(int value) const;
        result LoadResource(void);
index 0fcd8bb..3fc8dc6 100644 (file)
@@ -46,6 +46,7 @@ public:
 // Operations
 public:
        const Tizen::Base::String GetMonthString(int month) const;
+       const Tizen::Base::String GetFullMonthString(int month) const;
        int CalculateMaxDay(int displayYear, int month) const ;
        bool IsLeapYear(int year) const;
        void GetAmPm(Tizen::Base::String& timeFormat, _AmPmType amPmType) const;