From: joogab.yun Date: Fri, 4 Mar 2022 06:05:42 +0000 (+0900) Subject: Add deviceName to GetNextFocusableView() in CustomFocusAlgorithm. X-Git-Tag: dali_2.1.15~11^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=454a504d9a22ca1271d0065c42dfedc927897807 Add deviceName to GetNextFocusableView() in CustomFocusAlgorithm. Change-Id: Iac3d62a1410ee0cb556f17efbcd2c647e9b503f7 --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-KeyboardFocusManager.cpp b/automated-tests/src/dali-toolkit/utc-Dali-KeyboardFocusManager.cpp index 65876fb..c34f729 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-KeyboardFocusManager.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-KeyboardFocusManager.cpp @@ -55,11 +55,12 @@ public: : mInterfaceVerified(interfaceVerified), mCurrentFocusedActor(), mProposedActorToFocus(), - mDirection(Control::KeyboardFocus::LEFT) + mDirection(Control::KeyboardFocus::LEFT), + mDeviceName("") { } - Actor GetNextFocusableActor(Actor currentFocusedActor, Actor proposedActorToFocus, Control::KeyboardFocus::Direction direction) + Actor GetNextFocusableActor(Actor currentFocusedActor, Actor proposedActorToFocus, Control::KeyboardFocus::Direction direction, const std::string& deviceName) { tet_infoline("Verifying CustomAlgorithm()"); @@ -68,6 +69,7 @@ public: mCurrentFocusedActor = currentFocusedActor; mProposedActorToFocus = proposedActorToFocus; mDirection = direction; + mDeviceName = deviceName; return mProposedActorToFocus; } @@ -78,12 +80,14 @@ public: mCurrentFocusedActor = Actor(); mProposedActorToFocus = Actor(); mDirection = Control::KeyboardFocus::LEFT; + mDeviceName = ""; } bool& mInterfaceVerified; Actor mCurrentFocusedActor; Actor mProposedActorToFocus; Control::KeyboardFocus::Direction mDirection; + std::string mDeviceName; }; // Functors to test whether PreFocusChange signal is emitted when the keyboard focus is about to change @@ -578,17 +582,19 @@ int UtcDaliKeyboardFocusManagerCustomAlgorithmMoveFocus(void) preFocusChangeCallback.Reset(); bool customAlgorithmInterfaceVerified = false; + std::string deviceName = "deviceName"; CustomAlgorithm customAlgorithm(customAlgorithmInterfaceVerified); Toolkit::DevelKeyboardFocusManager::SetCustomAlgorithm(manager, customAlgorithm); // Move the focus towards right - DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == false); + DALI_TEST_CHECK(Toolkit::DevelKeyboardFocusManager::MoveFocus(manager, Control::KeyboardFocus::RIGHT, deviceName) == false); // Because no layout control in the stage and the first actor is focused, it should invoke CustomAlgorithm DALI_TEST_CHECK(customAlgorithm.mInterfaceVerified); DALI_TEST_CHECK(customAlgorithm.mCurrentFocusedActor == Actor()); DALI_TEST_CHECK(customAlgorithm.mProposedActorToFocus == Actor()); DALI_TEST_CHECK(customAlgorithm.mDirection == Control::KeyboardFocus::RIGHT); + DALI_TEST_EQUALS(customAlgorithm.mDeviceName, deviceName, TEST_LOCATION ); customAlgorithm.Reset(); // Check that the focus is set on the first actor @@ -600,13 +606,14 @@ int UtcDaliKeyboardFocusManagerCustomAlgorithmMoveFocus(void) focusChangedCallback.Reset(); // Move the focus towards right - DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == false); + DALI_TEST_CHECK(Toolkit::DevelKeyboardFocusManager::MoveFocus(manager, Control::KeyboardFocus::RIGHT, deviceName) == false); // Because no layout control in the stage and the first actor is focused, it should invoke CustomAlgorithm DALI_TEST_CHECK(customAlgorithm.mInterfaceVerified); DALI_TEST_CHECK(customAlgorithm.mCurrentFocusedActor == first); DALI_TEST_CHECK(customAlgorithm.mProposedActorToFocus == Actor()); DALI_TEST_CHECK(customAlgorithm.mDirection == Control::KeyboardFocus::RIGHT); + DALI_TEST_EQUALS(customAlgorithm.mDeviceName, deviceName, TEST_LOCATION ); customAlgorithm.Reset(); // Check that the focus is set on the second actor @@ -618,13 +625,14 @@ int UtcDaliKeyboardFocusManagerCustomAlgorithmMoveFocus(void) focusChangedCallback.Reset(); // Move the focus towards up - DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::UP) == false); + DALI_TEST_CHECK(Toolkit::DevelKeyboardFocusManager::MoveFocus(manager, Control::KeyboardFocus::UP, deviceName) == false); // Because no layout control in the stage and no actor is focused, it should invoke CustomAlgorithm DALI_TEST_CHECK(customAlgorithm.mInterfaceVerified); DALI_TEST_CHECK(customAlgorithm.mCurrentFocusedActor == second); DALI_TEST_CHECK(customAlgorithm.mProposedActorToFocus == Actor()); DALI_TEST_CHECK(customAlgorithm.mDirection == Control::KeyboardFocus::UP); + DALI_TEST_EQUALS(customAlgorithm.mDeviceName, deviceName, TEST_LOCATION ); customAlgorithm.Reset(); DALI_TEST_CHECK(!focusChangedCallback.mSignalVerified); 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 f320269..a3ed473 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 @@ -50,6 +50,11 @@ bool IsDefaultAlgorithmEnabled(KeyboardFocusManager keyboardFocusManager) return GetImpl(keyboardFocusManager).IsDefaultAlgorithmEnabled(); } +bool MoveFocus(KeyboardFocusManager keyboardFocusManager, Control::KeyboardFocus::Direction direction, const std::string& deviceName) +{ + return GetImpl(keyboardFocusManager).MoveFocus(direction, deviceName); +} + } // 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 192c296..b830445 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 @@ -54,9 +54,11 @@ public: * @param[in] current The current focused actor * @param[in] proposed The proposed focused actor * @param[in] direction The direction of focus movement + * @param[in] deviceName The name of the device where the key event occurred. * @return A handle to the next focusable actor */ - virtual Actor GetNextFocusableActor(Actor current, Actor proposed, Control::KeyboardFocus::Direction direction) = 0; + virtual Actor GetNextFocusableActor(Actor current, Actor proposed, Control::KeyboardFocus::Direction direction, const std::string& deviceName = "") = 0; + }; /** @@ -100,6 +102,20 @@ DALI_TOOLKIT_API void EnableDefaultAlgorithm(KeyboardFocusManager keyboardFocusM */ DALI_TOOLKIT_API bool IsDefaultAlgorithmEnabled(KeyboardFocusManager keyboardFocusManager); +/** + * @brief Moves the focus to the next focusable actor in the focus + * chain in the given direction (according to the focus traversal + * order). + * + * @param[in] keyboardFocusManager The instance of KeyboardFocusManager + * @param direction The direction of focus movement + * @param deviceName The device name + * @return true if the movement was successful + * @pre The KeyboardFocusManager has been initialized. + */ +DALI_TOOLKIT_API bool MoveFocus(KeyboardFocusManager keyboardFocusManager, Control::KeyboardFocus::Direction direction, const std::string& deviceName); + + } // 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 75ffbfb..df8d73a 100644 --- a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp +++ b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp @@ -420,7 +420,7 @@ Toolkit::Control KeyboardFocusManager::GetParentLayoutControl(Actor actor) const return Toolkit::Control::DownCast(parent); } -bool KeyboardFocusManager::MoveFocus(Toolkit::Control::KeyboardFocus::Direction direction) +bool KeyboardFocusManager::MoveFocus(Toolkit::Control::KeyboardFocus::Direction direction, const std::string& deviceName) { Actor currentFocusActor = GetCurrentFocusActor(); @@ -506,7 +506,7 @@ bool KeyboardFocusManager::MoveFocus(Toolkit::Control::KeyboardFocus::Direction if(mCustomAlgorithmInterface) { mIsWaitingKeyboardFocusChangeCommit = true; - nextFocusableActor = mCustomAlgorithmInterface->GetNextFocusableActor(currentFocusActor, Actor(), direction); + nextFocusableActor = mCustomAlgorithmInterface->GetNextFocusableActor(currentFocusActor, Actor(), direction, deviceName); mIsWaitingKeyboardFocusChangeCommit = false; } else if(!mPreFocusChangeSignal.Empty()) @@ -771,7 +771,8 @@ Actor KeyboardFocusManager::GetFocusIndicatorActor() void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) { - std::string keyName = event.GetKeyName(); + const std::string& keyName = event.GetKeyName(); + const std::string& deviceName = event.GetDeviceName(); if(mIsFocusIndicatorShown == UNKNOWN) { @@ -792,7 +793,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) else { // Move the focus towards left - MoveFocus(Toolkit::Control::KeyboardFocus::LEFT); + MoveFocus(Toolkit::Control::KeyboardFocus::LEFT, deviceName); } isFocusStartableKey = true; @@ -807,7 +808,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) else { // Move the focus towards right - MoveFocus(Toolkit::Control::KeyboardFocus::RIGHT); + MoveFocus(Toolkit::Control::KeyboardFocus::RIGHT, deviceName); } isFocusStartableKey = true; @@ -822,7 +823,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) else { // Move the focus towards up - MoveFocus(Toolkit::Control::KeyboardFocus::UP); + MoveFocus(Toolkit::Control::KeyboardFocus::UP, deviceName); } isFocusStartableKey = true; @@ -837,7 +838,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) else { // Move the focus towards down - MoveFocus(Toolkit::Control::KeyboardFocus::DOWN); + MoveFocus(Toolkit::Control::KeyboardFocus::DOWN, deviceName); } isFocusStartableKey = true; @@ -852,7 +853,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) else { // Move the focus towards the previous page - MoveFocus(Toolkit::Control::KeyboardFocus::PAGE_UP); + MoveFocus(Toolkit::Control::KeyboardFocus::PAGE_UP, deviceName); } isFocusStartableKey = true; @@ -867,7 +868,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) else { // Move the focus towards the next page - MoveFocus(Toolkit::Control::KeyboardFocus::PAGE_DOWN); + MoveFocus(Toolkit::Control::KeyboardFocus::PAGE_DOWN, deviceName); } isFocusStartableKey = true; @@ -886,7 +887,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) if(!DoMoveFocusToNextFocusGroup(!event.IsShiftModifier())) { // If the focus group is not changed, Move the focus towards forward, "Shift-Tap" key moves the focus towards backward. - MoveFocus(event.IsShiftModifier() ? Toolkit::Control::KeyboardFocus::BACKWARD : Toolkit::Control::KeyboardFocus::FORWARD); + MoveFocus(event.IsShiftModifier() ? Toolkit::Control::KeyboardFocus::BACKWARD : Toolkit::Control::KeyboardFocus::FORWARD, deviceName); } } @@ -959,7 +960,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) { // No actor is focused but keyboard focus is activated by the key press // Let's try to move the initial focus - MoveFocus(Toolkit::Control::KeyboardFocus::RIGHT); + MoveFocus(Toolkit::Control::KeyboardFocus::RIGHT, deviceName); } } } 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 783e3f5..419b710 100644 --- a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h +++ b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h @@ -90,7 +90,7 @@ public: /** * @copydoc Toolkit::KeyboardFocusManager::MoveFocus */ - bool MoveFocus(Toolkit::Control::KeyboardFocus::Direction direction); + bool MoveFocus(Toolkit::Control::KeyboardFocus::Direction direction, const std::string& deviceName = ""); /** * @copydoc Toolkit::KeyboardFocusManager::ClearFocus