{
ToolkitTestApplication application;
- auto control = Control::New();
+ auto control = Control::New();
+
+ auto role_none = DevelControl::AccessibilityRole::NONE;
auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
- DALI_TEST_EQUALS(role_unknown, control.GetProperty(DevelControl::Property::ACCESSIBILITY_ROLE).Get<Dali::Accessibility::Role>(), TEST_LOCATION);
+ DALI_TEST_EQUALS(role_none, control.GetProperty(DevelControl::Property::ACCESSIBILITY_ROLE).Get<DevelControl::AccessibilityRole>(), TEST_LOCATION);
auto accessible = Dali::Accessibility::Accessible::Get(control);
DALI_TEST_EQUALS(role_unknown, accessible->GetRole(), TEST_LOCATION);
DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PAGE_TAB_LIST), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TEXT);
- DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::TEXT), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+ DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::LABEL), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TOGGLE_BUTTON);
DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::TOGGLE_BUTTON), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
- auto q = Dali::Accessibility::Accessible::Get(control);
+ auto accessible = Dali::Accessibility::Accessible::Get(control);
Dali::Accessibility::TestEnableSC(true);
- auto states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
+ auto states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
DALI_TEST_CHECK(!states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType(), TEST_LOCATION);
DALI_TEST_EQUALS(true, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>(), TEST_LOCATION);
- states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
+ states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false);
DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType(), TEST_LOCATION);
DALI_TEST_EQUALS(false, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>(), TEST_LOCATION);
- states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
+ states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+ DALI_TEST_CHECK(!states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
+
+ Dali::Accessibility::TestEnableSC(false);
+
+ END_TEST;
+}
+
+int UtcDaliControlAccessibilityHighlightableV2(void)
+{
+ ToolkitTestApplication application;
+ auto control = Control::New();
+ auto accessible = Dali::Accessibility::Accessible::Get(control);
+
+ Dali::Accessibility::TestEnableSC(true);
+
+ auto states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+ // Is not highlightable if no role is set
DALI_TEST_CHECK(!states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
- // Highlightable state is set if V2 role is set and is not Role::None
+ // Is highlightable by default if V2 role is set and is not Role::None
control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CONTAINER);
- states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
+ states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+ DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
+
+ // Returns explicitly set highlightable property: false
+ control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false);
+ states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+ DALI_TEST_CHECK(!states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
+
+ // Returns explicitly set highlightable property: true
+ control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
Dali::Accessibility::TestEnableSC(false);
TO_SAME_ROLE_TYPE(SPIN_BUTTON)
TO_V1_ROLE_TYPE(TAB, PAGE_TAB)
TO_V1_ROLE_TYPE(TAB_LIST, PAGE_TAB_LIST)
- TO_SAME_ROLE_TYPE(TEXT)
+ TO_V1_ROLE_TYPE(TEXT, LABEL)
TO_SAME_ROLE_TYPE(TOGGLE_BUTTON)
TO_SAME_ROLE_TYPE(TOOL_BAR)
default:
return IsRoleV2(rawRole) && static_cast<AccessibilityRole>(rawRole) != AccessibilityRole::NONE;
}
+using Dali::Toolkit::Internal::TriStateProperty;
+bool IsHighlightable(TriStateProperty highlightable, int32_t rawRole)
+{
+ switch(highlightable)
+ {
+ case TriStateProperty::AUTO:
+ {
+ return IsHighlightableRole(rawRole);
+ }
+ case TriStateProperty::TRUE:
+ {
+ return true;
+ }
+ default:
+ {
+ return false;
+ }
+ }
+}
+
} // unnamed namespace
ControlAccessible::ControlAccessible(Dali::Actor self)
// Apply traits
states[State::MODAL] = props.isModal || IsModalRole(props.role);
- states[State::HIGHLIGHTABLE] = props.isHighlightable || IsHighlightableRole(props.role);
+ states[State::HIGHLIGHTABLE] = IsHighlightable(props.isHighlightable, props.role);
}
Dali::Accessibility::States ControlAccessible::CalculateStates()
bool highlightable;
if(value.Get(highlightable))
{
- controlImpl.mImpl->mAccessibilityProps.isHighlightable = highlightable;
+ controlImpl.mImpl->mAccessibilityProps.isHighlightable = highlightable ? TriStateProperty::TRUE : TriStateProperty::FALSE;
}
break;
}
case Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE:
{
- value = controlImpl.mImpl->mAccessibilityProps.isHighlightable;
+ value = controlImpl.mImpl->mAccessibilityProps.isHighlightable == TriStateProperty::TRUE ? true : false;
break;
}
typedef Dali::OwnerContainer<RegisteredVisual*> RegisteredVisualContainer;
+enum class TriStateProperty
+{
+ AUTO = 0,
+ TRUE,
+ FALSE
+};
+
/**
* @brief Holds the Implementation for the internal control class
*/
std::string description{};
std::string value{};
std::string automationId{};
- int32_t role{static_cast<int32_t>(Dali::Accessibility::Role::UNKNOWN)};
+ int32_t role{static_cast<int32_t>(DevelControl::AccessibilityRole::NONE)};
DevelControl::AccessibilityStates states{};
std::map<Dali::Accessibility::RelationType, std::set<Accessibility::Accessible*>> relations;
Property::Map extraAttributes{};
- bool isHighlightable{false};
+ TriStateProperty isHighlightable{TriStateProperty::AUTO};
bool isHidden{false};
bool isScrollable{false};
bool isModal{false};
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Actor self = Self();
// Accessibility
- self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::LINK);
- self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::LINK);
}
DevelControl::ControlAccessible* TextAnchor::CreateAccessibleObject()
self.Add(mStencil);
// Accessibility
- self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ENTRY);
- self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::ENTRY);
Accessibility::Bridge::EnabledSignal().Connect(this, &TextEditor::OnAccessibilityStatusChanged);
Accessibility::Bridge::DisabledSignal().Connect(this, &TextEditor::OnAccessibilityStatusChanged);
}
// Accessibility
- self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ENTRY);
- self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::ENTRY);
Accessibility::Bridge::EnabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged);
Accessibility::Bridge::DisabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged);
return true;
}
else if((Dali::DevelKey::DALI_KEY_RETURN == event.GetKeyCode() && KEY_RETURN_NAME == event.GetKeyName()) ||
- Dali::DevelKey::DALI_KEY_KP_ENTER == event.GetKeyCode())
+ Dali::DevelKey::DALI_KEY_KP_ENTER == event.GetKeyCode())
{
// Do nothing when enter is comming.
return false;
/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <dali-toolkit/devel-api/focus-manager/keyinput-focus-manager.h>
#include <dali-toolkit/devel-api/text/rendering-backend.h>
-#include <dali-toolkit/internal/text/decorator/text-decorator.h>
#include <dali-toolkit/internal/text/controller/text-controller.h>
+#include <dali-toolkit/internal/text/decorator/text-decorator.h>
#include <dali-toolkit/internal/text/text-effects-style.h>
#include <dali-toolkit/internal/text/text-enumerations-impl.h>
#include <dali-toolkit/internal/text/text-font-style.h>
auto mode = map->Find(Toolkit::HiddenInput::Property::MODE);
if(mode && (mode->Get<int>() != Toolkit::HiddenInput::Mode::HIDE_NONE))
{
- textField.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Accessibility::Role::PASSWORD_TEXT);
+ textField.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::PASSWORD_TEXT);
}
else
{
- textField.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Accessibility::Role::ENTRY);
+ textField.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::ENTRY);
}
}
break;
engine.SetCursorWidth(0u); // Do not layout space for the cursor.
// Accessibility
- self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::LABEL);
- self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TEXT);
Accessibility::Bridge::EnabledSignal().Connect(this, &TextLabel::OnAccessibilityStatusChanged);
Accessibility::Bridge::DisabledSignal().Connect(this, &TextLabel::OnAccessibilityStatusChanged);