From d386c8d8e05053cef41a20db9727065aee3d2bd4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Artur=20=C5=9Awigo=C5=84?= Date: Fri, 13 May 2022 13:42:32 +0200 Subject: [PATCH] [AT-SPI] Make DevelControl::GetAccessibilityRelations() equivalent to Accessible::GetRelationSet() The previous std::vector> return type, in which the RelationType enumeration value served as an index to the outer vector, can be changed to std::vector, which is more compact (there are very few relations per control in practice). Also, the relation target type is now Accessible*, which is more useful than Address. Change-Id: I9f7b86d7415e1711b8a81cd66e271ff9cdffd5c2 --- .../utc-Dali-Accessibility-Controls-BridgeUp.cpp | 28 ++++++++++++---------- .../devel-api/controls/control-accessible.cpp | 19 +-------------- dali-toolkit/devel-api/controls/control-devel.cpp | 14 +++++------ dali-toolkit/devel-api/controls/control-devel.h | 10 ++++---- 4 files changed, 29 insertions(+), 42 deletions(-) diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp index 8364147..9a79f34 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp @@ -537,41 +537,45 @@ int UtcDaliAccessibilityRelation(void) Dali::Accessibility::TestEnableSC( true ); auto rel = Accessibility::RelationType::FLOWS_TO; - auto number = static_cast< size_t >( rel ); auto control = Control::New(); auto destination1 = Control::New(); auto destination2 = Control::New(); DevelControl::AppendAccessibilityRelation( control, destination1, rel ); auto relations = DevelControl::GetAccessibilityRelations(control); - DALI_TEST_CHECK( relations[ number ].size() == 1 ); + DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION); + DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION); DevelControl::AppendAccessibilityRelation( control, destination2, rel ); relations = DevelControl::GetAccessibilityRelations(control); - DALI_TEST_CHECK( relations[ number ].size() == 2 ); + DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION); + DALI_TEST_EQUALS(relations[0].mTargets.size(), 2u, TEST_LOCATION); auto accessible = Dali::Accessibility::Accessible::Get( control ); auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 ); auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 ); auto relationset = accessible->GetRelationSet(); - DALI_TEST_CHECK( relationset[0].relationType == rel ); - DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() ); - DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() ); + DALI_TEST_CHECK( relationset[0].mRelationType == rel ); + DALI_TEST_CHECK( relationset[0].mTargets[0] == accessible_destination1 || relationset[0].mTargets[1] == accessible_destination1 ); + DALI_TEST_CHECK( relationset[0].mTargets[0] == accessible_destination2 || relationset[0].mTargets[1] == accessible_destination2 ); auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() ); - DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) ); + DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].mRelationType ) == std::get<0>( relationset_bridge[0] ) ); - DALI_TEST_CHECK( relationset[0].targets[0] == std::get<1>( relationset_bridge[0] )[0] || relationset[0].targets[1] == std::get<1>( relationset_bridge[0] )[0] ); - DALI_TEST_CHECK( relationset[0].targets[0] == std::get<1>( relationset_bridge[0] )[1] || relationset[0].targets[1] == std::get<1>( relationset_bridge[0] )[1] ); + DALI_TEST_CHECK( relationset[0].mTargets[0]->GetAddress() == std::get<1>( relationset_bridge[0] )[0] || relationset[0].mTargets[1]->GetAddress() == std::get<1>( relationset_bridge[0] )[0] ); + DALI_TEST_CHECK( relationset[0].mTargets[0]->GetAddress() == std::get<1>( relationset_bridge[0] )[1] || relationset[0].mTargets[1]->GetAddress() == std::get<1>( relationset_bridge[0] )[1] ); - DevelControl::RemoveAccessibilityRelation(control,destination2,rel); + DevelControl::RemoveAccessibilityRelation(control, destination2, rel); relations = DevelControl::GetAccessibilityRelations(control); - DALI_TEST_CHECK( relations[ number ].size() == 1 ); + DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION); DevelControl::ClearAccessibilityRelations(control); relations = DevelControl::GetAccessibilityRelations(control); - DALI_TEST_CHECK( relations[ number ].size() == 0 ); + DALI_TEST_EQUALS(relations.size(), 0u, TEST_LOCATION); Dali::Accessibility::TestEnableSC( false ); diff --git a/dali-toolkit/devel-api/controls/control-accessible.cpp b/dali-toolkit/devel-api/controls/control-accessible.cpp index 9a3da6c..85b3c6a 100644 --- a/dali-toolkit/devel-api/controls/control-accessible.cpp +++ b/dali-toolkit/devel-api/controls/control-accessible.cpp @@ -457,24 +457,7 @@ std::vector ControlAccessible::GetRelationSet() { auto control = Dali::Toolkit::Control::DownCast(Self()); - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - - std::vector ret; - - for(auto& relation : controlImpl.mAccessibilityRelations) - { - auto& targets = relation.second; - - ret.emplace_back(Accessibility::Relation{relation.first, {}}); - - // Map every Accessible* to its Address - std::transform(targets.begin(), targets.end(), std::back_inserter(ret.back().targets), [](auto* x) { - return x->GetAddress(); - }); - } - - return ret; + return DevelControl::GetAccessibilityRelations(control); } bool ControlAccessible::ScrollToChild(Actor child) diff --git a/dali-toolkit/devel-api/controls/control-devel.cpp b/dali-toolkit/devel-api/controls/control-devel.cpp index a604433..51e0564 100644 --- a/dali-toolkit/devel-api/controls/control-devel.cpp +++ b/dali-toolkit/devel-api/controls/control-devel.cpp @@ -201,19 +201,17 @@ void RemoveAccessibilityRelation(Toolkit::Control control, Dali::Actor destinati } } -std::vector> GetAccessibilityRelations(Toolkit::Control control) +std::vector GetAccessibilityRelations(Toolkit::Control control) { - std::vector> result(static_cast(Accessibility::RelationType::MAX_COUNT)); + const auto& relations = GetControlImplementation(control).mAccessibilityRelations; + std::vector result; - // Map every Accessible* to its Address - for(auto& relation : GetControlImplementation(control).mAccessibilityRelations) + for(auto& relation : relations) { - auto index = static_cast(relation.first); auto& targets = relation.second; - std::transform(targets.begin(), targets.end(), std::back_inserter(result[index]), [](auto* x) { - return x->GetAddress(); - }); + result.emplace_back(Accessibility::Relation{relation.first, {}}); + std::copy(targets.begin(), targets.end(), std::back_inserter(result.back().mTargets)); } return result; diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index 42384a1..34b733b 100644 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -488,12 +488,14 @@ DALI_TOOLKIT_API void AppendAccessibilityRelation(Toolkit::Control control, Dali DALI_TOOLKIT_API void RemoveAccessibilityRelation(Toolkit::Control control, Dali::Actor destination, Dali::Accessibility::RelationType relation); /** - * @brief The method returns collection accessibility addresses representing objects connected with current object + * @brief Returns a collection of Accessible objects related to current object and grouped by relation type. * - * @param control object to append attribute to - * @return std::vector, where index is casted value of Accessibility::RelationType and value is std::vector of type Accessibility::Address + * @param control object to query + * @return collection of relations + * + * @see Dali::Accessibility::Accessible::GetRelationSet() */ -DALI_TOOLKIT_API std::vector> GetAccessibilityRelations(Toolkit::Control control); +DALI_TOOLKIT_API std::vector GetAccessibilityRelations(Toolkit::Control control); /** * @brief The method removes all previously appended relations -- 2.7.4