[dali_2.3.42] Merge branch 'devel/master'
[platform/core/uifw/dali-adaptor.git] / dali / internal / accessibility / bridge / accessibility-common.h
index d9165f6..6f01428 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_INTERNAL_ATSPI_ACCESSIBILITY_COMMON_H
 
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 #include <string>
 
 // INTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/accessibility-impl.h>
-#include <dali/internal/accessibility/bridge/dbus-locators.h>
-#include <dali/internal/accessibility/bridge/dbus.h>
+#include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
+#include <dali/internal/accessibility/bridge/dbus/dbus-locators.h>
+#include <dali/internal/accessibility/bridge/dbus/dbus.h>
 #include <dali/public-api/dali-adaptor-common.h>
 
+// DBus names
+
 #define A11yDbusName "org.a11y.Bus"
-#define A11yDbusPath "/org/a11y/bus"
 #define A11yDbusStatusInterface "org.a11y.Status"
 #define AtspiDbusNameRegistry "org.a11y.atspi.Registry"
+#define DirectReadingDBusName "org.tizen.ScreenReader"
+#define DirectReadingDBusInterface "org.tizen.DirectReading"
+
+// DBus paths
+
+#define A11yDbusPath "/org/a11y/bus"
+#define AtspiDbusPathCache "/org/a11y/atspi/cache"
+#define AtspiDbusPathDec "/org/a11y/atspi/registry/deviceeventcontroller"
 #define AtspiDbusPathRegistry "/org/a11y/atspi/registry"
-#define AtspiDbusInterfaceRegistry "org.a11y.atspi.Registry"
 #define AtspiDbusPathRoot "/org/a11y/atspi/accessible/root"
-#define AtspiDbusInterfaceSocket "org.a11y.atspi.Socket"
 #define AtspiPath "/org/a11y/atspi/accessible"
-#define AtspiDbusInterfaceAccessible "org.a11y.atspi.Accessible"
-#define AtspiDbusInterfaceAction "org.a11y.atspi.Action"
-#define AtspiDbusInterfaceApplication "org.a11y.atspi.Application"
-#define AtspiDbusInterfaceCollection "org.a11y.atspi.Collection"
-#define AtspiDbusInterfaceComponent "org.a11y.atspi.Component"
-#define AtspiDbusInterfaceDocument "org.a11y.atspi.Document"
-#define AtspiDbusInterfaceEditableText "org.a11y.atspi.EditableText"
-#define AtspiDbusInterfaceEventKeyboard "org.a11y.atspi.Event.Keyboard"
-#define AtspiDbusInterfaceEventMouse "org.a11y.atspi.Event.Mouse"
-#define AtspiDbusInterfaceEventObject "org.a11y.atspi.Event.Object"
-#define AtspiDbusInterfaceHyperlink "org.a11y.atspi.Hyperlink"
-#define AtspiDbusInterfaceHypertext "org.a11y.atspi.Hypertext"
-#define AtspiDbusInterfaceImage "org.a11y.atspi.Image"
-#define AtspiDbusInterfaceSelection "org.a11y.atspi.Selection"
-#define AtspiDbusInterfaceTable "org.a11y.atspi.Table"
-#define AtspiDbusInterfaceTableCell "org.a11y.atspi.TableCell"
-#define AtspiDbusInterfaceText "org.a11y.atspi.Text"
-#define AtspiDbusInterfaceValue "org.a11y.atspi.Value"
-#define AtspiDbusInterfaceSocket "org.a11y.atspi.Socket"
-#define AtspiDbusInterfaceEventWindow "org.a11y.atspi.Event.Window"
-
-#define AtspiDbusPathDec "/org/a11y/atspi/registry/deviceeventcontroller"
-#define AtspiDbusInterfaceDec "org.a11y.atspi.DeviceEventController"
-#define AtspiDbusInterfaceDeviceEventListener "org.a11y.atspi.DeviceEventListener"
-
-#define DirectReadingDBusName "org.tizen.ScreenReader"
 #define DirectReadingDBusPath "/org/tizen/DirectReading"
-#define DirectReadingDBusInterface "org.tizen.DirectReading"
 
 struct ObjectPath;
 
@@ -102,67 +82,70 @@ enum class SortOrder : uint32_t
 
 namespace DBus
 {
+/**
+ * @brief The CurrentBridgePtr class is to save the current Accessibility Bridge.
+ */
 class CurrentBridgePtr
 {
-  static Dali::Accessibility::Bridge*& get()
+  static Dali::Accessibility::Bridge*& Get()
   {
-    static thread_local Dali::Accessibility::Bridge* b = nullptr;
-    return b;
+    static thread_local Dali::Accessibility::Bridge* bridge = nullptr;
+    return bridge;
   }
-  Dali::Accessibility::Bridge* prev;
+  Dali::Accessibility::Bridge* mPrev;
   CurrentBridgePtr(const CurrentBridgePtr&) = delete;
   CurrentBridgePtr(CurrentBridgePtr&&)      = delete;
   CurrentBridgePtr& operator=(const CurrentBridgePtr&) = delete;
   CurrentBridgePtr& operator=(CurrentBridgePtr&&) = delete;
 
 public:
-  CurrentBridgePtr(Dali::Accessibility::Bridge* b)
-  : prev(get())
+  CurrentBridgePtr(Dali::Accessibility::Bridge* bridge)
+  : mPrev(Get())
   {
-    get() = b;
+    Get() = bridge;
   }
 
   ~CurrentBridgePtr()
   {
-    get() = prev;
+    Get() = mPrev;
   }
 
-  static Dali::Accessibility::Bridge* current()
+  static Dali::Accessibility::Bridge* GetCurrentBridge()
   {
-    return get();
+    return Get();
   }
-};
+}; // CurrentBridgePtr
 
+// Templates for setting and getting Accessible values
 namespace detail
 {
-template<typename T>
-struct signature_accessible_impl : signature_helper<signature_accessible_impl<T>>
+template<>
+struct signature<Dali::Accessibility::Address> : signature_helper<signature<Dali::Accessibility::Address>>
 {
   using subtype = std::pair<std::string, ObjectPath>;
 
   static constexpr auto name_v = concat("AtspiAccessiblePtr");
-  static constexpr auto sig_v  = concat("(so)");
+  static constexpr auto sig_v  = signature<subtype>::sig_v; // "(so)"
 
   /**
-   * @brief Marshals value v as marshalled type into message
+   * @brief Marshals value address as marshalled type into message
    */
-  static void set(const DBusWrapper::MessageIterPtr& iter, T* t)
+  static void set(const DBusWrapper::MessageIterPtr& iter, const Dali::Accessibility::Address& address)
   {
-    if(t)
+    if(address)
     {
-      auto v = t->GetAddress();
-      signature<subtype>::set(iter, {v.GetBus(), ObjectPath{std::string{ATSPI_PREFIX_PATH} + v.GetPath()}});
+      signature<subtype>::set(iter, {address.GetBus(), ObjectPath{std::string{ATSPI_PREFIX_PATH} + address.GetPath()}});
     }
     else
     {
-      signature<subtype>::set(iter, {"", ObjectPath{ATSPI_NULL_PATH}});
+      signature<subtype>::set(iter, {address.GetBus(), ObjectPath{ATSPI_NULL_PATH}});
     }
   }
 
   /**
-   * @brief Marshals value from marshalled type into variable v
+   * @brief Marshals value from marshalled type into variable address
    */
-  static bool get(const DBusWrapper::MessageIterPtr& iter, T*& v)
+  static bool get(const DBusWrapper::MessageIterPtr& iter, Dali::Accessibility::Address& address)
   {
     subtype tmp;
     if(!signature<subtype>::get(iter, tmp))
@@ -172,81 +155,61 @@ struct signature_accessible_impl : signature_helper<signature_accessible_impl<T>
 
     if(tmp.second.value == ATSPI_NULL_PATH)
     {
-      v = nullptr;
+      address = {};
       return true;
     }
-
     if(tmp.second.value.substr(0, strlen(ATSPI_PREFIX_PATH)) != ATSPI_PREFIX_PATH)
     {
       return false;
     }
 
-    auto b = CurrentBridgePtr::current();
-    if(b->GetBusName() != tmp.first)
-    {
-      return false;
-    }
-
-    v = b->FindByPath(tmp.second.value.substr(strlen(ATSPI_PREFIX_PATH)));
-    return v != nullptr;
+    address = {std::move(tmp.first), tmp.second.value.substr(strlen(ATSPI_PREFIX_PATH))};
+    return true;
   }
 };
 
-template<>
-struct signature<Dali::Accessibility::Accessible*> : public signature_accessible_impl<Dali::Accessibility::Accessible>
-{
-};
-
-template<>
-struct signature<Dali::Accessibility::Address> : signature_helper<signature<Dali::Accessibility::Address>>
+template<typename T>
+struct SignatureAccessibleImpl : signature_helper<SignatureAccessibleImpl<T>>
 {
-  using subtype = std::pair<std::string, ObjectPath>;
+  using subtype = Dali::Accessibility::Address;
 
-  static constexpr auto name_v = concat("AtspiAccessiblePtr");
-  static constexpr auto sig_v  = concat("(so)");
+  static constexpr auto name_v = signature<subtype>::name_v;
+  static constexpr auto sig_v  = signature<subtype>::sig_v;
 
   /**
-   * @brief Marshals value v as marshalled type into message
+   * @brief Marshals value address as marshalled type into message
    */
-  static void set(const DBusWrapper::MessageIterPtr& iter, const Dali::Accessibility::Address& v)
+  static void set(const DBusWrapper::MessageIterPtr& iter, T* accessible)
   {
-    if(v)
-    {
-      signature<subtype>::set(iter, {v.GetBus(), ObjectPath{std::string{ATSPI_PREFIX_PATH} + v.GetPath()}});
-    }
-    else
-    {
-      signature<subtype>::set(iter, {v.GetBus(), ObjectPath{ATSPI_NULL_PATH}});
-    }
+    signature<subtype>::set(iter, accessible ? accessible->GetAddress() : subtype{});
   }
 
   /**
-   * @brief Marshals value from marshalled type into variable v
+   * @brief Marshals value from marshalled type into variable path
    */
-  static bool get(const DBusWrapper::MessageIterPtr& iter, Dali::Accessibility::Address& v)
+  static bool get(const DBusWrapper::MessageIterPtr& iter, T*& path)
   {
-    subtype tmp;
-    if(!signature<subtype>::get(iter, tmp))
-    {
-      return false;
-    }
+    subtype address;
 
-    if(tmp.second.value == ATSPI_NULL_PATH)
-    {
-      v = {};
-      return true;
-    }
-    if(tmp.second.value.substr(0, strlen(ATSPI_PREFIX_PATH)) != ATSPI_PREFIX_PATH)
+    signature<subtype>::get(iter, address);
+
+    auto currentBridge = CurrentBridgePtr::GetCurrentBridge();
+    if(currentBridge->GetBusName() != address.GetBus())
     {
       return false;
     }
 
-    v = {std::move(tmp.first), tmp.second.value.substr(strlen(ATSPI_PREFIX_PATH))};
-    return true;
+    path = currentBridge->FindByPath(address.GetPath());
+    return path != nullptr;
   }
 };
 
 template<>
+struct signature<Dali::Accessibility::Accessible*> : public SignatureAccessibleImpl<Dali::Accessibility::Accessible>
+{
+};
+
+template<>
 struct signature<Dali::Accessibility::States> : signature_helper<signature<Dali::Accessibility::States>>
 {
   using subtype = std::array<uint32_t, 2>;
@@ -255,24 +218,24 @@ struct signature<Dali::Accessibility::States> : signature_helper<signature<Dali:
   static constexpr auto sig_v  = signature<subtype>::sig_v;
 
   /**
-   * @brief Marshals value v as marshalled type into message
+   * @brief Marshals value state as marshalled type into message
    */
-  static void set(const DBusWrapper::MessageIterPtr& iter, const Dali::Accessibility::States& v)
+  static void set(const DBusWrapper::MessageIterPtr& iter, const Dali::Accessibility::States& states)
   {
-    signature<subtype>::set(iter, v.GetRawData());
+    signature<subtype>::set(iter, states.GetRawData());
   }
 
   /**
-   * @brief Marshals value from marshalled type into variable v
+   * @brief Marshals value from marshalled type into variable state
    */
-  static bool get(const DBusWrapper::MessageIterPtr& iter, Dali::Accessibility::States& v)
+  static bool get(const DBusWrapper::MessageIterPtr& iter, Dali::Accessibility::States& state)
   {
     subtype tmp;
     if(!signature<subtype>::get(iter, tmp))
     {
       return false;
     }
-    v = Dali::Accessibility::States{tmp};
+    state = Dali::Accessibility::States{tmp};
     return true;
   }
 };
@@ -281,25 +244,25 @@ struct signature<Dali::Accessibility::States> : signature_helper<signature<Dali:
 
 struct _Logger
 {
-  const char*        file;
-  int                line;
-  std::ostringstream tmp;
+  const char*        mFile;
+  int                mLine;
+  std::ostringstream mTmp;
 
-  _Logger(const char* f, int l)
-  : file(f),
-    line(l)
+  _Logger(const char* file, int line)
+  : mFile(file),
+    mLine(line)
   {
   }
 
   ~_Logger()
   {
-    Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, "%s:%d: %s", file, line, tmp.str().c_str());
+    Dali::Integration::Log::LogMessage(Dali::Integration::Log::INFO, "%s:%d: %s", mFile, mLine, mTmp.str().c_str());
   }
 
   template<typename T>
   _Logger& operator<<(T&& t)
   {
-    tmp << std::forward<T>(t);
+    mTmp << std::forward<T>(t);
     return *this;
   }
 };
@@ -315,19 +278,19 @@ struct _LoggerEmpty
 
 struct _LoggerScope
 {
-  const char* file;
-  int         line;
+  const char* mFile;
+  int         mLine;
 
-  _LoggerScope(const char* f, int l)
-  : file(f),
-    line(l)
+  _LoggerScope(const char* file, int line)
+  : mFile(file),
+    mLine(line)
   {
-    Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, "%s:%d: +", file, line);
+    Dali::Integration::Log::LogMessage(Dali::Integration::Log::INFO, "%s:%d: +", mFile, mLine);
   }
 
   ~_LoggerScope()
   {
-    Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, "%s:%d: -", file, line);
+    Dali::Integration::Log::LogMessage(Dali::Integration::Log::INFO, "%s:%d: -", mFile, mLine);
   }
 };