using namespace Dali::Toolkit;
-void utc_dali_accessibility_controls_bridge_up_startup(void)
-{
- test_return_value = TET_UNDEF;
- DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
-}
-
-void utc_dali_accessibility_controls_bridge_up_cleanup(void)
+namespace
{
- test_return_value = TET_PASS;
- //DBusWrapper::Install({}) is a de-install
- DBusWrapper::Install({});
+const auto flushCoalescableMessage = [](Dali::ToolkitTestApplication& application) {
+ Dali::Timer timer = Timer::New(0);
+ for(int i = 0; i < 11; ++i)
+ {
+ application.SendNotification();
+ application.Render();
+ timer.MockEmitSignal();
+ }
+};
}
namespace Dali
application.GetScene().Add(control);
auto accessible = Dali::Accessibility::Accessible::Get(control);
- const auto flushCoalescableMessage = [&]() {
- Dali::Timer timer = Timer::New(0);
- for(int i = 0; i < 11; ++i)
- {
- application.SendNotification();
- application.Render();
- timer.MockEmitSignal();
- }
- };
-
Dali::Accessibility::TestEnableSC(true);
DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
DALI_TEST_CHECK(states[Dali::Accessibility::State::CHECKED]);
Dali::Accessibility::TestResetStateChangedResult();
- flushCoalescableMessage();
+ flushCoalescableMessage(application);
// CHECKED: true -> false
inputStates[DevelControl::AccessibilityState::CHECKED] = false;
DALI_TEST_CHECK(!states[Dali::Accessibility::State::CHECKED]);
Dali::Accessibility::TestResetStateChangedResult();
- flushCoalescableMessage();
+ flushCoalescableMessage(application);
}
// state-changed:selected event is emitted if the object is highlighted and selectable
DALI_TEST_CHECK(states[Dali::Accessibility::State::SELECTED]);
Dali::Accessibility::TestResetStateChangedResult();
- flushCoalescableMessage();
+ flushCoalescableMessage(application);
// SELECTED: true -> false
inputStates[DevelControl::AccessibilityState::SELECTED] = false;
states = DevelControl::GetAccessibilityStates(control);
DALI_TEST_CHECK(!states[Dali::Accessibility::State::SELECTED]);
Dali::Accessibility::TestResetStateChangedResult();
- flushCoalescableMessage();
+ flushCoalescableMessage(application);
}
// state-changed event is NOT emitted if object is not checkable or selectable
END_TEST;
}
+
+int UtcDaliEmitAccessibilityStateChanged(void)
+{
+ ToolkitTestApplication application;
+
+ Dali::Accessibility::TestEnableSC(true);
+
+ auto root = Control::New();
+ root.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
+ root.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CONTAINER);
+
+ auto dialog = Control::New();
+ dialog.SetProperty(Actor::Property::SIZE, Vector2(100, 100));
+ dialog.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::DIALOG);
+ root.Add(dialog);
+
+ auto button = Control::New();
+ button.SetProperty(Actor::Property::SIZE, Vector2(20, 20));
+ button.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::BUTTON);
+ root.Add(button);
+
+ auto rootAccessible = dynamic_cast<DevelControl::ControlAccessible*>(Accessibility::Accessible::Get(root));
+ auto dialogAccessible = dynamic_cast<DevelControl::ControlAccessible*>(Accessibility::Accessible::Get(dialog));
+ auto buttonAccessible = dynamic_cast<DevelControl::ControlAccessible*>(Accessibility::Accessible::Get(button));
+
+ application.GetScene().Add(root);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) != dialogAccessible);
+
+ // modal role: State is emitted and Default label is registered
+ DevelControl::EmitAccessibilityStateChanged(dialog, Accessibility::State::SHOWING, 1);
+
+ DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+ DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("showing", 1));
+ DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) == dialogAccessible);
+
+ Dali::Accessibility::TestResetStateChangedResult();
+ flushCoalescableMessage(application);
+
+ // modal role: State is emitted and Default label is unregistered
+ DevelControl::EmitAccessibilityStateChanged(dialog, Accessibility::State::SHOWING, 0);
+
+ DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+ DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("showing", 0));
+ DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) != dialogAccessible);
+
+ // non-modal role: State is emitted but Default label is not registered
+ DevelControl::EmitAccessibilityStateChanged(button, Accessibility::State::SHOWING, 1);
+
+ DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+ DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("showing", 1));
+ DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) != buttonAccessible);
+
+ END_TEST;
+}
SetupTouch();
- self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::DIALOG);
+ self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::DIALOG);
}
DevelControl::ControlAccessible* Popup::CreateAccessibleObject()
}
// Convert the bool state to the actual display state to use.
- mDisplayState = display ? Toolkit::Popup::SHOWING : Toolkit::Popup::HIDING;
- auto* accessible = Dali::Accessibility::Accessible::Get(Self());
+ mDisplayState = display ? Toolkit::Popup::SHOWING : Toolkit::Popup::HIDING;
if(display)
{
// Update the state to indicate the current intent.
mDisplayState = Toolkit::Popup::SHOWING;
- Dali::Accessibility::Bridge::GetCurrentBridge()->RegisterDefaultLabel(accessible);
- accessible->EmitShowing(true);
+ DevelControl::EmitAccessibilityStateChanged(Self(), Accessibility::State::SHOWING, 1);
// We want the popup to have key input focus when it is displayed
SetKeyInputFocus();
else // Not visible.
{
mDisplayState = Toolkit::Popup::HIDING;
- Dali::Accessibility::Bridge::GetCurrentBridge()->UnregisterDefaultLabel(accessible);
ClearKeyInputFocus();
- accessible->EmitShowing(false);
+ DevelControl::EmitAccessibilityStateChanged(Self(), Accessibility::State::SHOWING, 0);
// Restore the keyboard focus when popup is hidden.
if(mPreviousFocusedActor && mPreviousFocusedActor.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE))
{