1 #ifndef DALI_TOOLKIT_INTERNAL_ACCESSIBILITY_MANAGER_H
2 #define DALI_TOOLKIT_INTERNAL_ACCESSIBILITY_MANAGER_H
5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
23 #include <dali/devel-api/common/map-wrapper.h>
24 #include <dali/devel-api/adaptor-framework/accessibility-action-handler.h>
25 #include <dali/devel-api/adaptor-framework/accessibility-gesture-handler.h>
26 #include <dali/devel-api/adaptor-framework/accessibility-gesture-event.h>
27 #include <dali/public-api/object/base-object.h>
30 #include <dali-toolkit/devel-api/accessibility-manager/accessibility-manager.h>
31 #include <dali/public-api/adaptor-framework/tts-player.h>
42 class AccessibilityManager;
45 * @copydoc Toolkit::AccessibilityManager
47 class AccessibilityManager : public Dali::BaseObject, Dali::AccessibilityActionHandler, Dali::AccessibilityGestureHandler, public Dali::ConnectionTracker
51 typedef Dali::Toolkit::AccessibilityManager::AccessibilityActionSignalType AccessibilityActionSignalType;
52 typedef Dali::Toolkit::AccessibilityManager::AccessibilityActionScrollSignalType AccessibilityActionScrollSignalType;
54 struct ActorAdditionalInfo
61 unsigned int mFocusOrder; ///< The focus order of the actor. It is undefined by default.
63 std::string mAccessibilityAttributes[Toolkit::AccessibilityManager::ACCESSIBILITY_ATTRIBUTE_NUM]; ///< The array of attribute texts
66 typedef std::pair<unsigned int, unsigned int> FocusIDPair;
67 typedef std::map<unsigned int, unsigned int> FocusIDContainer;
68 typedef FocusIDContainer::iterator FocusIDIter;
69 typedef FocusIDContainer::const_iterator FocusIDConstIter;
71 typedef std::pair<unsigned int, ActorAdditionalInfo> IDAdditionalInfoPair;
72 typedef std::map<unsigned int, ActorAdditionalInfo> IDAdditionalInfoContainer;
73 typedef IDAdditionalInfoContainer::iterator IDAdditionalInfoIter;
74 typedef IDAdditionalInfoContainer::const_iterator IDAdditionalInfoConstIter;
77 * Construct a new AccessibilityManager.
79 AccessibilityManager();
82 * Initialise the AccessibilityManager
87 * @copydoc Toolkit::AccessibilityManager::SetAccessibilityAttribute
89 void SetAccessibilityAttribute(Actor actor, Toolkit::AccessibilityManager::AccessibilityAttribute type, const std::string& text);
92 * @copydoc Toolkit::AccessibilityManager::DeleteAccessibilityAttribute
94 void DeleteAccessibilityAttribute(Actor actor);
97 * @copydoc Toolkit::AccessibilityManager::GetAccessibilityAttribute
99 std::string GetAccessibilityAttribute(Actor actor, Toolkit::AccessibilityManager::AccessibilityAttribute type) const;
102 * @copydoc Toolkit::AccessibilityManager::SetFocusOrder
104 void SetFocusOrder(Actor actor, const unsigned int order);
107 * @copydoc Toolkit::AccessibilityManager::GetFocusOrder
109 unsigned int GetFocusOrder(Actor actor) const;
112 * @copydoc Toolkit::AccessibilityManager::GenerateNewFocusOrder
114 unsigned int GenerateNewFocusOrder() const;
117 * @copydoc Toolkit::AccessibilityManager::GetActorByFocusOrder
119 Actor GetActorByFocusOrder(const unsigned int order);
122 * @copydoc Toolkit::AccessibilityManager::SetCurrentFocusActor
124 bool SetCurrentFocusActor(Actor actor);
127 * @copydoc Toolkit::AccessibilityManager::GetCurrentFocusActor
129 Actor GetCurrentFocusActor();
132 * @copydoc Toolkit::AccessibilityManager::GetCurrentFocusGroup
134 Actor GetCurrentFocusGroup();
137 * @copydoc Toolkit::AccessibilityManager::GetCurrentFocusOrder
139 unsigned int GetCurrentFocusOrder();
142 * @copydoc Toolkit::AccessibilityManager::MoveFocusForward
144 bool MoveFocusForward();
147 * @copydoc Toolkit::AccessibilityManager::MoveFocusBackward
149 bool MoveFocusBackward();
152 * @copydoc Toolkit::AccessibilityManager::ClearFocus
157 * @copydoc Toolkit::AccessibilityManager::Reset
162 * @copydoc Toolkit::AccessibilityManager::SetFocusGroup
164 void SetFocusGroup(Actor actor, bool isFocusGroup);
167 * @copydoc Toolkit::AccessibilityManager::IsFocusGroup
169 bool IsFocusGroup(Actor actor) const;
172 * @copydoc Toolkit::AccessibilityManager::SetGroupMode
174 void SetGroupMode(bool enabled);
177 * @copydoc Toolkit::AccessibilityManager::GetGroupMode
179 bool GetGroupMode() const;
182 * @copydoc Toolkit::AccessibilityManager::SetWrapMode
184 void SetWrapMode(bool wrapped);
187 * @copydoc Toolkit::AccessibilityManager::GetWrapMode
189 bool GetWrapMode() const;
192 * @copydoc Toolkit::AccessibilityManager::SetFocusIndicatorActor
194 void SetFocusIndicatorActor(Actor indicator);
197 * @copydoc Toolkit::AccessibilityManager::GetFocusIndicatorActor
199 Actor GetFocusIndicatorActor();
202 * @copydoc Toolkit::AccessibilityManager::GetFocusGroup
204 Actor GetFocusGroup(Actor actor);
207 * @copydoc Toolkit::AccessibilityManager::GetReadPosition
209 Vector2 GetReadPosition() const;
212 * @copydoc Toolkit::AccessibilityManager::EnableAccessibility
214 void EnableAccessibility( bool enabled );
217 * @copydoc Toolkit::AccessibilityManager::IsEnabled
219 bool IsEnabled() const;
224 * @copydoc Toolkit::AccessibilityManager::FocusChangedSignal()
226 Toolkit::AccessibilityManager::FocusChangedSignalType& FocusChangedSignal();
229 * @copydoc Toolkit::AccessibilityManager::FocusOvershotSignal()
231 Toolkit::AccessibilityManager::FocusOvershotSignalType& FocusOvershotSignal();
234 * @copydoc Toolkit::AccessibilityManager::FocusedActorActivatedSignal()
236 Toolkit::AccessibilityManager::FocusedActorActivatedSignalType& FocusedActorActivatedSignal();
241 * @copydoc Dali::Toolkit::AccessibilityManager::StatusChangedSignal
243 AccessibilityActionSignalType& StatusChangedSignal()
245 return mStatusChangedSignal;
249 * @copydoc Dali::Toolkit::AccessibilityManager::AccessibilityAdaptor::ActionNextSignal
251 AccessibilityActionSignalType& ActionNextSignal()
253 return mActionNextSignal;
257 * @copydoc Dali::Toolkit::AccessibilityManager::ActionPreviousSignal
259 AccessibilityActionSignalType& ActionPreviousSignal()
261 return mActionPreviousSignal;
265 * @copydoc Dali::Toolkit::AccessibilityManager::ActionActivateSignal
267 AccessibilityActionSignalType& ActionActivateSignal()
269 return mActionActivateSignal;
273 * @copydoc Dali::Toolkit::AccessibilityManager::ActionOverSignal
275 AccessibilityActionSignalType& ActionOverSignal()
277 return mActionOverSignal;
281 * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadSignal
283 AccessibilityActionSignalType& ActionReadSignal()
285 return mActionReadSignal;
289 * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadNextSignal
291 AccessibilityActionSignalType& ActionReadNextSignal()
293 return mActionReadNextSignal;
297 * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadPreviousSignal
299 AccessibilityActionSignalType& ActionReadPreviousSignal()
301 return mActionReadPreviousSignal;
305 * @copydoc Dali::Toolkit::AccessibilityManager::ActionUpSignal
307 AccessibilityActionSignalType& ActionUpSignal()
309 return mActionUpSignal;
313 * @copydoc Dali::Toolkit::AccessibilityManager::ActionDownSignal
315 AccessibilityActionSignalType& ActionDownSignal()
317 return mActionDownSignal;
321 * @copydoc Dali::Toolkit::AccessibilityManager::ActionClearFocusSignal
323 AccessibilityActionSignalType& ActionClearFocusSignal()
325 return mActionClearFocusSignal;
329 * @copydoc Dali::Toolkit::AccessibilityManager::ActionBackSignal
331 AccessibilityActionSignalType& ActionBackSignal()
333 return mActionBackSignal;
337 * @copydoc Dali::Toolkit::AccessibilityManager::ActionScrollUpSignal
339 AccessibilityActionSignalType& ActionScrollUpSignal()
341 return mActionScrollUpSignal;
345 * @copydoc Dali::Toolkit::AccessibilityManager::ActionScrollDownSignal
347 AccessibilityActionSignalType& ActionScrollDownSignal()
349 return mActionScrollDownSignal;
353 * @copydoc Dali::Toolkit::AccessibilityManager::ActionPageLeftSignal
355 AccessibilityActionSignalType& ActionPageLeftSignal()
357 return mActionPageLeftSignal;
361 * @copydoc Dali::Toolkit::AccessibilityManager::ActionPageRightSignal
363 AccessibilityActionSignalType& ActionPageRightSignal()
365 return mActionPageRightSignal;
369 * @copydoc Dali::Toolkit::AccessibilityManager::ActionPageUpSignal
371 AccessibilityActionSignalType& ActionPageUpSignal()
373 return mActionPageUpSignal;
377 * @copydoc Dali::Toolkit::AccessibilityManager::ActionPageDownSignal
379 AccessibilityActionSignalType& ActionPageDownSignal()
381 return mActionPageDownSignal;
385 * @copydoc Dali::Toolkit::AccessibilityManager::ActionMoveToFirstSignal
387 AccessibilityActionSignalType& ActionMoveToFirstSignal()
389 return mActionMoveToFirstSignal;
393 * @copydoc Dali::Toolkit::AccessibilityManager::ActionMoveToLastSignal
395 AccessibilityActionSignalType& ActionMoveToLastSignal()
397 return mActionMoveToLastSignal;
401 * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadFromTopSignal
403 AccessibilityActionSignalType& ActionReadFromTopSignal()
405 return mActionReadFromTopSignal;
409 * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadFromNextSignal
411 AccessibilityActionSignalType& ActionReadFromNextSignal()
413 return mActionReadFromNextSignal;
417 * @copydoc Dali::Toolkit::AccessibilityManager::ActionZoomSignal
419 AccessibilityActionSignalType& ActionZoomSignal()
421 return mActionZoomSignal;
425 * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadPauseResumeSignal
427 AccessibilityActionSignalType& ActionReadPauseResumeSignal()
429 return mActionReadPauseResumeSignal;
433 * @copydoc Dali::Toolkit::AccessibilityManager::ActionStartStopSignal
435 AccessibilityActionSignalType& ActionStartStopSignal()
437 return mActionStartStopSignal;
441 * @copydoc Dali::Toolkit::AccessibilityManager::ActionScrollSignal
443 AccessibilityActionScrollSignalType& ActionScrollSignal()
445 return mActionScrollSignal;
449 * @copydoc Dali::Toolkit::AccessibilityManager::ActionForwardSignal
451 AccessibilityActionSignalType& ActionForwardSignal()
453 return mActionForwardSignal;
461 virtual ~AccessibilityManager();
466 * Get the additional information (e.g. focus order and description) of the given actor.
467 * @param actorID The ID of the actor to be queried
468 * @return The additional information of the actor
470 ActorAdditionalInfo GetActorAdditionalInfo(const unsigned int actorID) const;
473 * Synchronize the actor's additional information to reflect its latest focus order
474 * @param actorID The ID of the actor
475 * @param order The focus order of the actor
476 * @return The additional information of the actor
478 void SynchronizeActorAdditionalInfo(const unsigned int actorID, const unsigned int order);
481 * Move the focus to the specified actor and send notification for the focus change.
482 * @param actorID The ID of the actor to be queried
483 * @return Whether the focus is successful or not
485 bool DoSetCurrentFocusActor(const unsigned int actorID);
488 * Move the focus to the next actor in the focus chain towards the specified direction.
489 * @param focusIDIter The iterator pointing to the current focused actor
490 * @param forward Whether the focus movement is forward or not. The focus movement will be backward if this is false.
491 * @param wrapped Whether the focus shoule be moved wrapped around or not
492 * @return Whether the focus is successful or not
494 bool DoMoveFocus(FocusIDIter focusIDIter, bool forward, bool wrapped);
497 * Activate the actor. If the actor is control, call OnAccessibilityActivated virtual function.
498 * This function will emit FocusedActorActivatedSignal.
499 * @param actor The actor to activate
501 void DoActivate(Actor actor);
504 * Set whether the actor is focusable or not. A focusable property will be registered for
505 * the actor if not yet.
506 * @param actor The actor to be focused
507 * @param focusable Whether the actor is focusable or not
509 void SetFocusable(Actor actor, bool focusable);
512 * Handle the accessibility pan gesture.
513 * @param[in] panEvent The pan event to be handled.
514 * @return whether the gesture is handled successfully or not.
516 bool HandlePanGesture(const AccessibilityGestureEvent& panEvent) override;
519 * Change the accessibility status when Accessibility feature(screen-reader) turned on or off.
520 * @return whether the status is changed or not.
522 bool ChangeAccessibilityStatus() override;
525 * Clear the accessibility focus from the current focused actor.
526 * @return whether the focus is cleared or not.
528 bool ClearAccessibilityFocus() override;
531 * Perform the accessibility action associated with a scroll event.
532 * @param touch The touch point (and time) of the event.
533 * @return whether the focus is cleared or not.
535 bool AccessibilityActionScroll( Dali::TouchEvent& touch ) override;
538 * Perform the accessibility action to move focus to the previous focusable actor (by one finger flick up).
539 * @param allowEndFeedback true if end of list feedback should be played when the focus is alread reached to the end
540 * @return whether the accessibility action is performed or not.
542 bool AccessibilityActionPrevious(bool allowEndFeedback) override;
545 * Perform the accessibility action to move focus to the next focusable actor (by one finger flick down).
546 * @param allowEndFeedback true if end of list feedback should be played when the focus is alread reached to the end
547 * @return whether the accessibility action is performed or not.
549 bool AccessibilityActionNext(bool allowEndFeedback) override;
552 * Perform the accessibility action to move focus to the previous focusable actor (by one finger flick left).
553 * @param allowEndFeedback true if end of list feedback should be played when the focus is alread reached to the end
554 * @return whether the accessibility action is performed or not.
556 bool AccessibilityActionReadPrevious(bool allowEndFeedback) override;
559 * Perform the accessibility action to move focus to the next focusable actor (by one finger flick right).
560 * @param allowEndFeedback true if end of list feedback should be played when the focus is alread reached to the end
561 * @return whether the accessibility action is performed or not.
563 bool AccessibilityActionReadNext(bool allowEndFeedback) override;
566 * Perform the accessibility action to focus and read the actor (by one finger tap or move).
567 * @param allowReadAgain true if the action read again the same object (i.e. read action)
568 * false if the action just read when the focus object is changed (i.e. over action)
569 * @return whether the accessibility action is performed or not.
571 bool AccessibilityActionRead(bool allowReadAgain) override;
574 * Perform the accessibility action to activate the current focused actor (by one finger double tap).
575 * @return whether the accessibility action is performed or not.
577 bool AccessibilityActionActivate() override;
580 * Perform the accessibility action to change the value when the current focused actor is a slider
581 * (by double finger down and move up and right).
582 * @return whether the accessibility action is performed or not.
584 bool AccessibilityActionUp() override;
587 * Perform the accessibility action to change the value when the current focused actor is a slider
588 * (by double finger down and move down and left).
589 * @return whether the accessibility action is performed or not.
591 bool AccessibilityActionDown() override;
594 * Perform the accessibility action to navigate back (by two fingers circle draw).
595 * @return whether the accessibility action is performed or not.
597 bool AccessibilityActionBack() override;
600 * Perform the accessibility action to scroll up the list and focus on the first item on the list
601 * after the scrolling and read the item (by two finger swipe up).
602 * @return whether the accessibility action is performed or not.
604 bool AccessibilityActionScrollUp() override;
607 * Perform the accessibility action to scroll down the list and focus on the first item on the list
608 * after the scrolling and read the item (by two finger swipe down).
609 * @return whether the accessibility action is performed or not.
611 bool AccessibilityActionScrollDown() override;
614 * Perform the accessibility action to scroll left to the previous page (by two finger swipe left).
615 * @return whether the accessibility action is performed or not.
617 bool AccessibilityActionPageLeft() override;
620 * Perform the accessibility action to scroll right to the next page (by two finger swipe right).
621 * @return whether the accessibility action is performed or not.
623 bool AccessibilityActionPageRight() override;
626 * Perform the accessibility action to scroll up to the previous page (by one finger swipe left and right).
627 * @return whether the accessibility action is performed or not.
629 bool AccessibilityActionPageUp() override;
632 * Perform the accessibility action to scroll down to the next page (by one finger swipe right and left).
633 * @return whether the accessibility action is performed or not.
635 bool AccessibilityActionPageDown() override;
638 * Perform the accessibility action to move the focus to the first item on the screen
639 * (by one finger swipe up and down).
640 * @return whether the accessibility action is performed or not.
642 bool AccessibilityActionMoveToFirst() override;
645 * Perform the accessibility action to move the focus to the last item on the screen
646 * (by one finger swipe down and up).
647 * @return whether the accessibility action is performed or not.
649 bool AccessibilityActionMoveToLast() override;
652 * Perform the accessibility action to move the focus to the first item on the top
653 * and read from the top item continuously (by three fingers single tap).
654 * @return whether the accessibility action is performed or not.
656 bool AccessibilityActionReadFromTop() override;
659 * Perform the accessibility action to move the focus to and read from the next item
660 * continuously (by three fingers double tap).
661 * @return whether the accessibility action is performed or not.
663 bool AccessibilityActionReadFromNext() override;
666 * Perform the accessibility action to move the focus to do the zooming (by one finger triple tap).
667 * @return whether the accessibility action is performed or not.
669 bool AccessibilityActionZoom() override;
672 * Perform the accessibility action to pause/resume the current read out (by two fingers single tap).
673 * @return whether the accessibility action is performed or not.
675 bool AccessibilityActionReadPauseResume() override;
678 * Perform the accessibility action to start/stop the current action (by two fingers double tap).
679 * @return whether the accessibility action is performed or not.
681 bool AccessibilityActionStartStop() override;
684 * Perform the accessibility action to forward the event to the application (by one finger double tap and hold).
685 * @return whether the accessibility action is performed or not.
687 bool AccessibilityActionForwardToApp() override;
690 * This function is connected to the TtsPlayer StateChangeSignal.
691 * It is called when the TTS players state changes.
692 * @param previousState The previous state of the TTS player (for comparison)
693 * @param currentState The current state of the TTS player
695 void TtsStateChanged( const Dali::TtsPlayer::State previousState, const Dali::TtsPlayer::State currentState );
700 AccessibilityManager(const AccessibilityManager&);
702 AccessibilityManager& operator=(const AccessibilityManager& rhs);
706 Toolkit::AccessibilityManager::FocusChangedSignalType mFocusChangedSignal; ///< The signal to notify the focus change
707 Toolkit::AccessibilityManager::FocusOvershotSignalType mFocusOvershotSignal; ///< The signal to notify the focus overshooted
708 Toolkit::AccessibilityManager::FocusedActorActivatedSignalType mFocusedActorActivatedSignal; ///< The signal to notify the activation of focused actor
711 AccessibilityActionSignalType mStatusChangedSignal;
712 AccessibilityActionSignalType mActionNextSignal;
713 AccessibilityActionSignalType mActionPreviousSignal;
714 AccessibilityActionSignalType mActionActivateSignal;
715 AccessibilityActionSignalType mActionOverSignal;
716 AccessibilityActionSignalType mActionReadSignal;
717 AccessibilityActionSignalType mActionReadNextSignal;
718 AccessibilityActionSignalType mActionReadPreviousSignal;
719 AccessibilityActionSignalType mActionUpSignal;
720 AccessibilityActionSignalType mActionDownSignal;
721 AccessibilityActionSignalType mActionClearFocusSignal;
722 AccessibilityActionSignalType mActionBackSignal;
723 AccessibilityActionSignalType mActionScrollUpSignal;
724 AccessibilityActionSignalType mActionScrollDownSignal;
725 AccessibilityActionSignalType mActionPageLeftSignal;
726 AccessibilityActionSignalType mActionPageRightSignal;
727 AccessibilityActionSignalType mActionPageUpSignal;
728 AccessibilityActionSignalType mActionPageDownSignal;
729 AccessibilityActionSignalType mActionMoveToFirstSignal;
730 AccessibilityActionSignalType mActionMoveToLastSignal;
731 AccessibilityActionSignalType mActionReadFromTopSignal;
732 AccessibilityActionSignalType mActionReadFromNextSignal;
733 AccessibilityActionSignalType mActionZoomSignal;
734 AccessibilityActionSignalType mActionReadPauseResumeSignal;
735 AccessibilityActionSignalType mActionStartStopSignal;
736 AccessibilityActionSignalType mActionForwardSignal;
737 AccessibilityActionScrollSignalType mActionScrollSignal;
739 FocusIDContainer mFocusIDContainer; ///< The container to look up actor ID by focus order
740 IDAdditionalInfoContainer mIDAdditionalInfoContainer; ///< The container to look up additional information by actor ID
741 FocusIDPair mCurrentFocusActor; ///< The focus order and actor ID of current focused actor
742 Actor mCurrentGesturedActor; ///< The actor that will handle the gesture
743 Actor mFocusIndicatorActor; ///< The focus indicator actor shared by all the focusable actors for highlight
744 Vector2 mPreviousPosition; ///< The previous pan position; useful for calculating velocity for GestureState::FINISHED events
745 unsigned int mRecursiveFocusMoveCounter; ///< The counter to count the number of recursive focus movement attempted before the focus movement is successful.
746 std::string mFocusSoundFilePath; ///< The path of the focus sound file
747 std::string mFocusChainEndSoundFilePath; ///< The path of the focus chain end sound file
749 bool mIsWrapped:1; ///< Whether the focus movement is wrapped around or not
750 bool mIsFocusWithinGroup:1; ///< Whether the focus movement is limited to the current focus group or not
751 bool mIsEndcapFeedbackEnabled:1; ///< Whether the endcap feedback need to be played when the focus leaves the end or vice versa
752 bool mIsEndcapFeedbackPlayed:1; ///< Whether the endcap feedback was played or not
753 bool mIsAccessibilityTtsEnabled:1; ///< Whether accessibility feature(screen-reader) turned on/off
754 bool mTtsCreated:1; ///< Whether the TTS Player has been accessed
755 bool mIsFocusIndicatorEnabled:1; ///< Whether indicator should be shown / hidden. It could be enabled when TTS enabled or 'Tab' key operated.
756 bool mContinuousPlayMode:1; ///< Keeps track of whether or not we are in continuous play mode
757 bool mIsFocusSoundFilePathSet:1; ///< Whether the path of the focus sound file has been set
758 bool mIsFocusChainEndSoundFilePathSet:1; ///< Whether the path of the focus chain end sound file has been set
762 } // namespace Internal
764 inline Internal::AccessibilityManager& GetImpl(Dali::Toolkit::AccessibilityManager& obj)
766 DALI_ASSERT_ALWAYS(obj);
768 Dali::BaseObject& handle = obj.GetBaseObject();
770 return static_cast<Internal::AccessibilityManager&>(handle);
773 inline const Internal::AccessibilityManager& GetImpl(const Dali::Toolkit::AccessibilityManager& obj)
775 DALI_ASSERT_ALWAYS(obj);
777 const Dali::BaseObject& handle = obj.GetBaseObject();
779 return static_cast<const Internal::AccessibilityManager&>(handle);
782 } // namespace Toolkit
786 #endif // DALI_TOOLKIT_INTERNAL_ACCESSIBILITY_MANAGER_H