[Tizen] Backport Accessibility API V2 83/316783/1
authorYoungsun Suh <youngsun.suh@samsung.com>
Mon, 12 Aug 2024 01:37:34 +0000 (10:37 +0900)
committerYoungsun Suh <youngsun.suh@samsung.com>
Wed, 28 Aug 2024 05:05:57 +0000 (14:05 +0900)
Add ACCESSIBILITY_VALUE property to control

Change-Id: Ib8216c26dd5ca0d4b175b0ebc5ce65a2aaec430b

(A11y) Connect PropertySet signal only if highlighed

Notify when ACCESSIBILITY_NAME or ACCESSIBILITY_DESCRIPTION changed cases are
only need for highlighted control. So let we ensure to connect property set signal
only if control has ben grabed at least one time.

It will be useful when never be highlighted Actor's Accessible creation / destruct time.

Change-Id: I0c719a4576d02db9914a0e7b53a266ba4845cee2
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
Emit property-change:accessible-value signal

Change-Id: I567db0d61a2998607443b1724fc57c63f9b2329e

Add DevelControl::AccessibilityAction Signal

Change-Id: Iac237047f23ebb47512ff0c5979a5d60f53701f8

Remove mistakenly merged files

Change-Id: Id0b25288275164654eabd6a4e1014834e7a36c30

Update AccessibilityActionSignal to pass ActionInfo

Change-Id: I62d1a80aefa03f61681d3b87eb986c7c6ecda964

Add AccessibilityScrollable property & ScrollToChild action emission

Change-Id: I62d1a80aefa03f61681d3b87eb986c7c6ecda964

Add accessibilityState & accessibilityIsModal property

Update AT-SPI state to be calculted by properties set to a control.
Add AccessibilityRole enum definition to distinguish V2 roles from AT-SPI roles.

Change-Id: Ia6b62796ba0f96f6eb327fa720e31c15c0f650db

Emit AccesibilityState change event to AT-SPI bridge on state property set

Change-Id: If63e953db090b700d24da865905542092f4d2fa9

14 files changed:
automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/accessibility-test-utils.cpp
automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/accessibility-test-utils.h
automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp
automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp
automated-tests/src/dali-toolkit/utc-Dali-ControlImpl.cpp
dali-toolkit/devel-api/controls/control-accessible.cpp
dali-toolkit/devel-api/controls/control-accessible.h
dali-toolkit/devel-api/controls/control-devel.cpp
dali-toolkit/devel-api/controls/control-devel.h
dali-toolkit/internal/controls/control/control-data-impl.cpp
dali-toolkit/internal/controls/control/control-data-impl.h
dali-toolkit/internal/controls/popup/popup-impl.cpp
dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp
dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h

index 1d58b38..98c2951 100644 (file)
 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/accessibility-test-utils.h>
 #include <dali-toolkit-test-suite-utils.h>
-#include <dali/devel-api/common/stage.h>
 #include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
 #include <dali/devel-api/atspi-interfaces/accessible.h>
+#include <dali/devel-api/common/stage.h>
 #include "dbus-wrapper.h"
 
 namespace Dali
 {
 namespace Accessibility
 {
-  using MethodType = TestDBusWrapper::MethodType;
-  using MessagePtr = DBusWrapper::MessagePtr;
+using MethodType = TestDBusWrapper::MethodType;
+using MessagePtr = DBusWrapper::MessagePtr;
 
-  static bool gMoveOutedCalled = false;
+static bool gMoveOutedCalled      = false;
+static bool gPropertyChangeCalled = false;
 
-  void TestEnableSC(bool b)
-  {
-    static bool firstTime = true;
-    if (b && firstTime)
-    {
-      firstTime = false;
-      auto bridge = Accessibility::Bridge::GetCurrentBridge();
-      Dali::Stage stage = Dali::Stage::GetCurrent();
-      auto accessible = Accessibility::Accessible::Get( stage.GetRootLayer() );
-      bridge->AddTopLevelWindow( accessible );
-      bridge->SetApplicationName( "TestApp" );
-      bridge->Initialize();
-
-      static bool ScreenReaderEnabled = false;
-      static bool IsEnabled = false;
-
-      auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/bus", "org.a11y.Status", "ScreenReaderEnabled", MethodType::Getter}] = [wr](const MessagePtr &m) -> MessagePtr {
-          auto reply = wr->newReplyMessage(m);
-          wr->Encode(reply, std::tuple<TestDBusWrapper::Variant<bool>>{ ScreenReaderEnabled });
-          return reply;
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/bus", "org.a11y.Status", "IsEnabled", MethodType::Getter}] = [wr](const MessagePtr &m) -> MessagePtr {
-          auto reply = wr->newReplyMessage(m);
-          wr->Encode(reply, std::tuple<TestDBusWrapper::Variant<bool>>{ IsEnabled });
-          return reply;
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/bus", "org.a11y.Bus", "GetAddress", MethodType::Method}] = [wr](const MessagePtr &m) -> MessagePtr {
-          auto reply = wr->newReplyMessage(m);
-          wr->Encode(reply, std::tuple<const char*>{ "bus" });
-          return reply;
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible/root", "org.a11y.atspi.Socket", "Embed", MethodType::Method}] = [wr](const MessagePtr &m) -> MessagePtr {
-          auto reply = wr->newReplyMessage(m);
-          wr->Encode(reply, std::tuple<Address>{ {"bus", "root"} });
-          return reply;
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible/root", "org.a11y.atspi.Socket", "Unembed", MethodType::Method}] = [wr](const MessagePtr &m) -> MessagePtr {
-          return wr->newReplyMessage(m);
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "PropertyChange", MethodType::Method}] =
-      [wr](const MessagePtr &m) -> MessagePtr {
-          return wr->newReplyMessage(m);
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "StateChanged", MethodType::Method}] =
-      [wr](const MessagePtr &m) -> MessagePtr {
-          return wr->newReplyMessage(m);
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "BoundsChanged", MethodType::Method}] =
-      [wr](const MessagePtr &m) -> MessagePtr {
-          return wr->newReplyMessage(m);
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "ActiveDescendantChanged", MethodType::Method}] =
-      [wr](const MessagePtr &m) -> MessagePtr {
-          return wr->newReplyMessage(m);
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "TextChanged", MethodType::Method}] =
-      [wr](const MessagePtr &m) -> MessagePtr {
-          return wr->newReplyMessage(m);
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "TextCaretMoved", MethodType::Method}] =
-      [wr](const MessagePtr &m) -> MessagePtr {
-          return wr->newReplyMessage(m);
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "MoveOuted", MethodType::Method}] =
-      [wr](const MessagePtr &m) -> MessagePtr {
-          gMoveOutedCalled = true;
-          return wr->newReplyMessage(m);
-      };
-
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Window", "Activate", MethodType::Method}] =
-      [wr](const MessagePtr &m) -> MessagePtr {
-          return wr->newReplyMessage(m);
-      };
-      wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Window", "Deactivate", MethodType::Method}] =
-      [wr](const MessagePtr &m) -> MessagePtr {
-          return wr->newReplyMessage(m);
-      };
-    }
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    wr->fromTestChangeProperty("/org/a11y/bus", "org.a11y.Status", "ScreenReaderEnabled", b);
-    wr->fromTestChangeProperty("/org/a11y/bus", "org.a11y.Status", "IsEnabled", b);
-  }
+struct StateChangedResult
+{
+  std::string state{};
+  int         value{-1};
+};
+static StateChangedResult gStateChangedResult{};
 
-  std::vector<Address> TestGetChildren(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall<std::vector<Address>>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetChildren", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+void TestEnableSC(bool b)
+{
+  static bool firstTime = true;
+  if(b && firstTime)
+  {
+    gPropertyChangeCalled  = false;
+    gStateChangedResult    = {};
+    firstTime              = false;
+    auto        bridge     = Accessibility::Bridge::GetCurrentBridge();
+    Dali::Stage stage      = Dali::Stage::GetCurrent();
+    auto        accessible = Accessibility::Accessible::Get(stage.GetRootLayer());
+    bridge->ApplicationResumed();
+    bridge->AddTopLevelWindow(accessible);
+    bridge->SetApplicationName("TestApp");
+    bridge->Initialize();
+
+    static bool ScreenReaderEnabled = false;
+    static bool IsEnabled           = false;
 
-  std::string TestGetName(const Address &adr)
-  {
     auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto name = wr->fromTestGet<std::string>(adr.GetPath(), "org.a11y.atspi.Accessible", "Name");
-    return name;
-  }
 
-  std::string TestGetDescription(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto description = wr->fromTestGet<std::string>(adr.GetPath(), "org.a11y.atspi.Accessible", "Description");
-    return description;
-  }
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/bus", "org.a11y.Status", "ScreenReaderEnabled", MethodType::Getter}] = [wr](const MessagePtr& m) -> MessagePtr {
+      auto reply = wr->newReplyMessage(m);
+      wr->Encode(reply, std::tuple<TestDBusWrapper::Variant<bool>>{ScreenReaderEnabled});
+      return reply;
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/bus", "org.a11y.Status", "IsEnabled", MethodType::Getter}] = [wr](const MessagePtr& m) -> MessagePtr {
+      auto reply = wr->newReplyMessage(m);
+      wr->Encode(reply, std::tuple<TestDBusWrapper::Variant<bool>>{IsEnabled});
+      return reply;
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/bus", "org.a11y.Bus", "GetAddress", MethodType::Method}] = [wr](const MessagePtr& m) -> MessagePtr {
+      auto reply = wr->newReplyMessage(m);
+      wr->Encode(reply, std::tuple<const char*>{"bus"});
+      return reply;
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible/root", "org.a11y.atspi.Socket", "Embed", MethodType::Method}] = [wr](const MessagePtr& m) -> MessagePtr {
+      auto reply = wr->newReplyMessage(m);
+      wr->Encode(reply, std::tuple<Address>{{"bus", "root"}});
+      return reply;
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible/root", "org.a11y.atspi.Socket", "Unembed", MethodType::Method}] = [wr](const MessagePtr& m) -> MessagePtr {
+      return wr->newReplyMessage(m);
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "PropertyChange", MethodType::Method}] =
+      [wr](const MessagePtr& m) -> MessagePtr {
+      gPropertyChangeCalled = true;
+      return wr->newReplyMessage(m);
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "StateChanged", MethodType::Method}] =
+      [wr](const MessagePtr& m) -> MessagePtr {
+      std::tuple<std::string, int> decoded;
+      wr->Decode(m, decoded);
+      gStateChangedResult.state = std::get<0>(decoded);
+      gStateChangedResult.value = std::get<1>(decoded);
+
+      return wr->newReplyMessage(m);
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "BoundsChanged", MethodType::Method}] =
+      [wr](const MessagePtr& m) -> MessagePtr {
+      return wr->newReplyMessage(m);
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "ActiveDescendantChanged", MethodType::Method}] =
+      [wr](const MessagePtr& m) -> MessagePtr {
+      return wr->newReplyMessage(m);
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "TextChanged", MethodType::Method}] =
+      [wr](const MessagePtr& m) -> MessagePtr {
+      return wr->newReplyMessage(m);
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "TextCaretMoved", MethodType::Method}] =
+      [wr](const MessagePtr& m) -> MessagePtr {
+      return wr->newReplyMessage(m);
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Object", "MoveOuted", MethodType::Method}] =
+      [wr](const MessagePtr& m) -> MessagePtr {
+      gMoveOutedCalled = true;
+      return wr->newReplyMessage(m);
+    };
+
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Window", "Activate", MethodType::Method}] =
+      [wr](const MessagePtr& m) -> MessagePtr {
+      return wr->newReplyMessage(m);
+    };
+    wr->testMethods[std::tuple<std::string, std::string, std::string, MethodType>{"/org/a11y/atspi/accessible", "org.a11y.atspi.Event.Window", "Deactivate", MethodType::Method}] =
+      [wr](const MessagePtr& m) -> MessagePtr {
+      return wr->newReplyMessage(m);
+    };
+  }
+  auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  wr->fromTestChangeProperty("/org/a11y/bus", "org.a11y.Status", "ScreenReaderEnabled", b);
+  wr->fromTestChangeProperty("/org/a11y/bus", "org.a11y.Status", "IsEnabled", b);
+}
+
+std::vector<Address> TestGetChildren(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::vector<Address>>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetChildren", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  uint32_t TestGetRole(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall<uint32_t>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetRole", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+std::string TestGetName(const Address& adr)
+{
+  auto wr   = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto name = wr->fromTestGet<std::string>(adr.GetPath(), "org.a11y.atspi.Accessible", "Name");
+  return name;
+}
 
-  std::string TestGetRoleName(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall<std::string>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetRoleName", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+std::string TestGetDescription(const Address& adr)
+{
+  auto wr          = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto description = wr->fromTestGet<std::string>(adr.GetPath(), "org.a11y.atspi.Accessible", "Description");
+  return description;
+}
 
-  Address TestGetParent(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestGet< Address >(adr.GetPath(), "org.a11y.atspi.Accessible", "Parent");
-    return chs;
-  }
+uint32_t TestGetRole(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<uint32_t>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetRole", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  std::string TestGetLocalizedRoleName(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall<std::string>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetLocalizedRoleName", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+std::string TestGetRoleName(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::string>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetRoleName", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  std::array< uint32_t, 2 > TestGetStates(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall<std::array< uint32_t, 2 >>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetState", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+Address TestGetParent(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestGet<Address>(adr.GetPath(), "org.a11y.atspi.Accessible", "Parent");
+  return chs;
+}
 
-  std::unordered_map< std::string, std::string > TestGetAttributes(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall<std::unordered_map< std::string, std::string >>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetAttributes", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+std::string TestGetLocalizedRoleName(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::string>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetLocalizedRoleName", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  bool TestDoGesture(const Address &adr, Dali::Accessibility::Gesture type, int32_t xBeg, int32_t xEnd, int32_t yBeg, int32_t yEnd, Dali::Accessibility::GestureState state, uint32_t eventTime)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< bool >(adr.GetPath(), "org.a11y.atspi.Accessible", "DoGesture",
-        std::tuple< Dali::Accessibility::Gesture, int32_t, int32_t, int32_t, int32_t, Dali::Accessibility::GestureState, uint32_t >(type, xBeg, xEnd, yBeg, yEnd, state, eventTime ));
-    return std::move(std::get<0>(chs));
-  }
+std::array<uint32_t, 2> TestGetStates(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::array<uint32_t, 2>>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetState", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  std::vector< std::tuple< uint32_t, std::vector< Dali::Accessibility::Address > > > TestGetRelationSet(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< std::vector< std::tuple< uint32_t, std::vector< Dali::Accessibility::Address > > > >(adr.GetPath(), "org.a11y.atspi.Accessible", "GetRelationSet", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+std::unordered_map<std::string, std::string> TestGetAttributes(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::unordered_map<std::string, std::string>>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetAttributes", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  Address TestGetChildAtIndex(const Address &adr, int index)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< Address >(adr.GetPath(), "org.a11y.atspi.Accessible", "GetChildAtIndex", std::tuple< int >( index ));
-    return std::move(std::get<0>(chs));
-  }
+bool TestDoGesture(const Address& adr, Dali::Accessibility::Gesture type, int32_t xBeg, int32_t xEnd, int32_t yBeg, int32_t yEnd, Dali::Accessibility::GestureState state, uint32_t eventTime)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<bool>(adr.GetPath(), "org.a11y.atspi.Accessible", "DoGesture", std::tuple<Dali::Accessibility::Gesture, int32_t, int32_t, int32_t, int32_t, Dali::Accessibility::GestureState, uint32_t>(type, xBeg, xEnd, yBeg, yEnd, state, eventTime));
+  return std::move(std::get<0>(chs));
+}
 
-  ComponentLayer TestGetLayer(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< Dali::Accessibility::ComponentLayer >(adr.GetPath(), "org.a11y.atspi.Component", "GetLayer", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+std::vector<std::tuple<uint32_t, std::vector<Dali::Accessibility::Address>>> TestGetRelationSet(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::vector<std::tuple<uint32_t, std::vector<Dali::Accessibility::Address>>>>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetRelationSet", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  int TestGetIndexInParent(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< int >(adr.GetPath(), "org.a11y.atspi.Accessible", "GetIndexInParent", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+Address TestGetChildAtIndex(const Address& adr, int index)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<Address>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetChildAtIndex", std::tuple<int>(index));
+  return std::move(std::get<0>(chs));
+}
 
-  bool TestGrabFocus(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< bool >(adr.GetPath(), "org.a11y.atspi.Component", "GrabFocus", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+ComponentLayer TestGetLayer(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<Dali::Accessibility::ComponentLayer>(adr.GetPath(), "org.a11y.atspi.Component", "GetLayer", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  bool TestGrabHighlight(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< bool >(adr.GetPath(), "org.a11y.atspi.Component", "GrabHighlight", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+int TestGetIndexInParent(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<int>(adr.GetPath(), "org.a11y.atspi.Accessible", "GetIndexInParent", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  bool TestClearHighlight(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< bool >(adr.GetPath(), "org.a11y.atspi.Component", "ClearHighlight", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+bool TestGrabFocus(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<bool>(adr.GetPath(), "org.a11y.atspi.Component", "GrabFocus", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  std::tuple< int32_t, int32_t, int32_t, int32_t > TestGetExtents(const Address &adr, Dali::Accessibility::CoordinateType coordinateType)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< std::tuple< int32_t, int32_t, int32_t, int32_t > >(adr.GetPath(), "org.a11y.atspi.Component", "GetExtents", std::make_tuple(static_cast<uint32_t>(coordinateType)));
-    return std::move(std::get<0>(chs));
-  }
+bool TestGrabHighlight(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<bool>(adr.GetPath(), "org.a11y.atspi.Component", "GrabHighlight", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  int TestGetMdiZOrder(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< int16_t >(adr.GetPath(), "org.a11y.atspi.Component", "GetMDIZOrder", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+bool TestClearHighlight(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<bool>(adr.GetPath(), "org.a11y.atspi.Component", "ClearHighlight", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  double TestGetAlpha(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< double >(adr.GetPath(), "org.a11y.atspi.Component", "GetAlpha", std::tuple<>());
-    return std::move(std::get<0>(chs));
-  }
+std::tuple<int32_t, int32_t, int32_t, int32_t> TestGetExtents(const Address& adr, Dali::Accessibility::CoordinateType coordinateType)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::tuple<int32_t, int32_t, int32_t, int32_t>>(adr.GetPath(), "org.a11y.atspi.Component", "GetExtents", std::make_tuple(static_cast<uint32_t>(coordinateType)));
+  return std::move(std::get<0>(chs));
+}
 
-  std::string TestGetActionName(const Address &adr, size_t index)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< std::string >(adr.GetPath(), "org.a11y.atspi.Action", "GetName", std::tuple< int32_t >( index ));
-    return std::move(std::get<0>(chs));
-  }
+int TestGetMdiZOrder(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<int16_t>(adr.GetPath(), "org.a11y.atspi.Component", "GetMDIZOrder", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  std::string TestGetLocalizedActionName(const Address &adr, size_t index)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< std::string >(adr.GetPath(), "org.a11y.atspi.Action", "GetLocalizedName", std::tuple< int32_t >( index ));
-    return std::move(std::get<0>(chs));
-  }
+double TestGetAlpha(const Address& adr)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<double>(adr.GetPath(), "org.a11y.atspi.Component", "GetAlpha", std::tuple<>());
+  return std::move(std::get<0>(chs));
+}
 
-  size_t TestGetActionCount(const Address &adr)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto count = wr->fromTestGet< int32_t >(adr.GetPath(), "org.a11y.atspi.Action", "NActions");
-    return count;
-  }
+std::string TestGetActionName(const Address& adr, size_t index)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::string>(adr.GetPath(), "org.a11y.atspi.Action", "GetName", std::tuple<int32_t>(index));
+  return std::move(std::get<0>(chs));
+}
 
-  bool TestDoAction(const Address &adr, size_t index)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< bool >(adr.GetPath(), "org.a11y.atspi.Action", "DoAction", std::tuple< int32_t >( index ));
-    return std::move(std::get<0>(chs));
-  }
+std::string TestGetLocalizedActionName(const Address& adr, size_t index)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::string>(adr.GetPath(), "org.a11y.atspi.Action", "GetLocalizedName", std::tuple<int32_t>(index));
+  return std::move(std::get<0>(chs));
+}
 
-  bool TestDoAction(const Address &adr, const std::string& name)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< bool >(adr.GetPath(), "org.a11y.atspi.Action", "DoActionName", std::tuple< std::string >( name ));
-    return std::move(std::get<0>(chs));
-  }
+size_t TestGetActionCount(const Address& adr)
+{
+  auto wr    = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto count = wr->fromTestGet<int32_t>(adr.GetPath(), "org.a11y.atspi.Action", "NActions");
+  return count;
+}
 
-  std::string TestGetActionKeyBinding(const Address &adr, size_t index)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< std::string >(adr.GetPath(), "org.a11y.atspi.Action", "GetKeyBinding", std::tuple< int32_t >( index ));
-    return std::move(std::get<0>(chs));
-  }
+bool TestDoAction(const Address& adr, size_t index)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<bool>(adr.GetPath(), "org.a11y.atspi.Action", "DoAction", std::tuple<int32_t>(index));
+  return std::move(std::get<0>(chs));
+}
 
-  std::string TestGetActionDescription(const Address &adr, size_t index)
-  {
-    auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
-    auto chs = wr->fromTestCall< std::string >(adr.GetPath(), "org.a11y.atspi.Action", "GetDescription", std::tuple< int32_t >( index ));
-    return std::move(std::get<0>(chs));
-  }
+bool TestDoAction(const Address& adr, const std::string& name)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<bool>(adr.GetPath(), "org.a11y.atspi.Action", "DoActionName", std::tuple<std::string>(name));
+  return std::move(std::get<0>(chs));
+}
 
-  void TestResetMoveOutedCalled ()
-  {
-    gMoveOutedCalled = false;
-  }
+std::string TestGetActionKeyBinding(const Address& adr, size_t index)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::string>(adr.GetPath(), "org.a11y.atspi.Action", "GetKeyBinding", std::tuple<int32_t>(index));
+  return std::move(std::get<0>(chs));
+}
 
-  bool TestGetMoveOutedCalled ()
-  {
-    return gMoveOutedCalled;
-  }
+std::string TestGetActionDescription(const Address& adr, size_t index)
+{
+  auto wr  = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
+  auto chs = wr->fromTestCall<std::string>(adr.GetPath(), "org.a11y.atspi.Action", "GetDescription", std::tuple<int32_t>(index));
+  return std::move(std::get<0>(chs));
+}
+
+void TestResetMoveOutedCalled()
+{
+  gMoveOutedCalled = false;
+}
+
+bool TestGetMoveOutedCalled()
+{
+  return gMoveOutedCalled;
+}
+
+bool TestPropertyChangeCalled()
+{
+  return gPropertyChangeCalled;
+}
+
+bool TestStateChangedCalled()
+{
+  return !gStateChangedResult.state.empty();
+}
 
-  void PrintTree(const Address &root, size_t depth)
+bool TestStateChangedResult(const std::string_view& expectedState, int expectedValue)
+{
+  return expectedState == gStateChangedResult.state && expectedValue == gStateChangedResult.value;
+}
+
+void TestResetStateChangedResult()
+{
+  gStateChangedResult = {};
+}
+
+void PrintTree(const Address& root, size_t depth)
+{
+  auto name = TestGetName(root);
+  printf("%10s", root.GetPath().c_str());
+  for(unsigned int i = 0; i < depth; ++i) printf("  ");
+  printf("%s\n", name.c_str());
+  auto chs = TestGetChildren(root);
+  for(auto& c : chs)
   {
-    auto name = TestGetName(root);
-    printf("%10s", root.GetPath().c_str());
-    for(unsigned int i = 0; i < depth; ++i) printf("  ");
-    printf("%s\n", name.c_str());
-    auto chs = TestGetChildren(root);
-    for(auto &c : chs)
-    {
-      PrintTree(c, depth + 1);
-    }
+    PrintTree(c, depth + 1);
   }
+}
 
-  bool Find(const std::vector< std::string > &collection, const std::string &key)
+bool Find(const std::vector<std::string>& collection, const std::string& key)
+{
+  for(auto& it : collection)
   {
-    for(auto& it : collection)
+    if(it == key)
     {
-      if(it == key)
-      {
-        return true;
-      }
+      return true;
     }
-    return false;
   }
+  return false;
+}
 
 } // namespace Accessibility
 } // namespace Dali
index 92388e2..c00ec49 100644 (file)
@@ -7,38 +7,42 @@ namespace Dali
 {
 namespace Accessibility
 {
-  void TestEnableSC(bool b);
-  std::vector<Address> TestGetChildren(const Address &adr);
-  std::string TestGetName(const Address &adr);
-  std::string TestGetDescription(const Address &adr);
-  uint32_t TestGetRole(const Address &adr);
-  std::string TestGetRoleName(const Address &adr);
-  Address TestGetParent(const Address &adr);
-  std::string TestGetLocalizedRoleName(const Address &adr);
-  std::array< uint32_t, 2 > TestGetStates(const Address &adr);
-  std::unordered_map< std::string, std::string > TestGetAttributes(const Address &adr);
-  bool TestDoGesture(const Address &adr, Dali::Accessibility::Gesture type, int32_t xBeg, int32_t xEnd, int32_t yBeg, int32_t yEnd, Dali::Accessibility::GestureState state, uint32_t eventTime);
-  std::vector< std::tuple< uint32_t, std::vector< Dali::Accessibility::Address > > > TestGetRelationSet(const Address &adr);
-  Address TestGetChildAtIndex(const Address &adr, int index);
-  ComponentLayer TestGetLayer(const Address &adr);
-  int TestGetIndexInParent(const Address &adr);
-  bool TestGrabFocus(const Address &adr);
-  bool TestGrabHighlight(const Address &adr);
-  bool TestClearHighlight(const Address &adr);
-  std::tuple< int32_t, int32_t, int32_t, int32_t > TestGetExtents(const Address &adr, Dali::Accessibility::CoordinateType coordinateType );
-  int TestGetMdiZOrder(const Address &adr);
-  double TestGetAlpha(const Address &adr);
-  void PrintTree(const Address &root, size_t depth = 0);
-  bool Find( const std::vector< std::string > &collection, const std::string &key);
-  std::string TestGetActionName( const Address &adr, size_t index );
-  std::string TestGetLocalizedActionName( const Address &adr, size_t index );
-  size_t TestGetActionCount( const Address &adr );
-  bool TestDoAction ( const Address &adr, size_t index );
-  bool TestDoAction ( const Address &adr, const std::string& name );
-  std::string TestGetActionKeyBinding ( const Address &adr, size_t index );
-  std::string TestGetActionDescription ( const Address &adr, size_t index );
-  void TestResetMoveOutedCalled ();
-  bool TestGetMoveOutedCalled ();
+void                                                                           TestEnableSC(bool b);
+std::vector<Address>                                                           TestGetChildren(const Address& adr);
+std::string                                                                    TestGetName(const Address& adr);
+std::string                                                                    TestGetDescription(const Address& adr);
+uint32_t                                                                       TestGetRole(const Address& adr);
+std::string                                                                    TestGetRoleName(const Address& adr);
+Address                                                                        TestGetParent(const Address& adr);
+std::string                                                                    TestGetLocalizedRoleName(const Address& adr);
+std::array<uint32_t, 2>                                                        TestGetStates(const Address& adr);
+std::unordered_map<std::string, std::string>                                   TestGetAttributes(const Address& adr);
+bool                                                                           TestDoGesture(const Address& adr, Dali::Accessibility::Gesture type, int32_t xBeg, int32_t xEnd, int32_t yBeg, int32_t yEnd, Dali::Accessibility::GestureState state, uint32_t eventTime);
+std::vector<std::tuple<uint32_t, std::vector<Dali::Accessibility::Address> > > TestGetRelationSet(const Address& adr);
+Address                                                                        TestGetChildAtIndex(const Address& adr, int index);
+ComponentLayer                                                                 TestGetLayer(const Address& adr);
+int                                                                            TestGetIndexInParent(const Address& adr);
+bool                                                                           TestGrabFocus(const Address& adr);
+bool                                                                           TestGrabHighlight(const Address& adr);
+bool                                                                           TestClearHighlight(const Address& adr);
+std::tuple<int32_t, int32_t, int32_t, int32_t>                                 TestGetExtents(const Address& adr, Dali::Accessibility::CoordinateType coordinateType);
+int                                                                            TestGetMdiZOrder(const Address& adr);
+double                                                                         TestGetAlpha(const Address& adr);
+void                                                                           PrintTree(const Address& root, size_t depth = 0);
+bool                                                                           Find(const std::vector<std::string>& collection, const std::string& key);
+std::string                                                                    TestGetActionName(const Address& adr, size_t index);
+std::string                                                                    TestGetLocalizedActionName(const Address& adr, size_t index);
+size_t                                                                         TestGetActionCount(const Address& adr);
+bool                                                                           TestDoAction(const Address& adr, size_t index);
+bool                                                                           TestDoAction(const Address& adr, const std::string& name);
+std::string                                                                    TestGetActionKeyBinding(const Address& adr, size_t index);
+std::string                                                                    TestGetActionDescription(const Address& adr, size_t index);
+void                                                                           TestResetMoveOutedCalled();
+bool                                                                           TestGetMoveOutedCalled();
+bool                                                                           TestPropertyChangeCalled();
+bool                                                                           TestStateChangedCalled();
+bool                                                                           TestStateChangedResult(const std::string_view& expectedState, int expectedValue);
+void                                                                           TestResetStateChangedResult();
 } // namespace Accessibility
 } // namespace Dali
 
index c124870..65b08da 100644 (file)
@@ -1,19 +1,20 @@
-#include <dali-toolkit-test-suite-utils.h>
 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/accessibility-test-utils.h>
 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
+#include <automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-timer.h>
+#include <dali-toolkit-test-suite-utils.h>
 #include <dali-toolkit/dali-toolkit.h>
-#include <dali/devel-api/adaptor-framework/accessibility.h>
-#include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
-#include <dali/devel-api/adaptor-framework/window-devel.h>
-#include <dali/devel-api/atspi-interfaces/accessible.h>
-#include <dali/devel-api/atspi-interfaces/action.h>
-#include <dali/devel-api/atspi-interfaces/component.h>
 #include <dali-toolkit/devel-api/controls/buttons/toggle-button.h>
 #include <dali-toolkit/devel-api/controls/control-devel.h>
 #include <dali-toolkit/devel-api/controls/popup/popup.h>
 #include <dali-toolkit/devel-api/controls/table-view/table-view.h>
 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
 #include <dali/devel-api/actors/actor-devel.h>
+#include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
+#include <dali/devel-api/adaptor-framework/accessibility.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
+#include <dali/devel-api/atspi-interfaces/accessible.h>
+#include <dali/devel-api/atspi-interfaces/action.h>
+#include <dali/devel-api/atspi-interfaces/component.h>
 #include <dali/devel-api/common/stage.h>
 #include <cstdlib>
 
@@ -34,15 +35,17 @@ void utc_dali_accessibility_controls_bridge_up_cleanup(void)
   DBusWrapper::Install({});
 }
 
-namespace Dali {
-  namespace Accessibility {
-    std::ostream & operator<< (std::ostream & stream, const Address & address)
-    {
-      stream << address.ToString();
-      return stream;
-    }
-  }
+namespace Dali
+{
+namespace Accessibility
+{
+std::ostream& operator<<(std::ostream& stream, const Address& address)
+{
+  stream << address.ToString();
+  return stream;
 }
+} // namespace Accessibility
+} // namespace Dali
 
 int UtcDaliControlAccessibilityRaiseBridge(void)
 {
@@ -76,28 +79,43 @@ int UtcDaliControlAccessibilityName(void)
   ToolkitTestApplication application;
 
   auto control = Control::New();
-  Stage::GetCurrent().Add( control );
+  Stage::GetCurrent().Add(control);
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
-  DALI_TEST_CHECK( q );
+  auto q = Dali::Accessibility::Accessible::Get(control);
+  DALI_TEST_CHECK(q);
 
-  DALI_TEST_EQUALS( "" , q->GetName(), TEST_LOCATION );
+  DALI_TEST_EQUALS("", q->GetName(), TEST_LOCATION);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name" );
-  DALI_TEST_EQUALS( "Accessibility_Name" , q->GetName(), TEST_LOCATION );
-  DALI_TEST_EQUALS( control.GetProperty( DevelControl::Property::ACCESSIBILITY_NAME ).Get< std::string >() , "Accessibility_Name", TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name");
+  DALI_TEST_EQUALS("Accessibility_Name", q->GetName(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_NAME).Get<std::string>(), "Accessibility_Name", TEST_LOCATION);
 
-  DevelControl::AccessibilityGetNameSignal(control).Connect( [] (std::string &accessibility_name) {
-    accessibility_name = "Accessibility_Name_With_Callback"; } );
+  auto nameChangeCallback = [](std::string& accessibilityName) { accessibilityName = "Accessibility_Name_With_Callback"; };
 
-  DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , q->GetName(), TEST_LOCATION );
+  DevelControl::AccessibilityGetNameSignal(control).Connect(nameChangeCallback);
+
+  DALI_TEST_EQUALS("Accessibility_Name_With_Callback", q->GetName(), TEST_LOCATION);
 
   Dali::Accessibility::TestEnableSC(true);
+  DALI_TEST_CHECK(!Dali::Accessibility::TestPropertyChangeCalled());
+
+  DALI_TEST_EQUALS("Accessibility_Name_With_Callback", TestGetName(q->GetAddress()), TEST_LOCATION);
 
-  DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
+  DevelControl::AccessibilityGetNameSignal(control).Disconnect(nameChangeCallback);
 
-  //TODO test emission of name change signal
-  Dali::Accessibility::TestEnableSC( false );
+  auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
+
+  DALI_TEST_CHECK(i);
+  i->GrabHighlight();
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_NAME, "Changed_Accessiblity_Name");
+  DALI_TEST_EQUALS("Changed_Accessiblity_Name", q->GetName(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_NAME).Get<std::string>(), "Changed_Accessiblity_Name", TEST_LOCATION);
+
+  // test emission of property change signal
+  DALI_TEST_CHECK(Dali::Accessibility::TestPropertyChangeCalled());
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -108,62 +126,210 @@ int UtcDaliControlAccessibilityDescription(void)
 
   auto control = Control::New();
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
-  DALI_TEST_CHECK( q );
+  auto q = Dali::Accessibility::Accessible::Get(control);
+  DALI_TEST_CHECK(q);
+
+  DALI_TEST_EQUALS("", q->GetDescription(), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description");
+  DALI_TEST_EQUALS("Accessibility_Description", q->GetDescription(), TEST_LOCATION);
+
+  auto property = control.GetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION).Get<std::string>();
+  DALI_TEST_EQUALS("Accessibility_Description", property, TEST_LOCATION);
+
+  auto descriptionChangeCallback = [](std::string& accessibilityDescription) { accessibilityDescription = "Accessibility_Description_With_Callback"; };
+
+  DevelControl::AccessibilityGetDescriptionSignal(control).Connect(descriptionChangeCallback);
 
-  DALI_TEST_EQUALS( "" , q->GetDescription(), TEST_LOCATION );
+  DALI_TEST_EQUALS("Accessibility_Description_With_Callback", q->GetDescription(), TEST_LOCATION);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description" );
-  DALI_TEST_EQUALS( "Accessibility_Description" , q->GetDescription(), TEST_LOCATION );
+  Dali::Accessibility::TestEnableSC(true);
+  DALI_TEST_CHECK(!Dali::Accessibility::TestPropertyChangeCalled());
+
+  DALI_TEST_EQUALS("Accessibility_Description_With_Callback", TestGetDescription(q->GetAddress()), TEST_LOCATION);
 
-  auto property = control.GetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION ).Get<std::string>();
-  DALI_TEST_EQUALS( "Accessibility_Description", property, TEST_LOCATION );
+  DevelControl::AccessibilityGetDescriptionSignal(control).Disconnect(descriptionChangeCallback);
 
-  DevelControl::AccessibilityGetDescriptionSignal(control).Connect( [] (std::string &accessibility_description) {
-    accessibility_description = "Accessibility_Description_With_Callback"; } );
+  auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
 
-  DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , q->GetDescription(), TEST_LOCATION );
+  DALI_TEST_CHECK(i);
+  i->GrabHighlight();
 
-  Dali::Accessibility::TestEnableSC( true );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Changed_Accessiblity_Description");
+  DALI_TEST_EQUALS("Changed_Accessiblity_Description", q->GetDescription(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION).Get<std::string>(), "Changed_Accessiblity_Description", TEST_LOCATION);
 
-  DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
+  // test emission of property change signal
+  DALI_TEST_CHECK(Dali::Accessibility::TestPropertyChangeCalled());
 
-  //TODO test emission of description change signal
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
 
-int UtcDaliControlAccessibilityRole(void)
+int UtcDaliControlAccessibilityValue(void)
 {
   ToolkitTestApplication application;
 
   auto control = Control::New();
-  auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
+
+  auto q = Dali::Accessibility::Accessible::Get(control);
+  DALI_TEST_CHECK(q);
+
+  DALI_TEST_EQUALS("", q->GetValue(), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_VALUE, "Accessibility_Value");
+  DALI_TEST_EQUALS("Accessibility_Value", q->GetValue(), TEST_LOCATION);
+
+  auto property = control.GetProperty(DevelControl::Property::ACCESSIBILITY_VALUE).Get<std::string>();
+  DALI_TEST_EQUALS("Accessibility_Value", property, TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(true);
+  DALI_TEST_CHECK(!Dali::Accessibility::TestPropertyChangeCalled());
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_VALUE, "Changed_Accessiblity_Value");
+  DALI_TEST_EQUALS("Changed_Accessiblity_Value", q->GetValue(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_VALUE).Get<std::string>(), "Changed_Accessiblity_Value", TEST_LOCATION);
+
+  // value property change signal is not emitted if not highlighted
+  DALI_TEST_CHECK(!Dali::Accessibility::TestPropertyChangeCalled());
+
+  auto component = dynamic_cast<Dali::Accessibility::Component*>(q);
+
+  DALI_TEST_CHECK(component);
+  component->GrabHighlight();
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_VALUE, "Changed_Accessiblity_Value_2");
+  DALI_TEST_EQUALS("Changed_Accessiblity_Value_2", q->GetValue(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_VALUE).Get<std::string>(), "Changed_Accessiblity_Value_2", TEST_LOCATION);
+
+  // value property change signal is emitted if highlighted
+  DALI_TEST_CHECK(Dali::Accessibility::TestPropertyChangeCalled());
+
+  Dali::Accessibility::TestEnableSC(false);
+
+  END_TEST;
+}
+
+int UtcDaliControlAccessibilityRole(void)
+{
+  ToolkitTestApplication application;
+
+  auto control         = Control::New();
+  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_unknown, control.GetProperty(DevelControl::Property::ACCESSIBILITY_ROLE).Get<Dali::Accessibility::Role>(), TEST_LOCATION);
+
+  auto accessible = Dali::Accessibility::Accessible::Get(control);
+  DALI_TEST_EQUALS(role_unknown, accessible->GetRole(), TEST_LOCATION);
+  DALI_TEST_EQUALS("unknown", accessible->GetRoleName(), TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(true);
+  DALI_TEST_CHECK(accessible);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(role_unknown), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS("unknown", TestGetRoleName(accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS("unknown", TestGetLocalizedRoleName(accessible->GetAddress()), TEST_LOCATION);
+
+  // Invalid role
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, 9999);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::UNKNOWN), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  // V2 Roles
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::ADJUSTABLE);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::SLIDER), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::ALERT);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::ALERT), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::BUTTON);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PUSH_BUTTON), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CHECK_BOX);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::CHECK_BOX), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::COMBO_BOX);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::COMBO_BOX), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CONTAINER);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::FILLER), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::DIALOG);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::DIALOG), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::ENTRY);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::ENTRY), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::HEADER);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::HEADER), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::IMAGE);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::IMAGE), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::LINK);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::LINK), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::LIST);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::LIST), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::LIST_ITEM);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::LIST_ITEM), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::MENU);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::MENU), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::MENU_BAR);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::MENU_BAR), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::MENU_ITEM);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::MENU_ITEM), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::NONE);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::UNKNOWN), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::PASSWORD_TEXT);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PASSWORD_TEXT), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::POPUP_MENU);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::POPUP_MENU), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::PROGRESS_BAR);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PROGRESS_BAR), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::RADIO_BUTTON);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::RADIO_BUTTON), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::SCROLL_BAR);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::SCROLL_BAR), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::SPIN_BUTTON);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::SPIN_BUTTON), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
-  DALI_TEST_EQUALS( role_unknown , q->GetRole(), TEST_LOCATION);
-  DALI_TEST_EQUALS( "unknown" , q->GetRoleName(), TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TAB);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PAGE_TAB), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( true );
-  DALI_TEST_CHECK( q );
-  DALI_TEST_EQUALS( static_cast< uint32_t >( role_unknown ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( "unknown" , TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( "unknown" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TAB_LIST);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PAGE_TAB_LIST), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton );
+  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 >( role_pushbutton ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( "push button" ,TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( "push button" , TestGetLocalizedRoleName( q->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);
 
-  Dali::Accessibility::TestEnableSC( false );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TOOL_BAR);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::TOOL_BAR), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  DALI_TEST_EQUALS( role_pushbutton , q->GetRole(), TEST_LOCATION);
-  DALI_TEST_EQUALS( "push button" , q->GetRoleName(), TEST_LOCATION );
+  // Directly sets ATSPI role  (V1)
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PUSH_BUTTON);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(role_pushbutton), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS("push button", TestGetRoleName(accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS("push button", TestGetLocalizedRoleName(accessible->GetAddress()), TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(false);
+
+  DALI_TEST_EQUALS(role_pushbutton, accessible->GetRole(), TEST_LOCATION);
+  DALI_TEST_EQUALS("push button", accessible->GetRoleName(), TEST_LOCATION);
 
   END_TEST;
 }
@@ -173,32 +339,33 @@ int UtcDaliControlAccessibilityRoleToggleButton(void)
   ToolkitTestApplication application;
 
   auto control = Dali::Toolkit::ToggleButton::New();
-  auto button = Dali::Accessibility::Role::TOGGLE_BUTTON;
+  auto button  = Dali::Accessibility::Role::TOGGLE_BUTTON;
 
   control.SetProperty(Toolkit::ToggleButton::Property::TOOLTIPS,
-          Property::Array{"option1", "option2"});
+                      Property::Array{"option1", "option2"});
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
-  auto q = Dali::Accessibility::Accessible::Get( control );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, button);
+  auto q = Dali::Accessibility::Accessible::Get(control);
 
-  DALI_TEST_EQUALS( button , q->GetRole(), TEST_LOCATION);
-  DALI_TEST_EQUALS( "toggle button" , q->GetRoleName(), TEST_LOCATION );
+  DALI_TEST_EQUALS(button, q->GetRole(), TEST_LOCATION);
+  DALI_TEST_EQUALS("toggle button", q->GetRoleName(), TEST_LOCATION);
 
   Dali::Accessibility::States states = q->GetStates();
-  DALI_TEST_EQUALS( true , (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION);
+  DALI_TEST_EQUALS(true, (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION);
 
-  DALI_TEST_EQUALS( "option1", q->GetDescription(), TEST_LOCATION );
+  DALI_TEST_EQUALS("option1", q->GetDescription(), TEST_LOCATION);
 
   auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
-  if (i)
-    i->GrabHighlight();
 
-  control.SetProperty( Toolkit::Button::Property::LABEL, "ToggleButton2" );
-  DALI_TEST_EQUALS( "ToggleButton2", TestGetName( q->GetAddress() ), TEST_LOCATION );
+  DALI_TEST_CHECK(i);
+  i->GrabHighlight();
+
+  control.SetProperty(Toolkit::Button::Property::LABEL, "ToggleButton2");
+  DALI_TEST_EQUALS("ToggleButton2", TestGetName(q->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -208,23 +375,23 @@ int UtcDaliControlAccessibilityButtonLabel(void)
   ToolkitTestApplication application;
 
   auto control = Dali::Toolkit::PushButton::New();
-  auto button = Dali::Accessibility::Role::PUSH_BUTTON;
+  auto button  = Dali::Accessibility::Role::PUSH_BUTTON;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, button);
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
+  auto q = Dali::Accessibility::Accessible::Get(control);
   auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
 
-  if (i)
-    i->GrabHighlight();
+  DALI_TEST_CHECK(i);
+  i->GrabHighlight();
 
-  control.SetProperty( Toolkit::Button::Property::LABEL, "Button2" );
+  control.SetProperty(Toolkit::Button::Property::LABEL, "Button2");
 
-  DALI_TEST_EQUALS( "Button2" , TestGetName( q->GetAddress() ), TEST_LOCATION );
+  DALI_TEST_EQUALS("Button2", TestGetName(q->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -234,15 +401,168 @@ int UtcDaliControlAccessibilityState(void)
   ToolkitTestApplication application;
 
   auto control = Control::New();
-  auto q = Dali::Accessibility::Accessible::Get( control );
+  control.SetProperty(Actor::Property::SIZE, Vector2(100, 100));
+  control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
+
+  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());
+
+  // Test setting AccessibilityState property updates at-spi states
+  DevelControl::AccessibilityStates inputStates;
+  {
+    inputStates[DevelControl::AccessibilityState::ENABLED] = false;
+    inputStates[DevelControl::AccessibilityState::CHECKED] = true;
+    inputStates[DevelControl::AccessibilityState::BUSY]    = true;
+
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::ENABLED]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::SELECTED]);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::CHECKED]);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::BUSY]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::EXPANDED]);
+  }
+
+  // state-changed:checked event is NOT emitted if the object is not highlighted
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CHECK_BOX);
+
+    inputStates[DevelControl::AccessibilityState::CHECKED] = false; // CHECKED: true -> false
+
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::ENABLED]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::SELECTED]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::CHECKED]);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::BUSY]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::EXPANDED]);
+  }
+
+  auto component = dynamic_cast<Dali::Accessibility::Component*>(accessible);
+  component->GrabHighlight();
+
+  // state-changed:checked event is emitted if the object is highlighted and checkable
+  const std::array<DevelControl::AccessibilityRole, 3> checkableRoles{DevelControl::AccessibilityRole::CHECK_BOX, DevelControl::AccessibilityRole::RADIO_BUTTON, DevelControl::AccessibilityRole::TOGGLE_BUTTON};
+  for(auto role : checkableRoles)
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, role);
+
+    // CHECKED: false -> true
+    inputStates[DevelControl::AccessibilityState::CHECKED] = true;
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("checked", 1));
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::CHECKED]);
+
+    Dali::Accessibility::TestResetStateChangedResult();
+    flushCoalescableMessage();
+
+    // CHECKED: true -> false
+    inputStates[DevelControl::AccessibilityState::CHECKED] = false;
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("checked", 0));
+
+    states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::CHECKED]);
+
+    Dali::Accessibility::TestResetStateChangedResult();
+    flushCoalescableMessage();
+  }
+
+  // state-changed:selected event is emitted if the object is highlighted and selectable
+  const std::array<DevelControl::AccessibilityRole, 3> selectableRoles{DevelControl::AccessibilityRole::BUTTON, DevelControl::AccessibilityRole::LIST_ITEM, DevelControl::AccessibilityRole::MENU_ITEM};
+  for(auto role : selectableRoles)
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, role);
+
+    // SELECTED: false -> true
+    inputStates[DevelControl::AccessibilityState::SELECTED] = true;
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("selected", 1));
 
-  Dali::Accessibility::TestEnableSC( true );
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::SELECTED]);
 
-  auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  auto states = DevelControl::GetAccessibilityStates(control);
-  DALI_TEST_CHECK( states_by_bridge == states );
+    Dali::Accessibility::TestResetStateChangedResult();
+    flushCoalescableMessage();
 
-  Dali::Accessibility::TestEnableSC( false );
+    // SELECTED: true -> false
+    inputStates[DevelControl::AccessibilityState::SELECTED] = false;
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("selected", 0));
+
+    states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::SELECTED]);
+    Dali::Accessibility::TestResetStateChangedResult();
+    flushCoalescableMessage();
+  }
+
+  // state-changed event is NOT emitted if object is not checkable or selectable
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CONTAINER);
+
+    inputStates[DevelControl::AccessibilityState::CHECKED]  = true; // CHECKED: false -> true
+    inputStates[DevelControl::AccessibilityState::SELECTED] = true; // SELECTED: false -> true
+
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::SELECTED]);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::CHECKED]);
+  }
+
+  // state-changed event is NOT emitted if object is v1 role
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::CHECK_BOX);
+
+    inputStates[DevelControl::AccessibilityState::CHECKED] = false; // CHECKED: true -> false
+
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::CHECKED]);
+  }
+
+  // Test bridge behavior
+  {
+    auto states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+    auto states           = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(states_by_bridge == states);
+  }
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -251,15 +571,29 @@ int UtcDaliControlAccessibilityModal(void)
 {
   ToolkitTestApplication application;
 
-  auto control = Dali::Toolkit::Popup::New();
-  auto q = Dali::Accessibility::Accessible::Get( control );
+  Dali::Accessibility::TestEnableSC(true);
+
+  // Modal state is set by Dialog role
+  {
+    auto control    = Dali::Toolkit::Popup::New();
+    auto accessible = Dali::Accessibility::Accessible::Get(control);
 
-  Dali::Accessibility::TestEnableSC( true );
+    auto states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+    DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::MODAL]);
+  }
 
-  auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] );
+  // Modal state is set by isModal property
+  {
+    auto control = Control::New();
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_IS_MODAL, true);
 
-  Dali::Accessibility::TestEnableSC( false );
+    auto accessible = Dali::Accessibility::Accessible::Get(control);
+
+    auto states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+    DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::MODAL]);
+  }
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -267,38 +601,79 @@ int UtcDaliControlAccessibilityModal(void)
 int UtcDaliControlAccessibilityHighlightable(void)
 {
   ToolkitTestApplication application;
-  auto control = Control::New();
+  auto                   control = Control::New();
 
   auto highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
   DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
 
-   // negative testcase - trying to set unconvertible value
+  // negative testcase - trying to set unconvertible value
   control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef");
   highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
   DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
+  auto q = Dali::Accessibility::Accessible::Get(control);
+
+  Dali::Accessibility::TestEnableSC(true);
+
+  auto states_by_bridge = Dali::Accessibility::States{TestGetStates(q->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())};
+  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())};
+  DALI_TEST_CHECK(!states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
+
+  // Highlightable state is set 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())};
+  DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
+
+  Dali::Accessibility::TestEnableSC(false);
+
+  END_TEST;
+}
+
+int UtcDaliControlAccessibilityScrollable(void)
+{
+  ToolkitTestApplication application;
+  auto                   control = Control::New();
 
-  Dali::Accessibility::TestEnableSC( true );
+  auto scrollable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_SCROLLABLE);
+  DALI_TEST_EQUALS(scrollable, false, TEST_LOCATION);
 
-  auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
+  // negative testcase - trying to set unconvertible value
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE, "deadbeef");
+  scrollable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_SCROLLABLE);
+  DALI_TEST_EQUALS(scrollable, false, TEST_LOCATION);
 
-  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 );
+  auto accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(control));
 
-  states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
+  Dali::Accessibility::TestEnableSC(true);
 
-  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 );
+  DALI_TEST_CHECK(!accessible->IsScrollable());
 
-  states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE, true);
+  DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE).GetType(), TEST_LOCATION);
+  DALI_TEST_EQUALS(true, control.GetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE).Get<bool>(), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  DALI_TEST_CHECK(accessible->IsScrollable());
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE, false);
+  DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE).GetType(), TEST_LOCATION);
+  DALI_TEST_EQUALS(false, control.GetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE).Get<bool>(), TEST_LOCATION);
+
+  DALI_TEST_CHECK(!accessible->IsScrollable());
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -311,82 +686,81 @@ int UtcDaliControlAccessibilityHighlightBridgeUp(void)
   auto controlb = Control::New();
   controla.Add(controlb);
 
-  controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
-  controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
-
-  Dali::Accessibility::TestEnableSC( true );
+  controla.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+  controlb.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
 
-  auto accessible_a = Dali::Accessibility::Accessible::Get( controla );
-  auto accessible_b = Dali::Accessibility::Accessible::Get( controlb );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto a = dynamic_cast<Dali::Accessibility::Component*>( accessible_a );
-  auto b = dynamic_cast<Dali::Accessibility::Component*>( accessible_b );
+  auto accessible_a = Dali::Accessibility::Accessible::Get(controla);
+  auto accessible_b = Dali::Accessibility::Accessible::Get(controlb);
 
-  auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  auto a = dynamic_cast<Dali::Accessibility::Component*>(accessible_a);
+  auto b = dynamic_cast<Dali::Accessibility::Component*>(accessible_b);
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  auto states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  auto states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_EQUALS(true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION);
 
-  DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
-  DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
+  DALI_TEST_CHECK(states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_EQUALS(true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION);
+  DALI_TEST_EQUALS(true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION);
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_EQUALS( false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_EQUALS(false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION);
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_EQUALS( true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_EQUALS(true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION);
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_CHECK( TestGrabHighlight( a -> GetAddress() ) );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_CHECK(TestGrabHighlight(a->GetAddress()));
 
-  DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_CHECK( TestGrabHighlight( b -> GetAddress() ) );
+  DALI_TEST_CHECK(states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_CHECK(TestGrabHighlight(b->GetAddress()));
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_CHECK( TestClearHighlight( b -> GetAddress() ) );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_CHECK(TestClearHighlight(b->GetAddress()));
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -395,68 +769,67 @@ int UtcDaliControlAccessibilityHighlightBridgeUp(void)
 int utcDaliAccessibilityControlAttributes(void)
 {
   ToolkitTestApplication application;
-  auto check_box_button = Toolkit::Control::New();
+  auto                   check_box_button = Toolkit::Control::New();
 
   std::string value;
 
-
-  auto attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  auto attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   auto attributes_map = attributes.GetMap();
 
-  auto position = attributes_map->Find( "access_key1" );
-  DALI_TEST_CHECK( !position );
+  auto position = attributes_map->Find("access_key1");
+  DALI_TEST_CHECK(!position);
 
-  DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key1", "access_value1" );
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  DevelControl::AppendAccessibilityAttribute(check_box_button, "access_key1", "access_value1");
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
+  DALI_TEST_EQUALS((attributes_map->Find("access_key1"))->Get<std::string>(), "access_value1", TEST_LOCATION);
 
-  DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_a" );
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  DevelControl::AppendAccessibilityAttribute(check_box_button, "access_key2", "access_value2_a");
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_a", TEST_LOCATION );
+  DALI_TEST_EQUALS((attributes_map->Find("access_key1"))->Get<std::string>(), "access_value1", TEST_LOCATION);
+  DALI_TEST_EQUALS((attributes_map->Find("access_key2"))->Get<std::string>(), "access_value2_a", TEST_LOCATION);
 
-  DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_b" );
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  DevelControl::AppendAccessibilityAttribute(check_box_button, "access_key2", "access_value2_b");
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_b", TEST_LOCATION );
+  DALI_TEST_EQUALS((attributes_map->Find("access_key2"))->Get<std::string>(), "access_value2_b", TEST_LOCATION);
 
-  DevelControl::RemoveAccessibilityAttribute( check_box_button, "access_key2" );
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  DevelControl::RemoveAccessibilityAttribute(check_box_button, "access_key2");
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
   // In case when we are removing one of attributes the property is setting for NONE type.
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->GetType(), Property::NONE, TEST_LOCATION );
+  DALI_TEST_EQUALS((attributes_map->Find("access_key2"))->GetType(), Property::NONE, TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto ptr = Dali::Accessibility::Accessible::Get( check_box_button );
-  auto attribute_map_bridge = TestGetAttributes( ptr->GetAddress() );
-  auto counter = 0u;
-  for (auto i = 0u; i<attributes_map->Count();++i)
-    if((attributes_map->GetValue(i)).GetType() != Property::NONE )
+  auto ptr                  = Dali::Accessibility::Accessible::Get(check_box_button);
+  auto attribute_map_bridge = TestGetAttributes(ptr->GetAddress());
+  auto counter              = 0u;
+  for(auto i = 0u; i < attributes_map->Count(); ++i)
+    if((attributes_map->GetValue(i)).GetType() != Property::NONE)
       ++counter;
 
-  DALI_TEST_EQUALS( counter, attribute_map_bridge.size(), TEST_LOCATION );
+  DALI_TEST_EQUALS(counter, attribute_map_bridge.size(), TEST_LOCATION);
 
-  for (auto it : attribute_map_bridge)
-    DALI_TEST_EQUALS( (attributes_map->Find( it.first ))->Get<std::string>(), it.second, TEST_LOCATION );
+  for(auto it : attribute_map_bridge)
+    DALI_TEST_EQUALS((attributes_map->Find(it.first))->Get<std::string>(), it.second, TEST_LOCATION);
 
   DevelControl::ClearAccessibilityAttributes(check_box_button);
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
-  position = attributes_map->Find( "access_key1" );
-  DALI_TEST_CHECK( !position );
+  position = attributes_map->Find("access_key1");
+  DALI_TEST_CHECK(!position);
 
-  position = attributes_map->Find( "access_key2" );
-  DALI_TEST_CHECK( !position );
+  position = attributes_map->Find("access_key2");
+  DALI_TEST_CHECK(!position);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -464,39 +837,39 @@ int utcDaliAccessibilityControlAttributes(void)
 int UtcDaliControlReadingInfoType(void)
 {
   ToolkitTestApplication application;
-  auto control = Control::New();
+  auto                   control = Control::New();
 
   auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
 
-  for ( auto i = 0u; i < 4; ++i)
-    DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
+  for(auto i = 0u; i < 4; ++i)
+    DALI_TEST_CHECK(reading_info_type[static_cast<Dali::Accessibility::ReadingInfoType>(i)]);
 
   reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = false;
-  reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = false;
-  reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = false;
-  reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = false;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::STATE]       = false;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::NAME]        = false;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE]        = false;
 
   DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
 
   reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
 
-  for ( auto i = 0u; i < 4; ++i)
-    DALI_TEST_CHECK ( false == reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
+  for(auto i = 0u; i < 4; ++i)
+    DALI_TEST_CHECK(false == reading_info_type[static_cast<Dali::Accessibility::ReadingInfoType>(i)]);
 
   reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
-  reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
-  reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
-  reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::STATE]       = true;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::NAME]        = true;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE]        = true;
 
   DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
 
-  auto q = control.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  auto q = control.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   auto z = q.GetMap();
 
-  DALI_TEST_EQUALS( (z->Find( "reading_info_type" ))->Get<std::string>(), "name|role|description|state", TEST_LOCATION );
+  DALI_TEST_EQUALS((z->Find("reading_info_type"))->Get<std::string>(), "name|role|description|state", TEST_LOCATION);
   reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
-  for ( auto i = 0u; i < 4; ++i)
-    DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
+  for(auto i = 0u; i < 4; ++i)
+    DALI_TEST_CHECK(reading_info_type[static_cast<Dali::Accessibility::ReadingInfoType>(i)]);
 
   END_TEST;
 }
@@ -505,30 +878,30 @@ int UtcDaliControlReadingInfoType(void)
 int UtcDaliControlDoGesture(void)
 {
   ToolkitTestApplication application;
-  auto control = Control::New();
-  Dali::Accessibility::TestEnableSC( true );
+  auto                   control = Control::New();
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto accessible = Dali::Accessibility::Accessible::Get( control );
-  auto gesture_one = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
-  auto gesture_two = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
+  auto accessible  = Dali::Accessibility::Accessible::Get(control);
+  auto gesture_one = Dali::Accessibility::GestureInfo{Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000};
+  auto gesture_two = Dali::Accessibility::GestureInfo{Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000};
 
-  DALI_TEST_CHECK( !accessible->DoGesture( gesture_one ) );
-  DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
+  DALI_TEST_CHECK(!accessible->DoGesture(gesture_one));
+  DALI_TEST_CHECK(!TestDoGesture(accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000));
 
-  DevelControl::AccessibilityDoGestureSignal(control).Connect( [] ( std::pair< Dali::Accessibility::GestureInfo, bool > &gesture ) {
-  if ( gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT )
-    gesture.second = true;
-  else
-    gesture.second = false;
-  } );
+  DevelControl::AccessibilityDoGestureSignal(control).Connect([](std::pair<Dali::Accessibility::GestureInfo, bool>& gesture) {
+    if(gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT)
+      gesture.second = true;
+    else
+      gesture.second = false;
+  });
 
-  DALI_TEST_CHECK( accessible->DoGesture( gesture_one ) );
-  DALI_TEST_CHECK( TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
+  DALI_TEST_CHECK(accessible->DoGesture(gesture_one));
+  DALI_TEST_CHECK(TestDoGesture(accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000));
 
-  DALI_TEST_CHECK( !accessible->DoGesture( gesture_two ) );
-  DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
+  DALI_TEST_CHECK(!accessible->DoGesture(gesture_two));
+  DALI_TEST_CHECK(!TestDoGesture(accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000));
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -536,39 +909,39 @@ int UtcDaliControlDoGesture(void)
 int UtcDaliAccessibilityRelation(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto rel = Accessibility::RelationType::FLOWS_TO;
-  auto control = Control::New();
+  auto rel          = Accessibility::RelationType::FLOWS_TO;
+  auto control      = Control::New();
   auto destination1 = Control::New();
   auto destination2 = Control::New();
 
-  DevelControl::AppendAccessibilityRelation( control, destination1, rel );
+  DevelControl::AppendAccessibilityRelation(control, destination1, rel);
   auto relations = DevelControl::GetAccessibilityRelations(control);
   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 );
+  DevelControl::AppendAccessibilityRelation(control, destination2, rel);
   relations = DevelControl::GetAccessibilityRelations(control);
   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();
+  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].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 );
+  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].mRelationType ) == std::get<0>( relationset_bridge[0] ) );
+  auto relationset_bridge = TestGetRelationSet(accessible->GetAddress());
+  DALI_TEST_CHECK(static_cast<uint32_t>(relationset[0].mRelationType) == std::get<0>(relationset_bridge[0]));
 
-  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] );
+  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);
   relations = DevelControl::GetAccessibilityRelations(control);
@@ -579,7 +952,7 @@ int UtcDaliAccessibilityRelation(void)
   relations = DevelControl::GetAccessibilityRelations(control);
   DALI_TEST_EQUALS(relations.size(), 0u, TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -587,55 +960,61 @@ int UtcDaliAccessibilityRelation(void)
 int UtcDaliAccessibilityParentChildren(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto parent = Control::New();
+  auto parent  = Control::New();
   auto child_1 = Control::New();
   auto child_2 = Control::New();
 
-  auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
-  auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
-  auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
+  auto parent_accessible  = Dali::Accessibility::Accessible::Get(parent);
+  auto child_1_accessible = Dali::Accessibility::Accessible::Get(child_1);
+  auto child_2_accessible = Dali::Accessibility::Accessible::Get(child_2);
 
-  auto children = TestGetChildren( parent_accessible -> GetAddress() );
-  DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
+  auto children = TestGetChildren(parent_accessible->GetAddress());
+  DALI_TEST_EQUALS(children.size(), 0, TEST_LOCATION);
 
   try
   {
-    TestGetIndexInParent( child_1_accessible -> GetAddress() );
+    TestGetIndexInParent(child_1_accessible->GetAddress());
     DALI_ABORT("Object has parent, test abort");
   }
-  catch(TestDBusWrapper::error &){}
+  catch(TestDBusWrapper::error&)
+  {
+  }
 
   try
   {
-    TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
+    TestGetChildAtIndex(parent_accessible->GetAddress(), -1);
     DALI_ABORT("Positive index, test abort");
   }
-  catch(TestDBusWrapper::error &){}
+  catch(TestDBusWrapper::error&)
+  {
+  }
 
-  DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
+  DALI_TEST_EQUALS(parent_accessible->GetChildCount(), 0, TEST_LOCATION);
 
   try
   {
-    child_1_accessible -> GetIndexInParent();
+    child_1_accessible->GetIndexInParent();
     DALI_ABORT("Object has parent, test abort");
   }
-  catch (const std::domain_error&){}
+  catch(const std::domain_error&)
+  {
+  }
 
   parent.Add(child_1);
   parent.Add(child_2);
 
-  children = TestGetChildren( parent_accessible -> GetAddress() );
-  DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
+  children = TestGetChildren(parent_accessible->GetAddress());
+  DALI_TEST_EQUALS(children.size(), 2, TEST_LOCATION);
 
-  DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
+  DALI_TEST_EQUALS(parent_accessible->GetAddress(), TestGetParent(child_1_accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS(child_2_accessible->GetAddress(), TestGetChildAtIndex(parent_accessible->GetAddress(), TestGetIndexInParent(child_2_accessible->GetAddress())), TEST_LOCATION);
 
-  DALI_TEST_EQUALS( parent_accessible,  child_1_accessible -> GetParent(), TEST_LOCATION );
-  DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
+  DALI_TEST_EQUALS(parent_accessible, child_1_accessible->GetParent(), TEST_LOCATION);
+  DALI_TEST_EQUALS(child_2_accessible, parent_accessible->GetChildAtIndex(child_2_accessible->GetIndexInParent()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -644,16 +1023,16 @@ int UtcDaliAccessibilityGetLayer(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto control = Control::New();
-  auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
+  auto control              = Control::New();
+  auto accessible_obj       = Dali::Accessibility::Accessible::Get(control);
   auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
-  DALI_TEST_CHECK( accessible_component );
-  DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
-  DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
+  DALI_TEST_CHECK(accessible_component);
+  DALI_TEST_EQUALS(Dali::Accessibility::ComponentLayer::WINDOW, accessible_component->GetLayer(), TEST_LOCATION);
+  DALI_TEST_EQUALS(Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer(accessible_component->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -662,46 +1041,46 @@ int UtcDaliAccessibilityGrabFocus(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   auto controla = Control::New();
   auto controlb = Control::New();
 
-  Stage::GetCurrent().Add( controla );
-  Stage::GetCurrent().Add( controlb );
+  Stage::GetCurrent().Add(controla);
+  Stage::GetCurrent().Add(controlb);
 
   controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
   controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
 
-  auto a = Dali::Accessibility::Accessible::Get( controla );
-  auto b = Dali::Accessibility::Accessible::Get( controlb );
+  auto a = Dali::Accessibility::Accessible::Get(controla);
+  auto b = Dali::Accessibility::Accessible::Get(controlb);
 
-  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
-  auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
+  auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
+  auto b_component = dynamic_cast<Dali::Accessibility::Component*>(b);
 
-  auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
-  auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
+  auto states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a_component->GetAddress())};
+  auto states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b_component->GetAddress())};
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::FOCUSED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::FOCUSED]);
 
-  DALI_TEST_CHECK( a_component -> GrabFocus() );
+  DALI_TEST_CHECK(a_component->GrabFocus());
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a_component->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b_component->GetAddress())};
 
-  DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
+  DALI_TEST_CHECK(states_by_bridge_a[Dali::Accessibility::State::FOCUSED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::FOCUSED]);
 
-  DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
+  DALI_TEST_CHECK(TestGrabFocus(b_component->GetAddress()));
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a_component->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b_component->GetAddress())};
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
-  DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::FOCUSED]);
+  DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::FOCUSED]);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -709,81 +1088,81 @@ int UtcDaliAccessibilityGrabFocus(void)
 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch" );
+  tet_infoline("UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch");
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   auto control = Control::New();
-  Stage::GetCurrent().GetRootLayer().Add( control );
+  Stage::GetCurrent().GetRootLayer().Add(control);
 
-  auto window = Dali::DevelWindow::Get( control );
-  DALI_TEST_CHECK( window );
+  auto window = Dali::DevelWindow::Get(control);
+  DALI_TEST_CHECK(window);
 
   //window.SetPosition({0,0});
-  DevelWindow::SetPositionSize( window, PositionSize( 0,0,480, 240 ) );
+  DevelWindow::SetPositionSize(window, PositionSize(0, 0, 480, 240));
 
-  control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
-  control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
+  control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
+  control.SetProperty(Actor::Property::SIZE, Vector2(10, 10));
 
   application.SendNotification();
-  application.Render( 1 );
-
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
-
-  auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
-  DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
-
-  auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
-  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
-
-  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
-  DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
-
-  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
-  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
-
-  control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
+  application.Render(1);
+
+  auto a           = Dali::Accessibility::Accessible::Get(control);
+  auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
+
+  auto extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN);
+  DALI_TEST_EQUALS(extents.x, 5.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.y, 5.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
+
+  auto bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::SCREEN);
+  DALI_TEST_EQUALS(std::get<0>(bridge_extents), 5, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<1>(bridge_extents), 5, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
+
+  extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
+  DALI_TEST_EQUALS(extents.x, 5.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.y, 5.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
+
+  bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::WINDOW);
+  DALI_TEST_EQUALS(std::get<0>(bridge_extents), 5, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<1>(bridge_extents), 5, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
+
+  control.SetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false);
   application.SendNotification();
-  application.Render( 1 );
-
-  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
-  DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
-
-  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
-  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
-
-  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
-  DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
-
-  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
-  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
-
-  Dali::Accessibility::TestEnableSC( false );
+  application.Render(1);
+
+  extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN);
+  DALI_TEST_EQUALS(extents.x, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.y, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
+
+  bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::SCREEN);
+  DALI_TEST_EQUALS(std::get<0>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<1>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
+
+  extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
+  DALI_TEST_EQUALS(extents.x, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.y, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
+
+  bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::WINDOW);
+  DALI_TEST_EQUALS(std::get<0>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<1>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -792,76 +1171,76 @@ int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionDoNotMatch(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   auto control = Control::New();
-  Stage::GetCurrent().GetRootLayer().Add( control );
-  auto window = Dali::DevelWindow::Get( control );
+  Stage::GetCurrent().GetRootLayer().Add(control);
+  auto window = Dali::DevelWindow::Get(control);
   //window.SetPosition({33,33});
-  DevelWindow::SetPositionSize( window, PositionSize( 33,33,480, 240 ) );
+  DevelWindow::SetPositionSize(window, PositionSize(33, 33, 480, 240));
 
-  control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
-  control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
+  control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
+  control.SetProperty(Actor::Property::SIZE, Vector2(10, 10));
 
   application.SendNotification();
-  application.Render( 1 );
-
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
-
-  auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
-  DALI_TEST_EQUALS( extents.x, 38.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.y, 38.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
-
-  auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
-  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 38, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 38, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
-
-  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
-  DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
-
-  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
-  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
-
-  control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
+  application.Render(1);
+
+  auto a           = Dali::Accessibility::Accessible::Get(control);
+  auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
+
+  auto extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN);
+  DALI_TEST_EQUALS(extents.x, 38.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.y, 38.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
+
+  auto bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::SCREEN);
+  DALI_TEST_EQUALS(std::get<0>(bridge_extents), 38, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<1>(bridge_extents), 38, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
+
+  extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
+  DALI_TEST_EQUALS(extents.x, 5.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.y, 5.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
+
+  bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::WINDOW);
+  DALI_TEST_EQUALS(std::get<0>(bridge_extents), 5, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<1>(bridge_extents), 5, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
+
+  control.SetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false);
   application.SendNotification();
-  application.Render( 1 );
-
-  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
-  DALI_TEST_EQUALS( extents.x, 43.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.y, 43.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
-
-  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
-  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 43, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 43, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
-
-  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
-  DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
-
-  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
-  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
-  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
-
-  Dali::Accessibility::TestEnableSC( false );
+  application.Render(1);
+
+  extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN);
+  DALI_TEST_EQUALS(extents.x, 43.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.y, 43.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
+
+  bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::SCREEN);
+  DALI_TEST_EQUALS(std::get<0>(bridge_extents), 43, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<1>(bridge_extents), 43, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
+
+  extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
+  DALI_TEST_EQUALS(extents.x, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.y, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
+
+  bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::WINDOW);
+  DALI_TEST_EQUALS(std::get<0>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<1>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
+  DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -870,16 +1249,16 @@ int UtcDaliAccessibilityGetAlpha(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto control = Control::New();
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
+  auto control     = Control::New();
+  auto a           = Dali::Accessibility::Accessible::Get(control);
+  auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
 
-  DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
-  DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
+  DALI_TEST_EQUALS(0.0, a_component->GetAlpha(), TEST_LOCATION);
+  DALI_TEST_EQUALS(0.0, TestGetAlpha(a_component->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -888,16 +1267,16 @@ int UtcDaliAccessibilityGetMdiZOrder(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto control = Control::New();
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
+  auto control     = Control::New();
+  auto a           = Dali::Accessibility::Accessible::Get(control);
+  auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
 
-  DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
+  DALI_TEST_EQUALS(0, static_cast<int>(a_component->GetMdiZOrder()), TEST_LOCATION);
+  DALI_TEST_EQUALS(0, TestGetMdiZOrder(a_component->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -906,23 +1285,23 @@ int UtcDaliAccessibilityAction(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto control = Control::New( );
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
+  auto control = Control::New();
+  auto a       = Dali::Accessibility::Accessible::Get(control);
+  auto b       = dynamic_cast<Dali::Accessibility::Action*>(a);
 
-  std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
-  auto count = b -> GetActionCount();
+  std::vector<std::string> actions{"activate", "escape", "increment", "decrement", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide"};
+  auto                     count = b->GetActionCount();
 
-  DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
+  DALI_TEST_EQUALS(count, 11, TEST_LOCATION);
 
-  for (auto i = 0u; i<count; ++i)
+  for(auto i = 0u; i < count; ++i)
   {
-    DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
-    DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
-    DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
-    DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
+    DALI_TEST_CHECK(Dali::Accessibility::Find(actions, b->GetActionName(i)));
+    DALI_TEST_EQUALS(b->GetActionName(i), b->GetLocalizedActionName(i), TEST_LOCATION);
+    DALI_TEST_EQUALS(b->GetActionDescription(i), "", TEST_LOCATION);
+    DALI_TEST_EQUALS(b->GetActionKeyBinding(i), "", TEST_LOCATION);
   }
 
   // Empty strings should be returned for invalid indices
@@ -931,16 +1310,16 @@ int UtcDaliAccessibilityAction(void)
   DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
   DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
 
-  count = TestGetActionCount(b -> GetAddress());
+  count = TestGetActionCount(b->GetAddress());
 
-  DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
+  DALI_TEST_EQUALS(count, 11, TEST_LOCATION);
 
-  for (auto i = 0u; i<count; ++i)
+  for(auto i = 0u; i < count; ++i)
   {
-    DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
-    DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
-    DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
-    DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
+    DALI_TEST_CHECK(Dali::Accessibility::Find(actions, TestGetActionName(b->GetAddress(), i)));
+    DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), i), TestGetLocalizedActionName(b->GetAddress(), i), TEST_LOCATION);
+    DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), i), "", TEST_LOCATION);
+    DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), i), "", TEST_LOCATION);
   }
 
   DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
@@ -948,88 +1327,135 @@ int UtcDaliAccessibilityAction(void)
   DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
   DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
 
 int UtcDaliAccessibilityDoAction(void)
 {
+  using Dali::Accessibility::ActionType;
+
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
-  thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
+  Dali::Accessibility::TestEnableSC(true);
+  thread_local std::vector<ActionType> actions_done;
+  thread_local std::vector<bool>       legacy_actions_done(5, false);
+
+  const auto reset_results = [&]() {
+    actions_done.clear();
+    std::fill(legacy_actions_done.begin(), legacy_actions_done.end(), false);
+  };
 
-  auto control = Control::New(  );
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
-  std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
+  const auto check_actions_done = [&](std::vector<ActionType> actions_sent) {
+    for(ActionType action : actions_sent)
+    {
+      auto it = std::find(actions_done.begin(), actions_done.end(), action);
+      DALI_TEST_CHECK(it != actions_done.end());
+    }
+  };
 
-  // Test calling action by name
-  DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
-  DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
-  DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
+  const auto check_all_actions_done_and_reset = [&]() {
+    check_actions_done({ActionType::ACTIVATE, ActionType::ESCAPE, ActionType::INCREMENT, ActionType::DECREMENT});
+    DALI_TEST_CHECK(std::all_of(legacy_actions_done.begin(), legacy_actions_done.end(), [](bool x) { return x == true; }));
+    reset_results();
+  };
+
+  auto                     control = Control::New();
+  auto                     a       = Dali::Accessibility::Accessible::Get(control);
+  auto                     b       = dynamic_cast<Dali::Accessibility::Action*>(a);
+  std::vector<std::string> actions{"activate", "escape", "increment", "decrement", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed"};
 
   // Negative test of calling action with not defined name
-  DALI_TEST_CHECK( !b -> DoAction( "undefined" ) );
-
-  DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
-    actions_done[ 1 ] = true;
-  } );
-  DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
-    actions_done[ 2 ] = true;
-  } );
-  DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
-    actions_done[ 3 ] = true;
-  } );
-   DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
-    actions_done[ 4 ] = true;
-  } );
-   DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
-    actions_done[ 5 ] = true;
-  } );
-  DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
-    actions_done[ 0 ] = true;
-  } );
+  DALI_TEST_CHECK(!b->DoAction("undefined"));
+
+  // Returns fail if no signal is connected
+  DALI_TEST_CHECK(!b->DoAction(actions[0])); // activate
+  DALI_TEST_CHECK(!b->DoAction(actions[1])); // escape
+  DALI_TEST_CHECK(!b->DoAction(actions[2])); // increment
+  DALI_TEST_CHECK(!b->DoAction(actions[3])); // decrement
+
+  DevelControl::AccessibilityActionSignal(control).Connect([](const Dali::Accessibility::ActionInfo& action_info) {
+    actions_done.push_back(action_info.type);
+    return true;
+  });
+  DevelControl::AccessibilityReadingSkippedSignal(control).Connect([]() {
+    legacy_actions_done[0] = true;
+  });
+  DevelControl::AccessibilityReadingCancelledSignal(control).Connect([]() {
+    legacy_actions_done[1] = true;
+  });
+  DevelControl::AccessibilityReadingStoppedSignal(control).Connect([]() {
+    legacy_actions_done[2] = true;
+  });
+  DevelControl::AccessibilityReadingPausedSignal(control).Connect([]() {
+    legacy_actions_done[3] = true;
+  });
+  DevelControl::AccessibilityReadingResumedSignal(control).Connect([]() {
+    legacy_actions_done[4] = true;
+  });
 
   // Test calling action by index
-  DALI_TEST_CHECK( b -> DoAction( 1 ) );
-  DALI_TEST_CHECK( b -> DoAction( 2 ) );
-  DALI_TEST_CHECK( b -> DoAction( 3 ) );
-  DALI_TEST_CHECK( b -> DoAction( 4 ) );
-  DALI_TEST_CHECK( b -> DoAction( 5 ) );
-  DALI_TEST_CHECK( b -> DoAction( 6 ) );
-
-  for ( auto i = 0u; i < actions_done.size(); ++i )
-    {
-      DALI_TEST_CHECK( actions_done[ i ] );
-      actions_done[ i ] = false;
-    }
+  for(size_t i = 0; i < actions.size(); ++i)
+  {
+    DALI_TEST_CHECK(b->DoAction(i));
+  }
 
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
+  check_all_actions_done_and_reset();
 
-  for ( auto i = 0u; i < actions_done.size(); ++i )
-    {
-      DALI_TEST_CHECK( actions_done[ i ] );
-      actions_done[ i ] = false;
-    }
+  // Test calling action by name
+  for(size_t i = 0; i < actions.size(); ++i)
+  {
+    DALI_TEST_CHECK(b->DoAction(actions[i]));
+  }
+
+  check_all_actions_done_and_reset();
 
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
+  // Test "DoAction" through d-bus call
+  for(size_t i = 0; i < actions.size(); ++i)
+  {
+    DALI_TEST_CHECK(TestDoAction(b->GetAddress(), i));
+  }
+
+  check_all_actions_done_and_reset();
+
+  // Test "DoActionName" through d-bus call
+  for(size_t i = 0; i < actions.size(); ++i)
+  {
+    DALI_TEST_CHECK(TestDoAction(b->GetAddress(), actions[i]));
+  }
 
-  for ( auto i = 0u; i < actions_done.size(); ++i )
-      DALI_TEST_CHECK( actions_done[ i ] );
+  check_all_actions_done_and_reset();
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
+
+  END_TEST;
+}
+
+int UtcDaliAccessibilityActivateFallbackToLegacy(void)
+{
+  using Dali::Accessibility::ActionType;
+
+  ToolkitTestApplication application;
+
+  Dali::Accessibility::TestEnableSC(true);
+  thread_local std::vector<ActionType> actions_done;
+  thread_local bool                    legacy_activate_done = false;
+
+  auto control = Control::New();
+  auto a       = Dali::Accessibility::Accessible::Get(control);
+  auto b       = dynamic_cast<Dali::Accessibility::Action*>(a);
+
+  DevelControl::AccessibilityActivateSignal(control).Connect([]() {
+    legacy_activate_done = true;
+  });
+
+  DALI_TEST_CHECK(b->DoAction("activate"));   // fallback to legacy "activate" when ActionSignal is not connected
+  DALI_TEST_CHECK(!b->DoAction("increment")); // "increment" does not exist in legacy actions
+
+  DALI_TEST_CHECK(legacy_activate_done);
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -1041,20 +1467,20 @@ void TestVoidCallback()
 int UtcDaliAccessibilitySignals(void)
 {
   ToolkitTestApplication application;
-  ConnectionTracker connectionTracker;
-  Control control = Control::New();
+  ConnectionTracker      connectionTracker;
+  Control                control = Control::New();
 
-  DALI_TEST_CHECK( DevelControl::AccessibilityGetNameSignal(control).Empty() );
-  control.ConnectSignal( &connectionTracker, "getName", &TestVoidCallback );
-  DALI_TEST_CHECK( !DevelControl::AccessibilityGetNameSignal(control).Empty() );
+  DALI_TEST_CHECK(DevelControl::AccessibilityGetNameSignal(control).Empty());
+  control.ConnectSignal(&connectionTracker, "getName", &TestVoidCallback);
+  DALI_TEST_CHECK(!DevelControl::AccessibilityGetNameSignal(control).Empty());
 
-  DALI_TEST_CHECK( DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
-  control.ConnectSignal( &connectionTracker, "getDescription", &TestVoidCallback );
-  DALI_TEST_CHECK( !DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
+  DALI_TEST_CHECK(DevelControl::AccessibilityGetDescriptionSignal(control).Empty());
+  control.ConnectSignal(&connectionTracker, "getDescription", &TestVoidCallback);
+  DALI_TEST_CHECK(!DevelControl::AccessibilityGetDescriptionSignal(control).Empty());
 
-  DALI_TEST_CHECK( DevelControl::AccessibilityDoGestureSignal(control).Empty() );
-  control.ConnectSignal( &connectionTracker, "doGesture", &TestVoidCallback );
-  DALI_TEST_CHECK( !DevelControl::AccessibilityDoGestureSignal(control).Empty() );
+  DALI_TEST_CHECK(DevelControl::AccessibilityDoGestureSignal(control).Empty());
+  control.ConnectSignal(&connectionTracker, "doGesture", &TestVoidCallback);
+  DALI_TEST_CHECK(!DevelControl::AccessibilityDoGestureSignal(control).Empty());
 
   END_TEST;
 }
@@ -1068,31 +1494,31 @@ static void Wait(ToolkitTestApplication& application)
 int UtcDaliAccessibilityScrollToChildScrollView(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   ScrollView scrollView = ScrollView::New();
-  application.GetScene().Add( scrollView );
+  application.GetScene().Add(scrollView);
 
-  PushButton actorA = PushButton::New();
+  PushButton          actorA    = PushButton::New();
   const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
-  actorA.SetProperty( Dali::Actor::Property::POSITION, positionA );
+  actorA.SetProperty(Dali::Actor::Property::POSITION, positionA);
   scrollView.Add(actorA);
 
-  PushButton actorB = PushButton::New();
+  PushButton          actorB    = PushButton::New();
   const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
-  actorB.SetProperty( Dali::Actor::Property::POSITION, positionB );
+  actorB.SetProperty(Dali::Actor::Property::POSITION, positionB);
   scrollView.Add(actorB);
 
-  TableView tableView = TableView::New( 2, 2 ); // 2 by 2 grid.
-  tableView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) );
+  TableView tableView = TableView::New(2, 2); // 2 by 2 grid.
+  tableView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
   scrollView.Add(tableView);
 
   PushButton actorC = PushButton::New();
-  actorC.SetProperty( Actor::Property::SIZE, Vector2(50.0f, 50.0f) );
-  tableView.AddChild( actorC, TableView::CellPosition( 0, 0 ) );
+  actorC.SetProperty(Actor::Property::SIZE, Vector2(50.0f, 50.0f));
+  tableView.AddChild(actorC, TableView::CellPosition(0, 0));
 
   PushButton actorD = PushButton::New();
-  application.GetScene().Add( actorD );
+  application.GetScene().Add(actorD);
 
   Wait(application);
 
@@ -1118,42 +1544,152 @@ int UtcDaliAccessibilityScrollToChildScrollView(void)
   // negative testcase calling ScrollToChild using non-child actor
   accessibleParent->ScrollToChild(actorD);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
   END_TEST;
 }
 
-namespace {
-  class TestItemFactory : public ItemFactory
-  {
-  public:
-    TestItemFactory()
-    {
-    }
-
-    unsigned int GetNumberOfItems() override
-    {
-      return 2;
-    }
+int UtcDaliAccessibilityScrollToChildCustomScrollable(void)
+{
+  ToolkitTestApplication application;
 
-    Dali::Actor NewItem(unsigned int itemId) override
-    {
-      return TextLabel::New(std::to_string(itemId));
-    }
+  thread_local Dali::Accessibility::ActionInfo action_done;
+  const auto                                   check_scroll_to_child_action_done_and_reset = [&](Actor child) {
+    DALI_TEST_CHECK(action_done.type == Dali::Accessibility::ActionType::SCROLL_TO_CHILD);
+    DALI_TEST_CHECK(action_done.target == child);
+    action_done = Dali::Accessibility::ActionInfo{};
   };
+
+  Dali::Accessibility::TestEnableSC(true);
+
+  auto scrollable = Control::New();
+  // set control as scrollable
+  scrollable.SetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE, true);
+
+  DevelControl::AccessibilityActionSignal(scrollable).Connect([](const Dali::Accessibility::ActionInfo& action_info) {
+    action_done = action_info;
+    return true;
+  });
+
+  application.GetScene().Add(scrollable);
+
+  PushButton          actorA    = PushButton::New();
+  const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
+  actorA.SetProperty(Dali::Actor::Property::POSITION, positionA);
+  scrollable.Add(actorA);
+
+  PushButton          actorB    = PushButton::New();
+  const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
+  actorB.SetProperty(Dali::Actor::Property::POSITION, positionB);
+  scrollable.Add(actorB);
+
+  TableView tableView = TableView::New(2, 2); // 2 by 2 grid.
+  tableView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+  scrollable.Add(tableView);
+
+  PushButton actorC = PushButton::New();
+  actorC.SetProperty(Actor::Property::SIZE, Vector2(50.0f, 50.0f));
+  tableView.AddChild(actorC, TableView::CellPosition(0, 0));
+
+  PushButton actorD = PushButton::New();
+  application.GetScene().Add(actorD);
+
+  Wait(application);
+
+  auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollable));
+  DALI_TEST_CHECK(accessibleParent);
+  auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
+  DALI_TEST_CHECK(accessibleA);
+  auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
+  DALI_TEST_CHECK(accessibleB);
+  auto* accessibleC = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorC));
+  DALI_TEST_CHECK(accessibleC);
+  auto* accessibleD = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorD));
+  DALI_TEST_CHECK(accessibleD);
+
+  accessibleA->GrabHighlight();
+  Wait(application);
+  check_scroll_to_child_action_done_and_reset(actorA);
+
+  accessibleB->GrabHighlight();
+  Wait(application);
+  check_scroll_to_child_action_done_and_reset(actorB);
+
+  // scrollable is ancestor of actorC
+  // This should work without a crash
+  accessibleC->GrabHighlight();
+  check_scroll_to_child_action_done_and_reset(actorC);
+
+  // Grabbing highlight on a non-child actor to scrollable does not emit SCROLL_TO_CHILD
+  accessibleD->GrabHighlight();
+  DALI_TEST_CHECK(action_done.type == Dali::Accessibility::ActionType::MAX_COUNT);
+  DALI_TEST_CHECK(action_done.target != actorD);
+
+  Dali::Accessibility::TestEnableSC(false);
+  END_TEST;
 }
 
+int UtcDaliAccessibilityScrollToChild(void)
+{
+  ToolkitTestApplication application;
+
+  Dali::Accessibility::TestEnableSC(true);
+
+  auto parent = Control::New();
+
+  auto                child    = Control::New();
+  const Dali::Vector3 position = Vector3(100.0f, 400.0f, 0.0f);
+  child.SetProperty(Dali::Actor::Property::POSITION, position);
+
+  auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(parent));
+  DALI_TEST_CHECK(accessibleParent);
+
+  // ScrollToChild fails if no ActionSignal is connected
+  DALI_TEST_CHECK(!accessibleParent->ScrollToChild(child));
+
+  DevelControl::AccessibilityActionSignal(parent).Connect([](const Dali::Accessibility::ActionInfo& action_info) {
+    return true;
+  });
+
+  // ScrollToChild succeeds is an ActionSinal is connected
+  DALI_TEST_CHECK(accessibleParent->ScrollToChild(child));
+
+  Dali::Accessibility::TestEnableSC(false);
+  END_TEST;
+}
+
+namespace
+{
+class TestItemFactory : public ItemFactory
+{
+public:
+  TestItemFactory()
+  {
+  }
+
+  unsigned int GetNumberOfItems() override
+  {
+    return 2;
+  }
+
+  Dali::Actor NewItem(unsigned int itemId) override
+  {
+    return TextLabel::New(std::to_string(itemId));
+  }
+};
+} // namespace
+
 int UtcDaliAccessibilityScrollToChildItemView(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   TestItemFactory factory;
-  ItemView view = ItemView::New(factory);
-  Dali::Vector3 vec(480.0f, 800.0f, 0.0f);
-  ItemLayoutPtr layout = DefaultItemLayout::New( DefaultItemLayout::DEPTH );
+  ItemView        view = ItemView::New(factory);
+  Dali::Vector3   vec(480.0f, 800.0f, 0.0f);
+  ItemLayoutPtr   layout = DefaultItemLayout::New(DefaultItemLayout::DEPTH);
 
   view.AddLayout(*layout);
-  view.SetProperty( Actor::Property::SIZE, vec );
+  view.SetProperty(Actor::Property::SIZE, vec);
 
   application.GetScene().Add(view);
   layout->SetOrientation(ControlOrientation::Down);
@@ -1173,14 +1709,14 @@ int UtcDaliAccessibilityScrollToChildItemView(void)
   accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB))
   Wait(application);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
   END_TEST;
 }
 
 int UtcDaliAccessibilityScrollToChildNonScrollable(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   TextLabel label = TextLabel::New("123");
 
@@ -1191,14 +1727,14 @@ int UtcDaliAccessibilityScrollToChildNonScrollable(void)
   DALI_TEST_EQUALS(accessible->ScrollToChild({}), false, TEST_LOCATION);
   DALI_TEST_EQUALS(accessible->GetInternalActor(), label, TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
   END_TEST;
 }
 
 int UtcDaliAccessibilityCheckHighlight(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
   Dali::Accessibility::TestResetMoveOutedCalled();
 
   // Make precondition two children exist in parent area
@@ -1208,7 +1744,7 @@ int UtcDaliAccessibilityCheckHighlight(void)
   parentButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
   parentButton.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
   parentButton.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f));
-  application.GetScene().Add( parentButton );
+  application.GetScene().Add(parentButton);
 
   PushButton buttonA = PushButton::New();
   buttonA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
@@ -1236,17 +1772,17 @@ int UtcDaliAccessibilityCheckHighlight(void)
   Wait(application);
   // Need one more notificaiton to get correct updated position
   application.SendNotification();
-  DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+  DALI_TEST_EQUALS(true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
 
   // Reset verdict data
   Dali::Accessibility::TestResetMoveOutedCalled();
 
   // Move first child (A) outside of parent area (both start and end position are outside of parent area) - no move outed event expected for A object
-  buttonA.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f) );
+  buttonA.SetProperty(Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f));
   Wait(application);
   // Need one more notificaiton to get correct updated position
   application.SendNotification();
-  DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+  DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
 
   // Reset verdict data
   Dali::Accessibility::TestResetMoveOutedCalled();
@@ -1259,11 +1795,11 @@ int UtcDaliAccessibilityCheckHighlight(void)
 
   // Move second child (B) inside of parent area (both start and end position are inside of parent area) - no move outed event expected for B object
   // B: (0,100) --> (0, 50)
-  buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f) );
+  buttonB.SetProperty(Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f));
   Wait(application);
   // Need one more notificaiton to get correct updated position
   application.SendNotification();
-  DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+  DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
 
   // Reset verdict data
   Dali::Accessibility::TestResetMoveOutedCalled();
@@ -1273,18 +1809,18 @@ int UtcDaliAccessibilityCheckHighlight(void)
   Wait(application);
   // Need one more notificaiton to get correct updated position
   application.SendNotification();
-  DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+  DALI_TEST_EQUALS(true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
 
   // Reset verdict data
   Dali::Accessibility::TestResetMoveOutedCalled();
 
   // Move second child (B) back into parent area (start position is outside but end position is inside of parent area) - no move outed event expected for B object
   // B: (300,100) --> (0, 100)
-  buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f) );
+  buttonB.SetProperty(Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f));
   Wait(application);
   // Need one more seding notificaiton to get correct updated position
   application.SendNotification();
-  DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+  DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
 
   // Reset verdict data
   Dali::Accessibility::TestResetMoveOutedCalled();
@@ -1297,13 +1833,13 @@ int UtcDaliAccessibilityCheckHighlight(void)
 
   // Move B (untracked) out of parent area through the parent's area right edge - no move outed event expected for B object
   // B: (0,100) --> (300, 100)
-  buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f) );
+  buttonB.SetProperty(Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f));
   Wait(application);
   // Need one more seding notificaiton to get correct updated position
   application.SendNotification();
-  DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+  DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
   END_TEST;
 }
 
@@ -1311,7 +1847,7 @@ int UtcDaliWebViewAccessible(void)
 {
   ToolkitTestApplication application;
 
-  auto webView = Dali::Toolkit::WebView::New();
+  auto webView           = Dali::Toolkit::WebView::New();
   auto webViewAccessible = Dali::Accessibility::Accessible::Get(webView);
 
   DALI_TEST_CHECK(webViewAccessible);
index 8b54340..76744be 100644 (file)
@@ -131,24 +131,6 @@ int UtcDaliControlAccessibileBlockAccessibleCreation(void)
   END_TEST;
 }
 
-int UtcDaliControlPropertyAccessibilityTranslationDomain(void)
-{
-  ToolkitTestApplication application;
-
-  auto control = Control::New();
-
-  auto accessibility_translation_domain = DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN;
-  DALI_TEST_EQUALS("", control.GetProperty<std::string>(accessibility_translation_domain), TEST_LOCATION);
-
-  control.SetProperty(accessibility_translation_domain, "translation_domain_test_1");
-  DALI_TEST_EQUALS("translation_domain_test_1", control.GetProperty(accessibility_translation_domain).Get<std::string>(), TEST_LOCATION);
-
-  control.SetProperty(accessibility_translation_domain, "translation_domain_test_2");
-  DALI_TEST_EQUALS("translation_domain_test_2", control.GetProperty(accessibility_translation_domain).Get<std::string>(), TEST_LOCATION);
-
-  END_TEST;
-}
-
 // This test shows that when the accessibility bridge is
 // not up, there is no possibility to grab or clear highlight
 int UtcDaliControlAccessibilityHighlight(void)
@@ -727,11 +709,11 @@ int UtcDaliAccessibilityTextAnchor(void)
   DALI_TEST_EQUALS(hyperlink->IsValid(), true, TEST_LOCATION);
   auto action = dynamic_cast<Dali::Accessibility::Action*>(accessible);
   // activation of valid hyperlink
-  DALI_TEST_CHECK(action->DoAction("accessibilityActivated"));
+  DALI_TEST_CHECK(action->DoAction("activate"));
   // making hyperlink invalid
   textanchor.SetProperty(Toolkit::TextAnchor::Property::URI, "");
   DALI_TEST_EQUALS(hyperlink->IsValid(), false, TEST_LOCATION);
-  DALI_TEST_CHECK(!action->DoAction("accessibilityActivated"));
+  DALI_TEST_CHECK(!action->DoAction("activate"));
 
   Dali::Accessibility::TestEnableSC(false);
 
index 827703d..934f66e 100644 (file)
@@ -655,7 +655,7 @@ int UtcDaliControlImplOnAccessibilityActivatedP(void)
   DALI_TEST_CHECK(handle);
 
   Property::Map attributes;
-  DALI_TEST_EQUALS(false, handle.DoAction("accessibilityActivated", attributes), TEST_LOCATION);
+  DALI_TEST_EQUALS(false, handle.DoAction("activate", attributes), TEST_LOCATION);
 
   END_TEST;
 }
index e0107d2..b4e847b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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.
@@ -38,14 +38,18 @@ namespace Dali::Toolkit::DevelControl
 {
 namespace
 {
-static std::string GetLocaleText(std::string string, const char *domain = "dali-toolkit")
+#if defined(DEBUG_ENABLED)
+Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_CONTROL_ACCESSIBLE");
+#endif
+
+std::string GetLocaleText(std::string string, const char* domain = "dali-toolkit")
 {
 #ifdef DGETTEXT_ENABLED
-    /*TODO: currently non-localized string is used as a key for translation lookup. In case the lookup key formatting is forced
+  /*TODO: currently non-localized string is used as a key for translation lookup. In case the lookup key formatting is forced
           consider calling utility function for converting non-localized string into well-formatted key before lookup. */
-    return dgettext(domain, string.c_str());
+  return dgettext(domain, string.c_str());
 #else
-    return string;
+  return string;
 #endif
 }
 
@@ -64,38 +68,101 @@ static Dali::Actor CreateHighlightIndicatorActor()
 
   return actor;
 }
-} // unnamed namespace
 
-ControlAccessible::ControlAccessible(Dali::Actor self)
-: ActorAccessible(self)
+bool IsAtspiRole(int32_t rawRole)
 {
-  auto control = Toolkit::Control::DownCast(self);
+  return rawRole >= static_cast<int32_t>(Dali::Accessibility::Role::INVALID) && rawRole < static_cast<int32_t>(Dali::Accessibility::Role::MAX_COUNT);
+}
 
-  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
-  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+bool IsRoleV2(int32_t rawRole)
+{
+  return rawRole >= static_cast<int32_t>(ROLE_START_INDEX) && rawRole < static_cast<int32_t>(AccessibilityRole::MAX_COUNT);
+}
 
-  self.PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle& handle, Dali::Property::Index index, Dali::Property::Value value) {
-    if(this->Self() != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor())
-    {
-      return;
-    }
+#define TO_V1_ROLE_TYPE(v2RoleType, v1RoleType) \
+  case AccessibilityRole::v2RoleType:           \
+  {                                             \
+    return Role::v1RoleType;                    \
+  }
+#define TO_SAME_ROLE_TYPE(roleType) \
+  case AccessibilityRole::roleType: \
+  {                                 \
+    return Role::roleType;          \
+  }
 
-    if(index == DevelControl::Property::ACCESSIBILITY_NAME || (index == GetNamePropertyIndex() && controlImpl.mAccessibilityName.empty()))
+Dali::Accessibility::Role ConvertV2RoleToAtspiRole(AccessibilityRole role)
+{
+  using Dali::Accessibility::Role;
+  switch(role)
+  {
+    TO_V1_ROLE_TYPE(ADJUSTABLE, SLIDER)
+    TO_SAME_ROLE_TYPE(ALERT)
+    TO_V1_ROLE_TYPE(BUTTON, PUSH_BUTTON)
+    TO_SAME_ROLE_TYPE(CHECK_BOX)
+    TO_SAME_ROLE_TYPE(COMBO_BOX)
+    TO_V1_ROLE_TYPE(CONTAINER, FILLER)
+    TO_SAME_ROLE_TYPE(DIALOG)
+    TO_SAME_ROLE_TYPE(ENTRY)
+    TO_SAME_ROLE_TYPE(HEADER)
+    TO_SAME_ROLE_TYPE(IMAGE)
+    TO_SAME_ROLE_TYPE(LINK)
+    TO_SAME_ROLE_TYPE(LIST)
+    TO_SAME_ROLE_TYPE(LIST_ITEM)
+    TO_SAME_ROLE_TYPE(MENU)
+    TO_SAME_ROLE_TYPE(MENU_BAR)
+    TO_SAME_ROLE_TYPE(MENU_ITEM)
+    TO_V1_ROLE_TYPE(NONE, UNKNOWN)
+    TO_SAME_ROLE_TYPE(PASSWORD_TEXT)
+    TO_SAME_ROLE_TYPE(POPUP_MENU)
+    TO_SAME_ROLE_TYPE(PROGRESS_BAR)
+    TO_SAME_ROLE_TYPE(RADIO_BUTTON)
+    TO_SAME_ROLE_TYPE(SCROLL_BAR)
+    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_SAME_ROLE_TYPE(TOGGLE_BUTTON)
+    TO_SAME_ROLE_TYPE(TOOL_BAR)
+    default:
     {
-      if(controlImpl.mAccessibilityGetNameSignal.Empty())
-      {
-        Emit(Dali::Accessibility::ObjectPropertyChangeEvent::NAME);
-      }
+      return Role::UNKNOWN;
     }
+  }
+}
 
-    if(index == DevelControl::Property::ACCESSIBILITY_DESCRIPTION || (index == GetDescriptionPropertyIndex() && controlImpl.mAccessibilityDescription.empty()))
-    {
-      if(controlImpl.mAccessibilityGetDescriptionSignal.Empty())
-      {
-        Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION);
-      }
-    }
-  });
+Dali::Accessibility::Role ConvertRawRoleToAtspiRole(int32_t rawRole)
+{
+  if(IsAtspiRole(rawRole))
+  {
+    return static_cast<Dali::Accessibility::Role>(rawRole);
+  }
+  else if(IsRoleV2(rawRole))
+  {
+    return ConvertV2RoleToAtspiRole(static_cast<AccessibilityRole>(rawRole));
+  }
+  else
+  {
+    return Dali::Accessibility::Role::UNKNOWN;
+  }
+}
+
+bool IsModalRole(int32_t rawRole)
+{
+  using Dali::Accessibility::Role;
+  Role role = ConvertRawRoleToAtspiRole(rawRole);
+  return role == Role::ALERT || role == Role::DIALOG || role == Role::POPUP_MENU;
+}
+
+bool IsHighlightableRole(int32_t rawRole)
+{
+  return IsRoleV2(rawRole) && static_cast<AccessibilityRole>(rawRole) != AccessibilityRole::NONE;
+}
+
+} // unnamed namespace
+
+ControlAccessible::ControlAccessible(Dali::Actor self)
+: ActorAccessible(self)
+{
 }
 
 std::string ControlAccessible::GetName() const
@@ -104,15 +171,15 @@ std::string ControlAccessible::GetName() const
 
   Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
   Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
-  std::string name;
+  std::string              name;
 
   if(!controlImpl.mAccessibilityGetNameSignal.Empty())
   {
     controlImpl.mAccessibilityGetNameSignal.Emit(name);
   }
-  else if(!controlImpl.mAccessibilityName.empty())
+  else if(!controlImpl.mAccessibilityProps.name.empty())
   {
-    name = controlImpl.mAccessibilityName;
+    name = controlImpl.mAccessibilityProps.name;
   }
   else if(auto raw = GetNameRaw(); !raw.empty())
   {
@@ -123,11 +190,6 @@ std::string ControlAccessible::GetName() const
     name = Self().GetProperty<std::string>(Actor::Property::NAME);
   }
 
-  if(!controlImpl.mAccessibilityTranslationDomain.empty())
-  {
-    return GetLocaleText(name, controlImpl.mAccessibilityTranslationDomain.c_str());
-  }
-
   return GetLocaleText(name);
 }
 
@@ -142,26 +204,21 @@ std::string ControlAccessible::GetDescription() const
 
   Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
   Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
-  std::string description;
+  std::string              description;
 
   if(!controlImpl.mAccessibilityGetDescriptionSignal.Empty())
   {
     controlImpl.mAccessibilityGetDescriptionSignal.Emit(description);
   }
-  else if(!controlImpl.mAccessibilityDescription.empty())
+  else if(!controlImpl.mAccessibilityProps.description.empty())
   {
-    description = controlImpl.mAccessibilityDescription;
+    description = controlImpl.mAccessibilityProps.description;
   }
   else
   {
     description = GetDescriptionRaw();
   }
 
-  if(!controlImpl.mAccessibilityTranslationDomain.empty())
-  {
-    return GetLocaleText(description, controlImpl.mAccessibilityTranslationDomain.c_str());
-  }
-
   return GetLocaleText(description);
 }
 
@@ -170,9 +227,15 @@ std::string ControlAccessible::GetDescriptionRaw() const
   return {};
 }
 
+std::string ControlAccessible::GetValue() const
+{
+  return Self().GetProperty<std::string>(Toolkit::DevelControl::Property::ACCESSIBILITY_VALUE);
+}
+
 Dali::Accessibility::Role ControlAccessible::GetRole() const
 {
-  return Self().GetProperty<Dali::Accessibility::Role>(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE);
+  int32_t rawRole = Self().GetProperty<int32_t>(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE);
+  return ConvertRawRoleToAtspiRole(rawRole);
 }
 
 std::string ControlAccessible::GetLocalizedRoleName() const
@@ -197,7 +260,7 @@ bool ControlAccessible::IsShowing()
 
   while(parent)
   {
-    auto control      = Dali::Toolkit::Control::DownCast(parent->Self());
+    auto control = Dali::Toolkit::Control::DownCast(parent->Self());
     if(!control.GetProperty<bool>(Actor::Property::VISIBLE))
     {
       return false;
@@ -208,22 +271,43 @@ bool ControlAccessible::IsShowing()
   return true;
 }
 
+void ControlAccessible::ApplyAccessibilityProps(Dali::Accessibility::States& states)
+{
+  using Dali::Accessibility::State;
+  auto control = Dali::Toolkit::Control::DownCast(Self());
+
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+
+  // Apply states
+  const auto& props       = controlImpl.mAccessibilityProps;
+  states[State::ENABLED]  = props.states[AccessibilityState::ENABLED];
+  states[State::SELECTED] = props.states[AccessibilityState::SELECTED];
+  states[State::CHECKED]  = props.states[AccessibilityState::CHECKED];
+  states[State::BUSY]     = props.states[AccessibilityState::BUSY];
+  states[State::EXPANDED] = props.states[AccessibilityState::EXPANDED];
+
+  // Apply traits
+  states[State::MODAL]         = props.isModal || IsModalRole(props.role);
+  states[State::HIGHLIGHTABLE] = props.isHighlightable || IsHighlightableRole(props.role);
+}
+
 Dali::Accessibility::States ControlAccessible::CalculateStates()
 {
   using Dali::Accessibility::State;
 
-  Dali::Actor self = Self();
+  Dali::Actor                 self = Self();
   Dali::Accessibility::States states;
 
-  states[State::FOCUSABLE]     = self.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE);
-  states[State::FOCUSED]       = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self;
-  states[State::HIGHLIGHTABLE] = self.GetProperty<bool>(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
-  states[State::HIGHLIGHTED]   = GetCurrentlyHighlightedActor() == self;
-  states[State::ENABLED]       = true;
-  states[State::SENSITIVE]     = (Dali::DevelActor::IsHittable(self) && Dali::DevelActor::GetTouchRequired(self));
-  states[State::VISIBLE]       = self.GetProperty<bool>(Actor::Property::VISIBLE);
-  states[State::SHOWING]       = IsShowing();
-  states[State::DEFUNCT]       = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
+  states[State::FOCUSABLE]   = self.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE);
+  states[State::FOCUSED]     = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self;
+  states[State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self;
+  states[State::SENSITIVE]   = (Dali::DevelActor::IsHittable(self) && Dali::DevelActor::GetTouchRequired(self));
+  states[State::VISIBLE]     = self.GetProperty<bool>(Actor::Property::VISIBLE);
+  states[State::SHOWING]     = IsShowing();
+  states[State::DEFUNCT]     = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
+
+  ApplyAccessibilityProps(states);
 
   return states;
 }
@@ -259,7 +343,7 @@ bool ControlAccessible::IsHidden() const
   Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
   Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
 
-  return controlImpl.mAccessibilityHidden;
+  return controlImpl.mAccessibilityProps.isHidden;
 }
 
 bool ControlAccessible::GrabFocus()
@@ -269,12 +353,12 @@ bool ControlAccessible::GrabFocus()
 
 void ControlAccessible::ScrollToSelf()
 {
-  auto* child = this;
+  auto* child  = this;
   auto* parent = dynamic_cast<Toolkit::DevelControl::ControlAccessible*>(child->GetParent());
 
-  while (parent)
+  while(parent)
   {
-    if (parent->IsScrollable())
+    if(parent->IsScrollable())
     {
       parent->ScrollToChild(child->Self());
     }
@@ -299,10 +383,30 @@ void ControlAccessible::UnregisterPositionPropertyNotification()
   controlImpl.UnregisterAccessibilityPositionPropertyNotification();
 }
 
+void ControlAccessible::RegisterPropertySetSignal()
+{
+  auto                     control         = Dali::Toolkit::Control::DownCast(Self());
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+  controlImpl.RegisterAccessibilityPropertySetSignal();
+
+  mStatesSnapshot = controlImpl.mAccessibilityProps.states;
+}
+
+void ControlAccessible::UnregisterPropertySetSignal()
+{
+  auto                     control         = Dali::Toolkit::Control::DownCast(Self());
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+  controlImpl.UnregisterAccessibilityPropertySetSignal();
+
+  mStatesSnapshot = {};
+}
+
 bool ControlAccessible::GrabHighlight()
 {
-  Dali::Actor self = Self();
-  auto oldHighlightedActor = GetCurrentlyHighlightedActor();
+  Dali::Actor self                = Self();
+  auto        oldHighlightedActor = GetCurrentlyHighlightedActor();
 
   if(!Dali::Accessibility::IsUp())
   {
@@ -348,6 +452,7 @@ bool ControlAccessible::GrabHighlight()
   SetCurrentlyHighlightedActor(self);
   EmitHighlighted(true);
   RegisterPositionPropertyNotification();
+  RegisterPropertySetSignal();
 
   return true;
 }
@@ -363,6 +468,7 @@ bool ControlAccessible::ClearHighlight()
 
   if(GetCurrentlyHighlightedActor() == self)
   {
+    UnregisterPropertySetSignal();
     UnregisterPositionPropertyNotification();
     self.Remove(mCurrentHighlightActor.GetHandle());
     mCurrentHighlightActor = {};
@@ -444,9 +550,23 @@ std::vector<Dali::Accessibility::Relation> ControlAccessible::GetRelationSet()
   return DevelControl::GetAccessibilityRelations(control);
 }
 
+bool ControlAccessible::IsScrollable() const
+{
+  return Self().GetProperty<bool>(Toolkit::DevelControl::Property::ACCESSIBILITY_SCROLLABLE);
+}
+
 bool ControlAccessible::ScrollToChild(Actor child)
 {
-  return false;
+  auto control = Dali::Toolkit::Control::DownCast(Self());
+  bool success = false;
+
+  if(!DevelControl::AccessibilityActionSignal(control).Empty())
+  {
+    success = DevelControl::AccessibilityActionSignal(control).Emit({Accessibility::ActionType::SCROLL_TO_CHILD, child});
+    DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Performed AccessibilityAction: scrollToChild, success : %d\n", success);
+  }
+
+  return success;
 }
 
 Dali::Property::Index ControlAccessible::GetNamePropertyIndex()
@@ -469,4 +589,31 @@ Vector2 ControlAccessible::GetLastPosition() const
   return mLastPosition;
 }
 
+void ControlAccessible::OnStatePropertySet(AccessibilityStates newStates)
+{
+  int32_t rawRole = Self().GetProperty<int32_t>(Property::ACCESSIBILITY_ROLE);
+  if(IsRoleV2(rawRole))
+  {
+    AccessibilityRole role = static_cast<AccessibilityRole>(rawRole);
+
+    if(newStates[AccessibilityState::CHECKED] != mStatesSnapshot[AccessibilityState::CHECKED] &&
+       (role == AccessibilityRole::CHECK_BOX || role == AccessibilityRole::RADIO_BUTTON || role == AccessibilityRole::TOGGLE_BUTTON))
+    {
+      EmitStateChanged(Accessibility::State::CHECKED, newStates[AccessibilityState::CHECKED]);
+    }
+
+    if(newStates[AccessibilityState::SELECTED] != mStatesSnapshot[AccessibilityState::SELECTED] &&
+       (role == AccessibilityRole::BUTTON || role == AccessibilityRole::LIST_ITEM || role == AccessibilityRole::MENU_ITEM))
+    {
+      EmitStateChanged(Accessibility::State::SELECTED, newStates[AccessibilityState::SELECTED]);
+    }
+  }
+  else
+  {
+    DALI_LOG_INFO(gLogFilter, Debug::Verbose, "With V1 role, state change events are emitted manually by the app component.");
+  }
+
+  mStatesSnapshot = newStates;
+}
+
 } // namespace Dali::Toolkit::DevelControl
index 11b98a6..82888af 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_CONTROL_ACCESSIBLE_H
 
 /*
- * 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.
@@ -19,8 +19,8 @@
  */
 
 // EXTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/accessibility.h>
 #include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
+#include <dali/devel-api/adaptor-framework/accessibility.h>
 #include <dali/devel-api/adaptor-framework/actor-accessible.h>
 #include <dali/devel-api/atspi-interfaces/action.h>
 #include <dali/public-api/object/weak-handle.h>
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/dali-toolkit-common.h>
 
-namespace Dali::Toolkit::DevelControl {
+namespace Dali::Toolkit::DevelControl
+{
+/**
+ * @brief Represents current state of a control.
+ */
+enum class AccessibilityState : uint32_t
+{
+  ENABLED = 0,
+  SELECTED,
+  CHECKED,
+  BUSY,
+  EXPANDED,
+  MAX_COUNT
+};
+using AccessibilityStates = Accessibility::EnumBitSet<AccessibilityState, AccessibilityState::MAX_COUNT>;
+
+constexpr const uint32_t ROLE_START_INDEX = 200;
+/**
+ * @brief AccessibilityRole represents the purpose of a control.
+ */
+enum class AccessibilityRole : uint32_t
+{
+  ADJUSTABLE = ROLE_START_INDEX,
+  ALERT,
+  BUTTON,
+  CHECK_BOX,
+  COMBO_BOX,
+  CONTAINER,
+  DIALOG,
+  ENTRY,
+  HEADER,
+  IMAGE,
+  LINK,
+  LIST,
+  LIST_ITEM,
+  MENU,
+  MENU_BAR,
+  MENU_ITEM,
+  NONE,
+  PASSWORD_TEXT,
+  POPUP_MENU,
+  PROGRESS_BAR,
+  RADIO_BUTTON,
+  SCROLL_BAR,
+  SPIN_BUTTON,
+  TAB,
+  TAB_LIST,
+  TEXT,
+  TOGGLE_BUTTON,
+  TOOL_BAR,
+  MAX_COUNT
+};
 
 /**
  * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
@@ -64,6 +115,18 @@ protected:
   void UnregisterPositionPropertyNotification();
 
   /**
+   * @brief Registers PropertySet signal to notify when ACCESSIBILITY_NAME or ACCESSIBILITY_DESCRIPTION is changed.
+   * Note that those two signals only need for highlighted control. So, let us ensure to connect PropertySet signal
+   * only if control has been grabbed.
+   */
+  void RegisterPropertySetSignal();
+
+  /**
+   * @brief Unregisters PropertySet signal to notify when ACCESSIBILITY_NAME or ACCESSIBILITY_DESCRIPTION is changed.
+   */
+  void UnregisterPropertySetSignal();
+
+  /**
    * @brief Check if the actor is showing
    * @return True if the actor is showing
    */
@@ -98,6 +161,11 @@ public:
   virtual std::string GetDescriptionRaw() const;
 
   /**
+   * @copydoc Dali::Accessibility::Accessible::GetValue()
+   */
+  std::string GetValue() const override;
+
+  /**
    * @copydoc Dali::Accessibility::Accessible::GetRole()
    */
   Dali::Accessibility::Role GetRole() const override;
@@ -178,6 +246,11 @@ public:
   std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
 
   /**
+   * @copydoc Dali::Accessibility::Component::IsScrollable()
+   */
+  bool IsScrollable() const override;
+
+  /**
    * @copydoc Dali::Accessibility::Accessible::GetStates()
    */
   virtual Dali::Accessibility::States CalculateStates();
@@ -209,6 +282,22 @@ public:
    * @return The Last object position
    */
   Vector2 GetLastPosition() const;
+
+  /**
+   * @brief Handles AcessibilityState property change; Only called when the control is highlighted.
+   */
+  void OnStatePropertySet(AccessibilityStates newStates);
+
+private:
+  /**
+   * @brief Appliys relavant accessibility properties to AT-SPI states.
+   */
+  void ApplyAccessibilityProps(Dali::Accessibility::States& states);
+
+  /**
+   * @brief Grabs snapshot of previous state when the control is highlighted.
+   */
+  AccessibilityStates mStatesSnapshot;
 };
 
 } // namespace Dali::Toolkit::DevelControl
index e3263fc..7f82f47 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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.
@@ -197,11 +197,16 @@ Toolkit::DevelControl::AccessibilityDoGestureSignalType& AccessibilityDoGestureS
   return GetControlImplementation(control).mAccessibilityDoGestureSignal;
 }
 
+Toolkit::DevelControl::AccessibilityActionSignalType& AccessibilityActionSignal(Toolkit::Control control)
+{
+  return GetControlImplementation(control).mAccessibilityActionSignal;
+}
+
 void AppendAccessibilityRelation(Toolkit::Control control, Dali::Actor destination, Dali::Accessibility::RelationType relation)
 {
   if(auto destinationAccessible = Accessibility::Accessible::Get(destination))
   {
-    GetControlImplementation(control).mAccessibilityRelations[relation].insert(destinationAccessible);
+    GetControlImplementation(control).mAccessibilityProps.relations[relation].insert(destinationAccessible);
   }
 }
 
@@ -209,7 +214,7 @@ void RemoveAccessibilityRelation(Toolkit::Control control, Dali::Actor destinati
 {
   if(auto destinationAccessible = Accessibility::Accessible::Get(destination))
   {
-    auto& relations = GetControlImplementation(control).mAccessibilityRelations;
+    auto& relations = GetControlImplementation(control).mAccessibilityProps.relations;
 
     relations[relation].erase(destinationAccessible);
 
@@ -222,7 +227,7 @@ void RemoveAccessibilityRelation(Toolkit::Control control, Dali::Actor destinati
 
 std::vector<Accessibility::Relation> GetAccessibilityRelations(Toolkit::Control control)
 {
-  const auto&                          relations = GetControlImplementation(control).mAccessibilityRelations;
+  const auto&                          relations = GetControlImplementation(control).mAccessibilityProps.relations;
   std::vector<Accessibility::Relation> result;
 
   for(auto& relation : relations)
@@ -238,7 +243,7 @@ std::vector<Accessibility::Relation> GetAccessibilityRelations(Toolkit::Control
 
 void ClearAccessibilityRelations(Toolkit::Control control)
 {
-  GetControlImplementation(control).mAccessibilityRelations.clear();
+  GetControlImplementation(control).mAccessibilityProps.relations.clear();
 }
 
 void AppendAccessibilityAttribute(Toolkit::Control control, const std::string& key, const std::string& value)
index 81deec1..2de2e4d 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_CONTROL_DEVEL_H
 
 /*
- * 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.
@@ -68,6 +68,9 @@ typedef Signal<void(std::string&)> AccessibilityGetDescriptionSignalType;
 /// @brief AccessibilityDoGesture signal type.
 typedef Signal<void(std::pair<Dali::Accessibility::GestureInfo, bool>&)> AccessibilityDoGestureSignalType;
 
+/// @brief AccessibilityAction signal type.
+typedef Signal<bool(const Dali::Accessibility::ActionInfo&)> AccessibilityActionSignalType;
+
 enum State
 {
   NORMAL,
@@ -161,7 +164,7 @@ enum
   ACCESSIBILITY_DESCRIPTION,
 
   /**
-   * @brief Current translation domain for accessibility clients.
+   * @brief Deprecated. Current translation domain for accessibility clients.
    * @details Name "accessibilityTranslationDomain", type Property::STRING.
    */
   ACCESSIBILITY_TRANSLATION_DOMAIN,
@@ -169,9 +172,8 @@ enum
   /**
    * @brief Role being performed in accessibility hierarchy.
    * @details Name "accessibilityRole", type Property::INTEGER.
-   * @note Property is stored as INTEGER, however its interpretaton
-   * depend on enumeration Dali::Accessibility::Role and should be read and written
-   * with usage of enumerated values.
+   * @note It gets integer value of AccessibilityRole enum then interprets to Dali::Accessibility::Role when requested by AT-SPI.
+   *  Note that setting Dali::Accessibility::Role value is still accepted for backward compatibility but not preferred.
    * @see Dali::Accessibility::Role
    */
   ACCESSIBILITY_ROLE,
@@ -217,6 +219,30 @@ enum
    * It will also appear in the AT-SPI tree under the key "automationId".
    */
   AUTOMATION_ID,
+
+  /**
+   * @brief The accessibility value represented by the control. For example, "60%" for a slider object.
+   * @details Name "accessibilityValue", type Property::STRING.
+   */
+  ACCESSIBILITY_VALUE,
+
+  /**
+   * @brief Indicates the accessibility services treat the control as scrollable.
+   * @details Name "accessibilityScrollable", type Property::BOOLEAN.
+   */
+  ACCESSIBILITY_SCROLLABLE,
+
+  /**
+   * @brief Bitset integer of AccessibilityState which describes the current state of a control.
+   * @details Name "accessibilityStates", type Property::INTEGER.
+   */
+  ACCESSIBILITY_STATES,
+
+  /**
+   * @brief Indicates the accessibility services treat the controla as modal.
+   * @details Name "accessibilityIsModal", type Property::BOOLEAN.
+   */
+  ACCESSIBILITY_IS_MODAL,
 };
 
 } // namespace Property
@@ -484,6 +510,12 @@ DALI_TOOLKIT_API AccessibilityGetDescriptionSignalType& AccessibilityGetDescript
 DALI_TOOLKIT_API AccessibilityDoGestureSignalType& AccessibilityDoGestureSignal(Toolkit::Control control);
 
 /**
+ * @brief The signal is emitted when accessibility client call "DoAction" or "DoActionName" method via IPC mechanism.
+ * @return The signal to connect to
+ */
+DALI_TOOLKIT_API AccessibilityActionSignalType& AccessibilityActionSignal(Toolkit::Control control);
+
+/**
  * @brief The method allows connection with other actor with usage of concrete accessibility relation type.
  *
  * @param control object to append attribute to
index 24cd3fb..4cde9b0 100644 (file)
@@ -196,24 +196,56 @@ void MoveVisual(RegisteredVisualContainer::Iterator sourceIter, RegisteredVisual
  * @param[in] attributes The attributes with which to perfrom this action.
  * @return true if action has been accepted by this control
  */
-const char* ACTION_ACCESSIBILITY_ACTIVATED         = "accessibilityActivated";
-const char* ACTION_ACCESSIBILITY_READING_CANCELLED = "ReadingCancelled";
-const char* ACTION_ACCESSIBILITY_READING_PAUSED    = "ReadingPaused";
-const char* ACTION_ACCESSIBILITY_READING_RESUMED   = "ReadingResumed";
-const char* ACTION_ACCESSIBILITY_READING_SKIPPED   = "ReadingSkipped";
-const char* ACTION_ACCESSIBILITY_READING_STOPPED   = "ReadingStopped";
+constexpr const char* ACTION_ACCESSIBILITY_ACTIVATE  = "activate";
+constexpr const char* ACTION_ACCESSIBILITY_ESCAPE    = "escape";
+constexpr const char* ACTION_ACCESSIBILITY_INCREMENT = "increment";
+constexpr const char* ACTION_ACCESSIBILITY_DECREMENT = "decrement";
 
-static bool DoAction(BaseObject* object, const std::string& actionName, const Property::Map& attributes)
+// Legacy actions
+constexpr const char* ACTION_ACCESSIBILITY_READING_CANCELLED = "ReadingCancelled";
+constexpr const char* ACTION_ACCESSIBILITY_READING_PAUSED    = "ReadingPaused";
+constexpr const char* ACTION_ACCESSIBILITY_READING_RESUMED   = "ReadingResumed";
+constexpr const char* ACTION_ACCESSIBILITY_READING_SKIPPED   = "ReadingSkipped";
+constexpr const char* ACTION_ACCESSIBILITY_READING_STOPPED   = "ReadingStopped";
+
+bool PerformAccessibilityAction(Toolkit::Control control, const std::string& actionName, const Property::Map& attributes)
 {
-  bool ret = true;
+  using Dali::Accessibility::ActionType;
+  DALI_ASSERT_DEBUG(control);
+  DALI_ASSERT_DEBUG(!DevelControl::AccessibilityActionSignal(control).Empty());
 
-  Dali::BaseHandle handle(object);
+  ActionType action = ActionType::MAX_COUNT;
+  if(actionName == ACTION_ACCESSIBILITY_ACTIVATE)
+  {
+    action = ActionType::ACTIVATE;
+  }
+  else if(actionName == ACTION_ACCESSIBILITY_ESCAPE)
+  {
+    action = ActionType::ESCAPE;
+  }
+  else if(actionName == ACTION_ACCESSIBILITY_INCREMENT)
+  {
+    action = ActionType::INCREMENT;
+  }
+  else if(actionName == ACTION_ACCESSIBILITY_DECREMENT)
+  {
+    action = ActionType::DECREMENT;
+  }
 
-  Toolkit::Control control = Toolkit::Control::DownCast(handle);
+  if(action != ActionType::MAX_COUNT)
+  {
+    bool success = DevelControl::AccessibilityActionSignal(control).Emit({action, Dali::Actor{}});
+    DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Performed AccessibilityAction: %s, success : %d\n", actionName.c_str(), success);
+    return success;
+  }
 
-  DALI_ASSERT_ALWAYS(control);
+  return false;
+}
 
-  if(0 == strcmp(actionName.c_str(), ACTION_ACCESSIBILITY_ACTIVATED) || actionName == "activate")
+bool PerformLegacyAccessibilityAction(Toolkit::Control control, const std::string& actionName)
+{
+  bool ret = true;
+  if(0 == strcmp(actionName.c_str(), ACTION_ACCESSIBILITY_ACTIVATE))
   {
     // if cast succeeds there is an implementation so no need to check
     if(!DevelControl::AccessibilityActivateSignal(control).Empty())
@@ -269,9 +301,42 @@ static bool DoAction(BaseObject* object, const std::string& actionName, const Pr
   {
     ret = false;
   }
+
+  if(ret)
+  {
+    DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Performed Legacy AccessibilityAction: %s\n", actionName.c_str());
+  }
   return ret;
 }
 
+bool DoAccessibilityAction(BaseObject* object, const std::string& actionName, const Property::Map& attributes)
+{
+  Dali::BaseHandle handle(object);
+
+  Toolkit::Control control = Toolkit::Control::DownCast(handle);
+
+  DALI_ASSERT_ALWAYS(control);
+
+  if(!DevelControl::AccessibilityActionSignal(control).Empty())
+  {
+    return PerformAccessibilityAction(control, actionName, attributes);
+  }
+
+  // Fall back to legacy action is no ActionSignal is connected
+  return PerformLegacyAccessibilityAction(control, actionName);
+}
+
+bool DoLegacyAccessibilityAction(BaseObject* object, const std::string& actionName, const Property::Map& attributes)
+{
+  Dali::BaseHandle handle(object);
+
+  Toolkit::Control control = Toolkit::Control::DownCast(handle);
+
+  DALI_ASSERT_ALWAYS(control);
+
+  return PerformLegacyAccessibilityAction(control, actionName);
+}
+
 /**
  * Connects a callback function with the object's signals.
  * @param[in] object The object providing the signal.
@@ -373,13 +438,20 @@ SignalConnectorType registerSignal8(typeRegistration, SIGNAL_GET_NAME, &DoConnec
 SignalConnectorType registerSignal9(typeRegistration, SIGNAL_GET_DESCRIPTION, &DoConnectSignal);
 SignalConnectorType registerSignal10(typeRegistration, SIGNAL_DO_GESTURE, &DoConnectSignal);
 
-TypeAction registerAction1(typeRegistration, "activate", &DoAction);
-TypeAction registerAction2(typeRegistration, ACTION_ACCESSIBILITY_ACTIVATED, &DoAction);
-TypeAction registerAction3(typeRegistration, ACTION_ACCESSIBILITY_READING_SKIPPED, &DoAction);
-TypeAction registerAction4(typeRegistration, ACTION_ACCESSIBILITY_READING_CANCELLED, &DoAction);
-TypeAction registerAction5(typeRegistration, ACTION_ACCESSIBILITY_READING_STOPPED, &DoAction);
-TypeAction registerAction6(typeRegistration, ACTION_ACCESSIBILITY_READING_PAUSED, &DoAction);
-TypeAction registerAction7(typeRegistration, ACTION_ACCESSIBILITY_READING_RESUMED, &DoAction);
+// === Accessibility Actions === START
+TypeAction registerAction1(typeRegistration, ACTION_ACCESSIBILITY_ACTIVATE, &DoAccessibilityAction);
+TypeAction registerAction2(typeRegistration, ACTION_ACCESSIBILITY_ESCAPE, &DoAccessibilityAction);
+TypeAction registerAction3(typeRegistration, ACTION_ACCESSIBILITY_INCREMENT, &DoAccessibilityAction);
+TypeAction registerAction4(typeRegistration, ACTION_ACCESSIBILITY_DECREMENT, &DoAccessibilityAction);
+// === Accessibility Actions === END
+
+// === Legacy Accessibility Actions === START
+TypeAction registerAction5(typeRegistration, ACTION_ACCESSIBILITY_READING_SKIPPED, &DoLegacyAccessibilityAction);
+TypeAction registerAction6(typeRegistration, ACTION_ACCESSIBILITY_READING_CANCELLED, &DoLegacyAccessibilityAction);
+TypeAction registerAction7(typeRegistration, ACTION_ACCESSIBILITY_READING_STOPPED, &DoLegacyAccessibilityAction);
+TypeAction registerAction8(typeRegistration, ACTION_ACCESSIBILITY_READING_PAUSED, &DoLegacyAccessibilityAction);
+TypeAction registerAction9(typeRegistration, ACTION_ACCESSIBILITY_READING_RESUMED, &DoLegacyAccessibilityAction);
+// === Legacy Accessibility Actions === END
 
 DALI_TYPE_REGISTRATION_END()
 
@@ -475,6 +547,10 @@ const PropertyRegistration Control::Impl::PROPERTY_23(typeRegistration, "accessi
 const PropertyRegistration Control::Impl::PROPERTY_24(typeRegistration, "clockwiseFocusableActorId",      Toolkit::DevelControl::Property::CLOCKWISE_FOCUSABLE_ACTOR_ID,     Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
 const PropertyRegistration Control::Impl::PROPERTY_25(typeRegistration, "counterClockwiseFocusableActorId", Toolkit::DevelControl::Property::COUNTER_CLOCKWISE_FOCUSABLE_ACTOR_ID, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
 const PropertyRegistration Control::Impl::PROPERTY_26(typeRegistration, "automationId",                   Toolkit::DevelControl::Property::AUTOMATION_ID,                    Property::STRING,  &Control::Impl::SetProperty, &Control::Impl::GetProperty);
+const PropertyRegistration Control::Impl::PROPERTY_27(typeRegistration, "accessibilityValue",             Toolkit::DevelControl::Property::ACCESSIBILITY_VALUE,              Property::STRING,  &Control::Impl::SetProperty, &Control::Impl::GetProperty);
+const PropertyRegistration Control::Impl::PROPERTY_28(typeRegistration, "accessibilityScrollable",        Toolkit::DevelControl::Property::ACCESSIBILITY_SCROLLABLE,         Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
+const PropertyRegistration Control::Impl::PROPERTY_29(typeRegistration, "accessibilityStates",            Toolkit::DevelControl::Property::ACCESSIBILITY_STATES,             Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
+const PropertyRegistration Control::Impl::PROPERTY_30(typeRegistration, "accessibilityIsModal",           Toolkit::DevelControl::Property::ACCESSIBILITY_IS_MODAL,           Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
 
 // clang-format on
 
@@ -516,6 +592,7 @@ Control::Impl::Impl(Control& controlImpl)
   mDispatchKeyEvents(true)
 {
   Dali::Accessibility::Accessible::RegisterExternalAccessibleGetter(&ExternalAccessibleGetter);
+  mAccessibilityProps.states[DevelControl::AccessibilityState::ENABLED] = true;
 }
 
 Control::Impl::~Impl()
@@ -631,6 +708,63 @@ void Control::Impl::UnregisterAccessibilityPositionPropertyNotification()
   mIsAccessibilityPositionPropertyNotificationSet = false;
 }
 
+void Control::Impl::RegisterAccessibilityPropertySetSignal()
+{
+  if(mIsAccessibilityPropertySetSignalRegistered)
+  {
+    return;
+  }
+  mControlImpl.Self().PropertySetSignal().Connect(this, &Control::Impl::OnAccessibilityPropertySet);
+  mIsAccessibilityPropertySetSignalRegistered = true;
+}
+
+void Control::Impl::UnregisterAccessibilityPropertySetSignal()
+{
+  if(!mIsAccessibilityPropertySetSignalRegistered)
+  {
+    return;
+  }
+  mControlImpl.Self().PropertySetSignal().Disconnect(this, &Control::Impl::OnAccessibilityPropertySet);
+  mIsAccessibilityPropertySetSignalRegistered = false;
+}
+
+void Control::Impl::OnAccessibilityPropertySet(Dali::Handle& handle, Dali::Property::Index index, const Dali::Property::Value& value)
+{
+  auto accessible = GetAccessibleObject();
+  if(DALI_LIKELY(accessible))
+  {
+    if(mAccessibilityGetNameSignal.Empty())
+    {
+      if(index == DevelControl::Property::ACCESSIBILITY_NAME || (mAccessibilityProps.name.empty() && index == accessible->GetNamePropertyIndex()))
+      {
+        accessible->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::NAME);
+        return;
+      }
+    }
+
+    if(mAccessibilityGetDescriptionSignal.Empty())
+    {
+      if(index == DevelControl::Property::ACCESSIBILITY_DESCRIPTION || (mAccessibilityProps.description.empty() && index == accessible->GetDescriptionPropertyIndex()))
+      {
+        accessible->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION);
+        return;
+      }
+    }
+
+    if(index == DevelControl::Property::ACCESSIBILITY_VALUE)
+    {
+      accessible->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE);
+      return;
+    }
+
+    if(index == DevelControl::Property::ACCESSIBILITY_STATES)
+    {
+      accessible->OnStatePropertySet(mAccessibilityProps.states);
+      return;
+    }
+  }
+}
+
 // Gesture Detection Methods
 void Control::Impl::PinchDetected(Actor actor, const PinchGesture& pinch)
 {
@@ -1290,7 +1424,7 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const
         std::string name;
         if(value.Get(name))
         {
-          controlImpl.mImpl->mAccessibilityName = name;
+          controlImpl.mImpl->mAccessibilityProps.name = std::move(name);
         }
         break;
       }
@@ -1300,27 +1434,17 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const
         std::string text;
         if(value.Get(text))
         {
-          controlImpl.mImpl->mAccessibilityDescription = text;
-        }
-        break;
-      }
-
-      case Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN:
-      {
-        std::string text;
-        if(value.Get(text))
-        {
-          controlImpl.mImpl->mAccessibilityTranslationDomain = text;
+          controlImpl.mImpl->mAccessibilityProps.description = std::move(text);
         }
         break;
       }
 
       case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE:
       {
-        Dali::Accessibility::Role role;
+        int32_t role;
         if(value.Get(role))
         {
-          controlImpl.mImpl->mAccessibilityRole = role;
+          controlImpl.mImpl->mAccessibilityProps.role = role;
         }
         break;
       }
@@ -1330,7 +1454,7 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const
         bool highlightable;
         if(value.Get(highlightable))
         {
-          controlImpl.mImpl->mAccessibilityHighlightable = highlightable;
+          controlImpl.mImpl->mAccessibilityProps.isHighlightable = highlightable;
         }
         break;
       }
@@ -1350,7 +1474,7 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const
         bool hidden;
         if(value.Get(hidden))
         {
-          controlImpl.mImpl->mAccessibilityHidden = hidden;
+          controlImpl.mImpl->mAccessibilityProps.isHidden = hidden;
 
           auto* accessible = controlImpl.GetAccessibleObject();
           if(DALI_LIKELY(accessible))
@@ -1388,7 +1512,47 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const
         std::string automationId;
         if(value.Get(automationId))
         {
-          controlImpl.mImpl->mAutomationId = automationId;
+          controlImpl.mImpl->mAccessibilityProps.automationId = std::move(automationId);
+        }
+        break;
+      }
+
+      case Toolkit::DevelControl::Property::ACCESSIBILITY_VALUE:
+      {
+        std::string accessibilityValue;
+        if(value.Get(accessibilityValue))
+        {
+          controlImpl.mImpl->mAccessibilityProps.value = std::move(accessibilityValue);
+        }
+        break;
+      }
+
+      case Toolkit::DevelControl::Property::ACCESSIBILITY_SCROLLABLE:
+      {
+        bool isScrollable;
+        if(value.Get(isScrollable))
+        {
+          controlImpl.mImpl->mAccessibilityProps.isScrollable = isScrollable;
+        }
+        break;
+      }
+
+      case Toolkit::DevelControl::Property::ACCESSIBILITY_STATES:
+      {
+        int32_t states;
+        if(value.Get(states))
+        {
+          controlImpl.mImpl->mAccessibilityProps.states = Toolkit::DevelControl::AccessibilityStates{static_cast<uint32_t>(states)};
+        }
+        break;
+      }
+
+      case Toolkit::DevelControl::Property::ACCESSIBILITY_IS_MODAL:
+      {
+        bool isModal;
+        if(value.Get(isModal))
+        {
+          controlImpl.mImpl->mAccessibilityProps.isModal = isModal;
         }
         break;
       }
@@ -1507,31 +1671,25 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i
 
       case Toolkit::DevelControl::Property::ACCESSIBILITY_NAME:
       {
-        value = controlImpl.mImpl->mAccessibilityName;
+        value = controlImpl.mImpl->mAccessibilityProps.name;
         break;
       }
 
       case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION:
       {
-        value = controlImpl.mImpl->mAccessibilityDescription;
-        break;
-      }
-
-      case Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN:
-      {
-        value = controlImpl.mImpl->mAccessibilityTranslationDomain;
+        value = controlImpl.mImpl->mAccessibilityProps.description;
         break;
       }
 
       case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE:
       {
-        value = Property::Value(controlImpl.mImpl->mAccessibilityRole);
+        value = controlImpl.mImpl->mAccessibilityProps.role;
         break;
       }
 
       case Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE:
       {
-        value = controlImpl.mImpl->mAccessibilityHighlightable;
+        value = controlImpl.mImpl->mAccessibilityProps.isHighlightable;
         break;
       }
 
@@ -1543,7 +1701,7 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i
 
       case Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN:
       {
-        value = controlImpl.mImpl->mAccessibilityHidden;
+        value = controlImpl.mImpl->mAccessibilityProps.isHidden;
         break;
       }
 
@@ -1561,7 +1719,31 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i
 
       case Toolkit::DevelControl::Property::AUTOMATION_ID:
       {
-        value = controlImpl.mImpl->mAutomationId;
+        value = controlImpl.mImpl->mAccessibilityProps.automationId;
+        break;
+      }
+
+      case Toolkit::DevelControl::Property::ACCESSIBILITY_VALUE:
+      {
+        value = controlImpl.mImpl->mAccessibilityProps.value;
+        break;
+      }
+
+      case Toolkit::DevelControl::Property::ACCESSIBILITY_SCROLLABLE:
+      {
+        value = controlImpl.mImpl->mAccessibilityProps.isScrollable;
+        break;
+      }
+
+      case Toolkit::DevelControl::Property::ACCESSIBILITY_STATES:
+      {
+        value = static_cast<int32_t>(controlImpl.mImpl->mAccessibilityProps.states.GetRawData32());
+        break;
+      }
+
+      case Toolkit::DevelControl::Property::ACCESSIBILITY_IS_MODAL:
+      {
+        value = controlImpl.mImpl->mAccessibilityProps.isModal;
         break;
       }
     }
index 0aa3510..b74efef 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_CONTROL_DATA_IMPL_H
 
 /*
- * 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.
@@ -482,10 +482,29 @@ private:
   void RegisterAccessibilityPositionPropertyNotification();
 
   /**
-   * @brief Remove property notification added by RegisterPropertyNotification
+   * @brief Remove property notification added by RegisterAccessibilityPositionPropertyNotification
    */
   void UnregisterAccessibilityPositionPropertyNotification();
 
+  /**
+   * @brief Register PropertySet signal to check highlighted object name and description
+   */
+  void RegisterAccessibilityPropertySetSignal();
+
+  /**
+   * @brief Remove PropertySet signal added by RegisterAccessibilityPropertySetSignal
+   */
+  void UnregisterAccessibilityPropertySetSignal();
+
+  /**
+   * @brief Signal callback of PropertySet when this object is become highlighted, so RegisterAccessibilityPropertySetSignal called.
+   *
+   * @param[in] handle Handle of the control.
+   * @param[in] index The index of property.
+   * @param[in] value The value of property.
+   */
+  void OnAccessibilityPropertySet(Dali::Handle& handle, Dali::Property::Index index, const Dali::Property::Value& value);
+
 public:
   Control&            mControlImpl;
   DevelControl::State mState;
@@ -522,19 +541,26 @@ public:
   Toolkit::DevelControl::AccessibilityGetDescriptionSignalType mAccessibilityGetDescriptionSignal;
   Toolkit::DevelControl::AccessibilityDoGestureSignalType      mAccessibilityDoGestureSignal;
 
-  std::string mAccessibilityName;
-  std::string mAccessibilityDescription;
-  std::string mAccessibilityTranslationDomain;
-  std::string mAutomationId;
+  Toolkit::DevelControl::AccessibilityActionSignalType mAccessibilityActionSignal;
 
-  bool mAccessibilityHighlightable = false;
-  bool mAccessibilityHidden        = false;
-  bool mAccessibleCreatable        = true;
-
-  Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN;
-
-  std::map<Dali::Accessibility::RelationType, std::set<Accessibility::Accessible*>> mAccessibilityRelations;
-  std::unique_ptr<Toolkit::DevelControl::ControlAccessible>                         mAccessibleObject;
+  struct AccessibilityProps
+  {
+    std::string                                                                       name{};
+    std::string                                                                       description{};
+    std::string                                                                       value{};
+    std::string                                                                       automationId{};
+    int32_t                                                                           role{static_cast<int32_t>(Dali::Accessibility::Role::UNKNOWN)};
+    DevelControl::AccessibilityStates                                                 states{};
+    std::map<Dali::Accessibility::RelationType, std::set<Accessibility::Accessible*>> relations;
+    Property::Map                                                                     extraAttributes{};
+    bool                                                                              isHighlightable{false};
+    bool                                                                              isHidden{false};
+    bool                                                                              isScrollable{false};
+    bool                                                                              isModal{false};
+  } mAccessibilityProps;
+
+  bool                                                      mAccessibleCreatable = true;
+  std::unique_ptr<Toolkit::DevelControl::ControlAccessible> mAccessibleObject;
 
   // Gesture Detection
   PinchGestureDetector     mPinchGestureDetector;
@@ -584,10 +610,15 @@ public:
   static const PropertyRegistration PROPERTY_24;
   static const PropertyRegistration PROPERTY_25;
   static const PropertyRegistration PROPERTY_26;
+  static const PropertyRegistration PROPERTY_27;
+  static const PropertyRegistration PROPERTY_28;
+  static const PropertyRegistration PROPERTY_29;
+  static const PropertyRegistration PROPERTY_30;
 
 private:
   // Accessibility - notification for highlighted object to check if it is showing.
   bool                                        mIsAccessibilityPositionPropertyNotificationSet{false};
+  bool                                        mIsAccessibilityPropertySetSignalRegistered{false};
   Dali::PropertyNotification                  mAccessibilityPositionNotification;
   Dali::Accessibility::ScreenRelativeMoveType mAccessibilityLastScreenRelativeMoveType{Accessibility::ScreenRelativeMoveType::OUTSIDE};
 };
index 1606bfb..b653a0f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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.
@@ -2024,7 +2024,6 @@ Dali::Accessibility::States Popup::PopupAccessible::CalculateStates()
   auto displayState = popup.GetProperty<std::string>(Toolkit::Popup::Property::DISPLAY_STATE);
 
   states[Dali::Accessibility::State::SHOWING] = (displayState == "SHOWN" || displayState == "SHOWING");
-  states[Dali::Accessibility::State::MODAL]   = true;
 
   return states;
 }
index 50d7d3d..8bc9151 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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.
@@ -57,7 +57,7 @@ namespace
 #define GET_LOCALE_TEXT(string) dgettext("dali-toolkit", string)
 #endif
 
-const char*   TEXT_SELECTION_POPUP_BUTTON_STYLE_NAME("TextSelectionPopupButton");
+const char*         TEXT_SELECTION_POPUP_BUTTON_STYLE_NAME("TextSelectionPopupButton");
 const Dali::Vector4 DEFAULT_OPTION_PRESSED_COLOR(Dali::Vector4(0.24f, 0.72f, 0.8f, 1.0f));
 const float         DEFAULT_OPTION_PRESSED_CORNER_RADIUS = 0.0f;
 const Dali::Vector4 DEFAULT_LABEL_PADDING(Dali::Vector4(24.0f, 24.0f, 14.0f, 14.0f));
@@ -105,31 +105,31 @@ BaseHandle Create()
 
 DALI_TYPE_REGISTRATION_BEGIN(Toolkit::TextSelectionPopup, Toolkit::Control, Create);
 
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupMaxSize",              VECTOR2, POPUP_MAX_SIZE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupMinSize",              VECTOR2, POPUP_MIN_SIZE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "optionMaxSize",             VECTOR2, OPTION_MAX_SIZE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "optionMinSize",             VECTOR2, OPTION_MIN_SIZE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "optionDividerSize",         VECTOR2, OPTION_DIVIDER_SIZE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "optionDividerPadding",      VECTOR4, OPTION_DIVIDER_PADDING)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupClipboardButtonImage", STRING,  POPUP_CLIPBOARD_BUTTON_ICON_IMAGE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupCutButtonImage",       STRING,  POPUP_CUT_BUTTON_ICON_IMAGE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupCopyButtonImage",      STRING,  POPUP_COPY_BUTTON_ICON_IMAGE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupPasteButtonImage",     STRING,  POPUP_PASTE_BUTTON_ICON_IMAGE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupSelectButtonImage",    STRING,  POPUP_SELECT_BUTTON_ICON_IMAGE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupSelectAllButtonImage", STRING,  POPUP_SELECT_ALL_BUTTON_ICON_IMAGE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupDividerColor",         VECTOR4, POPUP_DIVIDER_COLOR)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupIconColor",            VECTOR4, POPUP_ICON_COLOR)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupPressedColor",         VECTOR4, POPUP_PRESSED_COLOR)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupPressedCornerRadius",  FLOAT,   POPUP_PRESSED_CORNER_RADIUS)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupPressedImage",         STRING,  POPUP_PRESSED_IMAGE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupFadeInDuration",       FLOAT,   POPUP_FADE_IN_DURATION)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupFadeOutDuration",      FLOAT,   POPUP_FADE_OUT_DURATION)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "backgroundBorder",          MAP,     BACKGROUND_BORDER)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "background",                MAP,     BACKGROUND)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "labelMinimumSize",          VECTOR2, LABEL_MINIMUM_SIZE)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "labelPadding",              VECTOR4, LABEL_PADDING)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "labelTextVisual",           MAP,     LABEL_TEXT_VISUAL)
-DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "enableScrollBar",           BOOLEAN, ENABLE_SCROLL_BAR)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupMaxSize", VECTOR2, POPUP_MAX_SIZE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupMinSize", VECTOR2, POPUP_MIN_SIZE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "optionMaxSize", VECTOR2, OPTION_MAX_SIZE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "optionMinSize", VECTOR2, OPTION_MIN_SIZE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "optionDividerSize", VECTOR2, OPTION_DIVIDER_SIZE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "optionDividerPadding", VECTOR4, OPTION_DIVIDER_PADDING)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupClipboardButtonImage", STRING, POPUP_CLIPBOARD_BUTTON_ICON_IMAGE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupCutButtonImage", STRING, POPUP_CUT_BUTTON_ICON_IMAGE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupCopyButtonImage", STRING, POPUP_COPY_BUTTON_ICON_IMAGE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupPasteButtonImage", STRING, POPUP_PASTE_BUTTON_ICON_IMAGE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupSelectButtonImage", STRING, POPUP_SELECT_BUTTON_ICON_IMAGE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupSelectAllButtonImage", STRING, POPUP_SELECT_ALL_BUTTON_ICON_IMAGE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupDividerColor", VECTOR4, POPUP_DIVIDER_COLOR)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupIconColor", VECTOR4, POPUP_ICON_COLOR)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupPressedColor", VECTOR4, POPUP_PRESSED_COLOR)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupPressedCornerRadius", FLOAT, POPUP_PRESSED_CORNER_RADIUS)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupPressedImage", STRING, POPUP_PRESSED_IMAGE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupFadeInDuration", FLOAT, POPUP_FADE_IN_DURATION)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "popupFadeOutDuration", FLOAT, POPUP_FADE_OUT_DURATION)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "backgroundBorder", MAP, BACKGROUND_BORDER)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "background", MAP, BACKGROUND)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "labelMinimumSize", VECTOR2, LABEL_MINIMUM_SIZE)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "labelPadding", VECTOR4, LABEL_PADDING)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "labelTextVisual", MAP, LABEL_TEXT_VISUAL)
+DALI_PROPERTY_REGISTRATION(Toolkit, TextSelectionPopup, "enableScrollBar", BOOLEAN, ENABLE_SCROLL_BAR)
 
 DALI_TYPE_REGISTRATION_END()
 
@@ -164,7 +164,7 @@ void TextSelectionPopup::SetProperty(BaseObject* object, Property::Index index,
 
 Property::Value TextSelectionPopup::GetProperty(BaseObject* object, Property::Index index)
 {
-  Property::Value value;
+  Property::Value             value;
   Toolkit::TextSelectionPopup selectionPopup = Toolkit::TextSelectionPopup::DownCast(Dali::BaseHandle(object));
 
   if(selectionPopup)
@@ -208,7 +208,7 @@ void TextSelectionPopup::GetProperties(Property::Map& properties)
   map.Insert(Toolkit::TextSelectionPopup::Property::POPUP_PRESSED_COLOR, mPressedColor);
   map.Insert(Toolkit::TextSelectionPopup::Property::POPUP_PRESSED_CORNER_RADIUS, mPressedCornerRadius);
 
-  Property::Map backgroundMap;
+  Property::Map         backgroundMap;
   Toolkit::Visual::Base backgroundVisual = DevelControl::GetVisual(*this, Toolkit::Control::Property::BACKGROUND);
   if(backgroundVisual)
   {
@@ -216,7 +216,7 @@ void TextSelectionPopup::GetProperties(Property::Map& properties)
   }
   map.Insert(Toolkit::TextSelectionPopup::Property::BACKGROUND, backgroundMap);
 
-  Property::Map borderMap;
+  Property::Map         borderMap;
   Toolkit::Visual::Base borderVisual = DevelControl::GetVisual(*this, Toolkit::TextSelectionPopup::Property::BACKGROUND_BORDER);
   if(borderVisual)
   {
@@ -281,20 +281,6 @@ void TextSelectionPopup::OnInitialize()
   self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::DIALOG);
 }
 
-DevelControl::ControlAccessible* TextSelectionPopup::CreateAccessibleObject()
-{
-  return new TextSelectionPopupAccessible(Self());
-}
-
-Dali::Accessibility::States TextSelectionPopup::TextSelectionPopupAccessible::CalculateStates()
-{
-  auto states = ControlAccessible::CalculateStates();
-
-  states[Dali::Accessibility::State::MODAL] = true;
-
-  return states;
-}
-
 void TextSelectionPopup::HideAnimationFinished(Animation& animation)
 {
   Actor self = Self();
index b3739d6..d2e6a30 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_INTERNAL_TEXT_SELECTION_POPUP_H
 
 /*
- * 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.
@@ -150,11 +150,6 @@ private: // From Control
    */
   void OnInitialize() override;
 
-  /**
-   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
-   */
-  DevelControl::ControlAccessible* CreateAccessibleObject() override;
-
 private: // Implementation
   void HideAnimationFinished(Animation& animation);
 
@@ -291,7 +286,6 @@ private: // Implementation
    */
   void CreateBackground(Property::Map& propertyMap);
 
-
   /**
    * Construct a new TextField.
    */
@@ -305,17 +299,6 @@ private: // Implementation
 protected:
   struct PropertyHandler;
 
-  class TextSelectionPopupAccessible : public DevelControl::ControlAccessible
-  {
-  public:
-    using DevelControl::ControlAccessible::ControlAccessible;
-
-    /**
-     * @copydoc DevelControl::ControlAccessible::CalculateStates()
-     */
-    Dali::Accessibility::States CalculateStates() override;
-  };
-
 private:
   // Undefined copy constructor and assignment operators
   TextSelectionPopup(const TextSelectionPopup&);