changing hint text for accessibility.
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_EditTime.cpp
index 66400a5..70468f1 100644 (file)
@@ -9,7 +9,7 @@
 //     http://www.apache.org/licenses/LICENSE-2.0/
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an ”AS IS” BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -48,11 +48,14 @@ _EditTime::_EditTime(void)
        , __pTimeChangeEvent(null)
        , __pDateTimeBar(null)
        , __absoluteBounds(FloatRectangle())
+       , __previousSize(0.0f, 0.0f)
        , __title()
        , __pAccessibilityEditTimeElement(null)
        , __pAccessibilityHourElement(null)
        , __pAccessibilityMinuteElement(null)
        , __pAccessibilityAmPmElement(null)
+       , __isCalledBoundsChanged(false)
+       , __isXmlBoundsExist(false)
 {
 }
 
@@ -132,6 +135,7 @@ _EditTime::CreateEditTimeN(const String& title)
        }
 
        pEditTime->AcquireHandle();
+       pEditTime->SetTouchPressThreshold(_TOUCH_PRESS_THRESHOLD_INSENSITIVE);
 
        return pEditTime;
 
@@ -158,6 +162,9 @@ _EditTime::CreateDateTimeBar(void)
        r =  SettingInfo::AddSettingEventListener(*this);
        SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
 
+       GET_SHAPE_CONFIG(EDITTIME::WIDTH, GetOrientation(), __previousSize.width);
+       GET_SHAPE_CONFIG(EDITTIME::HEIGHT, GetOrientation(), __previousSize.height);
+
        return r;
 
 CATCH:
@@ -471,14 +478,23 @@ _EditTime::CalculateDateTimeBarPosition(void)
 void
 _EditTime::OnDraw(void)
 {
-       if (GetDateTimeBar() != null && GetDateTimeBar()->IsActivated())
+       if (GetDateTimeBar() != null)
        {
-               CalculateDateTimeBarPosition();
+               FloatRectangle absoluteBounds = GetAbsoluteBoundsF();
+
+               if (absoluteBounds.y != __absoluteBounds.y || absoluteBounds.height != __absoluteBounds.height)
+               {
+                       CalculateDateTimeBarPosition();
+               }
        }
 
        __pEditTimePresenter->Draw();
 
-       UpdateAccessibilityElement();
+       if (unlikely((_AccessibilityManager::IsActivated())))
+       {
+               UpdateAccessibilityElement();
+       }
+
        return;
 }
 
@@ -494,7 +510,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);
@@ -522,6 +538,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));
                }
        }
 }
@@ -529,23 +548,33 @@ _EditTime::CreateAccessibilityElement(void)
 void
 _EditTime::OnBoundsChanged(void)
 {
-       __pEditTimePresenter->Initialize();
+       FloatDimension newSize = GetSizeF();
 
-       if (__pAccessibilityEditTimeElement)
-       {
-               __pAccessibilityEditTimeElement->SetBounds(__pEditTimePresenter->GetTitleBounds());
-       }
-       if (__pAccessibilityHourElement)
-       {
-               __pAccessibilityHourElement->SetBounds(__pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_HOUR));
-       }
-       if (__pAccessibilityMinuteElement)
+       if (newSize.width != __previousSize.width || newSize.height != __previousSize.height)
        {
-               __pAccessibilityMinuteElement->SetBounds(__pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_MINUTE));
+               __isCalledBoundsChanged = true;
        }
+
+       __pEditTimePresenter->Initialize();
+
+       SysTryReturnVoidResult(NID_UI_CTRL, (__pAccessibilityEditTimeElement != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. EditTime accessibility element must not be null.");
+       SysTryReturnVoidResult(NID_UI_CTRL, (__pAccessibilityHourElement != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Hour accessibility element must not be null.");
+       SysTryReturnVoidResult(NID_UI_CTRL, (__pAccessibilityMinuteElement != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Minute accessibility element must not be null.");
+
+       __pAccessibilityEditTimeElement->SetBounds(GetClientBoundsF());
+
+       FloatRectangle hourBounds = __pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_HOUR);
+       FloatRectangle minuteBounds = __pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_MINUTE);
+       FloatRectangle ampmBounds = __pEditTimePresenter->GetDisplayAreaBoundsFromHoursStyle(DATETIME_ID_AMPM);
+
+       __pAccessibilityHourElement->SetBounds(hourBounds);
+       __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;
@@ -554,12 +583,15 @@ _EditTime::OnBoundsChanged(void)
 void
 _EditTime::OnChangeLayout(_ControlOrientation orientation)
 {
-       FloatDimension dim;
+       if (!__isCalledBoundsChanged && !__isXmlBoundsExist)
+       {
+               FloatRectangle bounds = GetBoundsF();
 
-       GET_SHAPE_CONFIG(EDITTIME::WIDTH, GetOrientation(), dim.width);
-       GET_SHAPE_CONFIG(EDITTIME::HEIGHT, GetOrientation(), dim.height);
+               GET_SHAPE_CONFIG(EDITTIME::WIDTH, GetOrientation(), bounds.width);
+               GET_SHAPE_CONFIG(EDITTIME::HEIGHT, GetOrientation(), bounds.height);
 
-       SetSize(dim);
+               SetBounds(bounds, false);
+       }
 
        __pEditTimePresenter->Initialize();
        __pEditTimePresenter->SetLastSelectedId(DATETIME_ID_NONE);
@@ -576,8 +608,6 @@ _EditTime::OnChangeLayout(_ControlOrientation orientation)
 bool
 _EditTime::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
 {
-       SetFocused(true);
-
        FloatRectangle absoluteBounds = GetAbsoluteBoundsF();
        if (absoluteBounds.y != __absoluteBounds.y || absoluteBounds.height != __absoluteBounds.height)
        {
@@ -727,6 +757,60 @@ _EditTime::OnSettingChanged(String& key)
        return;
 }
 
+void
+_EditTime::OnDrawFocus(void)
+{
+       __pEditTimePresenter->SetFocusState(true);
+       __pEditTimePresenter->SetFocusedElement();
+       __pEditTimePresenter->DrawFocus();
+       return;
+}
+
+bool
+_EditTime::OnKeyPressed(const _Control &source, const _KeyInfo &keyInfo)
+{
+       _KeyCode keyCode = keyInfo.GetKeyCode();
+
+       switch (keyCode)
+       {
+               case _KEY_ENTER:
+               {
+                       FloatRectangle absoluteBounds = GetAbsoluteBoundsF();
+
+                       if (absoluteBounds.y != __absoluteBounds.y || absoluteBounds.height != __absoluteBounds.height)
+                       {
+                               CalculateDateTimeBarPosition();
+                       }
+                       break;
+               }
+               default:
+               break;
+
+       }
+
+       return __pEditTimePresenter->OnKeyPressed(source, keyInfo);
+}
+
+bool
+_EditTime::OnFocusGained(const _Control &source)
+{
+       __pEditTimePresenter->SetFocusedElement();
+       return true;
+}
+
+bool
+_EditTime::OnFocusLost(const _Control &source)
+{
+       return __pEditTimePresenter->OnFocusLost(source);
+}
+
+void
+_EditTime::OnFocusModeStateChanged(void)
+{
+       __pEditTimePresenter->OnFocusModeStateChanged();
+       return;
+}
+
 FloatRectangle
 _EditTime::GetParentWindowBounds(void) const
 {
@@ -772,20 +856,20 @@ _EditTime::GetParentWindowBounds(void) const
 }
 
 void
+_EditTime::SetXmlBoundsExist(bool isXmlBoundsExist)
+{
+       __isXmlBoundsExist = isXmlBoundsExist;
+}
+
+void
 _EditTime::UpdateAccessibilityElement(void)
 {
-       String string;
 
-       if (likely(!(_AccessibilityManager::IsActivated())))
-       {
-               return;
-       }
+       String string;
 
-       if (__pAccessibilityEditTimeElement == null && __pAccessibilityHourElement == null
-                       && __pAccessibilityMinuteElement == null && __pAccessibilityAmPmElement == null)
-       {
-               return;
-       }
+       SysTryReturnVoidResult(NID_UI_CTRL, (__pAccessibilityEditTimeElement != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. EditTime accessibility element must not be null.");
+       SysTryReturnVoidResult(NID_UI_CTRL, (__pAccessibilityHourElement != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Hour accessibility element must not be null.");
+       SysTryReturnVoidResult(NID_UI_CTRL, (__pAccessibilityMinuteElement != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Minute accessibility element must not be null.");
 
        if (__title.IsEmpty() == false)
        {
@@ -811,9 +895,33 @@ _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)
        {
-               String hintAmPmText(L"Double tap to change to ");
+               _AccessibilityContainer* pContainer = GetAccessibilityContainer();
+               SysTryReturnVoidResult(NID_UI_CTRL, (pContainer != null), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+               if (__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
+               {
+                       __pAccessibilityAmPmElement->Activate(true);
+               }
+
+               String hintAmPmText(L"Double tap to edit");
 
                String amString;
                String pmString;
@@ -824,18 +932,20 @@ _EditTime::UpdateAccessibilityElement(void)
                if (__pEditTimePresenter->GetAmEnabled() == true)
                {
                        __pAccessibilityAmPmElement->SetLabel(amString);
-                       hintAmPmText.Append(pmString.GetPointer());
                        string.Append(amString.GetPointer());
                }
                else
                {
                        __pAccessibilityAmPmElement->SetLabel(pmString);
-                       hintAmPmText.Append(amString.GetPointer());
                        string.Append(pmString.GetPointer());
                }
 
                __pAccessibilityAmPmElement->SetHint(hintAmPmText);
        }
+       else if (__pAccessibilityAmPmElement != null)
+       {
+               __pAccessibilityAmPmElement->Activate(false);
+       }
 
        __pAccessibilityEditTimeElement->SetLabel(string);
 
@@ -867,7 +977,7 @@ _EditTime::OnAccessibilityReadingElement(const _AccessibilityContainer& control,
 }
 
 bool
-_EditTime::OnAccessibilityReadedElement(const _AccessibilityContainer& control, const _AccessibilityElement& element)
+_EditTime::OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element)
 {
        return false;
 }