From: Adeel Kazmi Date: Wed, 8 Aug 2018 16:28:18 +0000 (+0000) Subject: Merge "Added UseFocusIndicator API to devel keyboard-focus-manager" into devel/master X-Git-Tag: dali_1.3.36~2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=496563cc996dfa3201f466aba3a0427b78f21d38;hp=e671e53804ba5d0c87cbac89db4a6dc60114318c Merge "Added UseFocusIndicator API to devel keyboard-focus-manager" into devel/master --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-KeyboardFocusManager.cpp b/automated-tests/src/dali-toolkit/utc-Dali-KeyboardFocusManager.cpp index 8b9547a..1b82c49 100755 --- a/automated-tests/src/dali-toolkit/utc-Dali-KeyboardFocusManager.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-KeyboardFocusManager.cpp @@ -1425,3 +1425,39 @@ int UtcDaliKeyboardFocusManagerFocusedActorUnstaged(void) END_TEST; } + +int UtcDaliKeyboardFocusManagerEnableFocusIndicator(void) +{ + ToolkitTestApplication application; + + tet_infoline( "Ensure we cannot set an actor to be focused if it is not staged and that we do not retrieve an actor if it has been unstaged" ); + + KeyboardFocusManager manager = KeyboardFocusManager::Get(); + DALI_TEST_CHECK( ! manager.GetCurrentFocusActor() ); + + Actor actor = Actor::New(); + actor.SetKeyboardFocusable( true ); + Stage::GetCurrent().Add( actor ); + manager.SetCurrentFocusActor( actor ); + + // Press Any key to notice physical keyboard event is comming to KeyboardFocusManager + // It makes mIsFocusIndicatorEnabled true and add focus indicator to focused actor. + Integration::KeyEvent rightEvent( "Right", "", 0, 0, 0, Integration::KeyEvent::Down, "", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ); + application.ProcessEvent(rightEvent); + + Actor indicatorActor = manager.GetFocusIndicatorActor(); + + tet_infoline( "Indicator is added to focused actor" ); + DALI_TEST_CHECK( actor == indicatorActor.GetParent() ); + + Dali::Toolkit::DevelKeyboardFocusManager::EnableFocusIndicator(manager, false); + DALI_TEST_CHECK( !Dali::Toolkit::DevelKeyboardFocusManager::IsFocusIndicatorEnabled(manager) ); + + tet_infoline( "Indicator is removed from focused actor because mUseFocusIndicator is false" ); + DALI_TEST_CHECK( !indicatorActor.GetParent() ); + + END_TEST; +} + + + diff --git a/dali-toolkit/devel-api/focus-manager/keyboard-focus-manager-devel.cpp b/dali-toolkit/devel-api/focus-manager/keyboard-focus-manager-devel.cpp index a56ece5..17645b9 100644 --- a/dali-toolkit/devel-api/focus-manager/keyboard-focus-manager-devel.cpp +++ b/dali-toolkit/devel-api/focus-manager/keyboard-focus-manager-devel.cpp @@ -33,6 +33,16 @@ void SetCustomAlgorithm(KeyboardFocusManager keyboardFocusManager, CustomAlgorit GetImpl(keyboardFocusManager).SetCustomAlgorithm(interface); } +void EnableFocusIndicator(KeyboardFocusManager keyboardFocusManager, bool enable) +{ + GetImpl(keyboardFocusManager).EnableFocusIndicator(enable); +} + +bool IsFocusIndicatorEnabled(KeyboardFocusManager keyboardFocusManager) +{ + return GetImpl(keyboardFocusManager).IsFocusIndicatorEnabled(); +} + } // namespace DevelKeyboardFocusManager } // namespace Toolkit diff --git a/dali-toolkit/devel-api/focus-manager/keyboard-focus-manager-devel.h b/dali-toolkit/devel-api/focus-manager/keyboard-focus-manager-devel.h index 4aa1887..dd59fcd 100644 --- a/dali-toolkit/devel-api/focus-manager/keyboard-focus-manager-devel.h +++ b/dali-toolkit/devel-api/focus-manager/keyboard-focus-manager-devel.h @@ -71,6 +71,22 @@ public: */ DALI_TOOLKIT_API void SetCustomAlgorithm(KeyboardFocusManager keyboardFocusManager, CustomAlgorithmInterface& interface); +/** + * @brief Decide using focus indicator or not + * + * @param[in] keyboardFocusManager The instance of KeyboardFocusManager + * @param[in] enable Whether using focus indicator or not + */ +DALI_TOOLKIT_API void EnableFocusIndicator(KeyboardFocusManager keyboardFocusManager, bool enable); + +/** + * @brief Check focus indicator is enabled or not + * + * @param[in] keyboardFocusManager The instance of KeyboardFocusManager + * @return True when focus indicator is enabled + */ +DALI_TOOLKIT_API bool IsFocusIndicatorEnabled(KeyboardFocusManager keyboardFocusManager); + } // namespace DevelKeyboardFocusManager } // namespace Toolkit diff --git a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp index 9e34984..a20808c 100644 --- a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp +++ b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp @@ -123,6 +123,7 @@ KeyboardFocusManager::KeyboardFocusManager() mFocusGroupLoopEnabled( false ), mIsWaitingKeyboardFocusChangeCommit( false ), mClearFocusOnTouch( true ), + mEnableFocusIndicator( true ), mFocusHistory(), mSlotDelegate( this ), mCustomAlgorithmInterface(NULL) @@ -178,7 +179,7 @@ bool KeyboardFocusManager::DoSetCurrentFocusActor( Actor actor ) // Check whether the actor is in the stage and is keyboard focusable. if( actor && actor.IsKeyboardFocusable() && actor.OnStage() ) { - if( mIsFocusIndicatorEnabled ) + if( mIsFocusIndicatorEnabled && mEnableFocusIndicator ) { actor.Add( GetFocusIndicatorActor() ); } @@ -836,8 +837,11 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) Actor actor = GetCurrentFocusActor(); if( actor ) { - // Make sure the focused actor is highlighted - actor.Add( GetFocusIndicatorActor() ); + if( mEnableFocusIndicator ) + { + // Make sure the focused actor is highlighted + actor.Add( GetFocusIndicatorActor() ); + } } else { @@ -923,6 +927,21 @@ void KeyboardFocusManager::SetCustomAlgorithm(CustomAlgorithmInterface& interfac mCustomAlgorithmInterface = &interface; } +void KeyboardFocusManager::EnableFocusIndicator(bool enable) +{ + if( !enable && mFocusIndicatorActor ) + { + mFocusIndicatorActor.Unparent(); + } + + mEnableFocusIndicator = enable; +} + +bool KeyboardFocusManager::IsFocusIndicatorEnabled() const +{ + return mEnableFocusIndicator; +} + } // namespace Internal } // namespace Toolkit diff --git a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h index ad87b55..be69ce0 100644 --- a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h +++ b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h @@ -120,6 +120,16 @@ public: */ void SetCustomAlgorithm(CustomAlgorithmInterface& interface); + /** + * @copydoc Toolkit::DevelKeyboardFocusManager::UseFocusIndicator + */ + void EnableFocusIndicator(bool enable); + + /** + * @copydoc Toolkit::DevelKeyboardFocusManager::UseFocusIndicator + */ + bool IsFocusIndicatorEnabled() const; + public: /** @@ -267,6 +277,8 @@ private: bool mClearFocusOnTouch:1; ///< Whether clear focus on touch. + bool mEnableFocusIndicator; ///< Whether use focus indicator + FocusStack mFocusHistory; ///< Stack to contain pre-focused actor's BaseObject* SlotDelegate< KeyboardFocusManager > mSlotDelegate;