From 010b61925fb474f324c28d57b5ecc99ad7e5131f Mon Sep 17 00:00:00 2001 From: Syed Khaja Moinuddin Date: Thu, 11 Apr 2013 12:14:27 +0900 Subject: [PATCH] Accessibility Issues fixed in DateTimeBar. Signed-off-by: Syed Khaja Moinuddin Change-Id: Icd666e637c003ed50dc5b5b29db9671b9ae8c8ed Signed-off-by: Syed Khaja Moinuddin --- src/ui/controls/FUiCtrl_DateTimeBar.cpp | 165 ++++++++++++++++++----- src/ui/controls/FUiCtrl_DateTimeBarPresenter.cpp | 135 +++++++++++++------ src/ui/controls/FUiCtrl_DateTimeUtils.cpp | 22 +++ src/ui/controls/FUiCtrl_EditDate.cpp | 4 +- src/ui/controls/FUiCtrl_EditTime.cpp | 52 ++++++- src/ui/inc/FUiCtrl_DateTimeBar.h | 5 + src/ui/inc/FUiCtrl_DateTimeBarPresenter.h | 8 +- src/ui/inc/FUiCtrl_DateTimeUtils.h | 1 + 8 files changed, 311 insertions(+), 81 deletions(-) diff --git a/src/ui/controls/FUiCtrl_DateTimeBar.cpp b/src/ui/controls/FUiCtrl_DateTimeBar.cpp index ed61c9a..a29ed35 100644 --- a/src/ui/controls/FUiCtrl_DateTimeBar.cpp +++ b/src/ui/controls/FUiCtrl_DateTimeBar.cpp @@ -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 diff --git a/src/ui/controls/FUiCtrl_DateTimeBarPresenter.cpp b/src/ui/controls/FUiCtrl_DateTimeBarPresenter.cpp index b7e4ee5..daee0e7 100644 --- a/src/ui/controls/FUiCtrl_DateTimeBarPresenter.cpp +++ b/src/ui/controls/FUiCtrl_DateTimeBarPresenter.cpp @@ -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; } diff --git a/src/ui/controls/FUiCtrl_DateTimeUtils.cpp b/src/ui/controls/FUiCtrl_DateTimeUtils.cpp index d7409ec..41013ce 100644 --- a/src/ui/controls/FUiCtrl_DateTimeUtils.cpp +++ b/src/ui/controls/FUiCtrl_DateTimeUtils.cpp @@ -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(const_cast(pListOfFullMonths->GetAt(month - 1))); + + if (pObj) + { + text.Append(*pObj); + } + + return text; +} }}} // Tizen::Ui::Controls diff --git a/src/ui/controls/FUiCtrl_EditDate.cpp b/src/ui/controls/FUiCtrl_EditDate.cpp index 695c0d7..d456513 100644 --- a/src/ui/controls/FUiCtrl_EditDate.cpp +++ b/src/ui/controls/FUiCtrl_EditDate.cpp @@ -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) { diff --git a/src/ui/controls/FUiCtrl_EditTime.cpp b/src/ui/controls/FUiCtrl_EditTime.cpp index d9ff9ed..f6463a0 100644 --- a/src/ui/controls/FUiCtrl_EditTime.cpp +++ b/src/ui/controls/FUiCtrl_EditTime.cpp @@ -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); diff --git a/src/ui/inc/FUiCtrl_DateTimeBar.h b/src/ui/inc/FUiCtrl_DateTimeBar.h index aebca85..e45eb67 100644 --- a/src/ui/inc/FUiCtrl_DateTimeBar.h +++ b/src/ui/inc/FUiCtrl_DateTimeBar.h @@ -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 diff --git a/src/ui/inc/FUiCtrl_DateTimeBarPresenter.h b/src/ui/inc/FUiCtrl_DateTimeBarPresenter.h index 5b1487a..7cbc100 100644 --- a/src/ui/inc/FUiCtrl_DateTimeBarPresenter.h +++ b/src/ui/inc/FUiCtrl_DateTimeBarPresenter.h @@ -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); diff --git a/src/ui/inc/FUiCtrl_DateTimeUtils.h b/src/ui/inc/FUiCtrl_DateTimeUtils.h index 0fcd8bb..3fc8dc6 100644 --- a/src/ui/inc/FUiCtrl_DateTimeUtils.h +++ b/src/ui/inc/FUiCtrl_DateTimeUtils.h @@ -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; -- 2.7.4