From 28acd15e20fca7720c4a20f2ba36beb0523824e3 Mon Sep 17 00:00:00 2001 From: Hosang Kim Date: Thu, 14 Dec 2023 15:47:21 +0900 Subject: [PATCH] libaurum: add updateInterface and getInterface API Atspi interface is a set of pointers to all interfaces supported by an AtspiAccessible. We able to check possible feature with interface information. e.g. EditableText, Value and so on. Change-Id: I6122e135035b15950c1a55f40b47cfb785675eda --- libaurum/inc/Accessibility/AccessibleNode.h | 11 +++++++ .../Impl/Accessibility/AtspiAccessibleNode.h | 5 +++ .../Impl/Accessibility/MockAccessibleNode.h | 5 +++ libaurum/inc/UiObject.h | 16 ++++++++++ libaurum/src/Accessibility/AccessibleNode.cc | 5 +++ .../Impl/Accessibility/AtspiAccessibleNode.cc | 31 +++++++++++++++++++ .../Impl/Accessibility/MockAccessibleNode.cc | 4 +++ libaurum/src/UiObject.cc | 5 +++ .../src/Commands/DumpObjectTreeCommand.cc | 2 ++ .../src/Commands/FindElementCommand.cc | 2 ++ .../src/Commands/FindElementsCommand.cc | 2 ++ protocol/aurum.proto | 2 ++ 12 files changed, 90 insertions(+) diff --git a/libaurum/inc/Accessibility/AccessibleNode.h b/libaurum/inc/Accessibility/AccessibleNode.h index b65f316..bcdc1fc 100644 --- a/libaurum/inc/Accessibility/AccessibleNode.h +++ b/libaurum/inc/Accessibility/AccessibleNode.h @@ -317,6 +317,11 @@ public: */ Rect getTextMinBoundingRect() const; + /** + * @copydoc UiObject::getInterface() + */ + std::string getInterface() const; + /** * @copydoc UiObject::isCheckable() */ @@ -456,6 +461,11 @@ public: */ virtual void updateTextMinBoundingRect() = 0; + /** + * @copydoc UiObject::updateInterface() + */ + virtual void updateInterface() = 0; + /** * @brief Updates Node information from atspi server. * @@ -565,6 +575,7 @@ protected: std::string mStyle; std::string mXPath; std::string mToolkitName; + std::string mInterface; Rect mScreenBoundingBox; Rect mWindowBoundingBox; Rect mTextMinBoundingRect; diff --git a/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h b/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h index 54d091a..29c0aeb 100644 --- a/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h +++ b/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h @@ -146,6 +146,11 @@ public: */ void updateTextMinBoundingRect() override; + /** + * @copydoc UiObject::updateInterface() + */ + void updateInterface() override; + /** * @copydoc UiObject::setFocus() */ diff --git a/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h b/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h index 77f9ce3..c2df6a7 100644 --- a/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h +++ b/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h @@ -147,6 +147,11 @@ public: */ void updatePid() override; + /** + * @copydoc UiObject::updateInterface() + */ + void updateInterface() override; + /** * @brief TBD * @since_tizen 7.0 diff --git a/libaurum/inc/UiObject.h b/libaurum/inc/UiObject.h index 3f7911b..6689962 100644 --- a/libaurum/inc/UiObject.h +++ b/libaurum/inc/UiObject.h @@ -463,6 +463,15 @@ public: */ const Rect getTextMinBoundingRect() const; + /** + * @brief Gets object's interface information. + * + * @return string + * + * @since_tizen 8.0 + */ + std::string getInterface() const; + /** * @brief Sets object's value. * @@ -661,6 +670,13 @@ public: */ void updateTextMinBoundingRect() const; + /* + * @brief Updates object's interface information from atspi server. + * + * @since_tizen 8.0 + */ + void updateInterface() const; + /** * @brief Sets focus to object. * diff --git a/libaurum/src/Accessibility/AccessibleNode.cc b/libaurum/src/Accessibility/AccessibleNode.cc index 8f6212b..abfed4a 100644 --- a/libaurum/src/Accessibility/AccessibleNode.cc +++ b/libaurum/src/Accessibility/AccessibleNode.cc @@ -201,6 +201,11 @@ const Rect AccessibleNode::getWindowBoundingBox() const return mWindowBoundingBox; } +std::string AccessibleNode::getInterface() const +{ + return mInterface; +} + bool AccessibleNode::isCheckable() const { return hasFeatureProperty(NodeFeatureProperties::CHECKABLE); diff --git a/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc b/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc index e4572d4..a3a1dd6 100644 --- a/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc +++ b/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc @@ -308,6 +308,23 @@ void AtspiAccessibleNode::updateTextMinBoundingRect() } } +void AtspiAccessibleNode::updateInterface() +{ + GArray *interfaces = AtspiWrapper::Atspi_accessible_get_interfaces(mNode); + if (interfaces) + { + for (unsigned int i = 0; i < interfaces->len; i++) + { + gchar *interface = g_array_index(interfaces, gchar *, i); + if (g_strcmp0(interface, "EditableText") == 0 || g_strcmp0(interface, "Value") == 0) + { + mInterface = interface; + } + } + g_array_free(interfaces, true); + } +} + bool AtspiAccessibleNode::setFocus() { AtspiComponent *component = AtspiWrapper::Atspi_accessible_get_component_iface(mNode); @@ -431,6 +448,20 @@ void AtspiAccessibleNode::refresh(bool updateAll) g_object_unref(value); } + GArray *interfaces = AtspiWrapper::Atspi_accessible_get_interfaces(mNode); + if (interfaces) + { + for (unsigned int i = 0; i < interfaces->len; i++) + { + gchar *interface = g_array_index(interfaces, gchar *, i); + if (g_strcmp0(interface, "EditableText") == 0 || g_strcmp0(interface, "Value") == 0) + { + mInterface = interface; + } + } + g_array_free(interfaces, true); + } + if (updateAll) updateXPath(); } else { diff --git a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc index 860a089..8a51e90 100644 --- a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc +++ b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc @@ -132,6 +132,10 @@ void MockAccessibleNode::updateToolkitName() { } +void MockAccessibleNode::updateInterface() +{ +} + bool MockAccessibleNode::setFocus() { return false; diff --git a/libaurum/src/UiObject.cc b/libaurum/src/UiObject.cc index ca0946b..82d9563 100644 --- a/libaurum/src/UiObject.cc +++ b/libaurum/src/UiObject.cc @@ -244,6 +244,11 @@ const Rect UiObject::getTextMinBoundingRect() const return getAccessibleNode()->getTextMinBoundingRect(); } +std::string UiObject::getInterface() const +{ + return getAccessibleNode()->getInterface(); +} + bool UiObject::setValue(double value) { return getAccessibleNode()->setValue(value); diff --git a/org.tizen.aurum-bootstrap/src/Commands/DumpObjectTreeCommand.cc b/org.tizen.aurum-bootstrap/src/Commands/DumpObjectTreeCommand.cc index 6d9b4ab..0f00f0f 100644 --- a/org.tizen.aurum-bootstrap/src/Commands/DumpObjectTreeCommand.cc +++ b/org.tizen.aurum-bootstrap/src/Commands/DumpObjectTreeCommand.cc @@ -86,6 +86,8 @@ void DumpObjectTreeCommand::traverse(::aurum::Element *root, std::shared_ptrset_windowangle(obj->getWindowAngle()); root->set_targetangle(obj->getTargetAngle()); + root->set_interface(obj->getInterface()); + for( auto && childNode : node->mChildren) { ::aurum::Element *child = root->add_child(); traverse(child, childNode, depth+1); diff --git a/org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc b/org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc index d147096..02b6c86 100644 --- a/org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc +++ b/org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc @@ -147,6 +147,8 @@ std::shared_ptr FindElementCommand::getSelector(void) elm->set_windowangle(obj->getWindowAngle()); elm->set_targetangle(obj->getTargetAngle()); + elm->set_interface(obj->getInterface()); + mResponse->set_status(::aurum::RspStatus::OK); } else { mResponse->set_status(::aurum::RspStatus::ERROR); diff --git a/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc b/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc index cd113f1..97c5029 100644 --- a/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc +++ b/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc @@ -153,6 +153,8 @@ std::vector> FindElementsCommand::getSelectors(void) elm->set_windowangle(obj->getWindowAngle()); elm->set_targetangle(obj->getTargetAngle()); + + elm->set_interface(obj->getInterface()); } mResponse->set_status(::aurum::RspStatus::OK); } else { diff --git a/protocol/aurum.proto b/protocol/aurum.proto index b83bea5..dd534a1 100644 --- a/protocol/aurum.proto +++ b/protocol/aurum.proto @@ -94,6 +94,8 @@ message Element { int32 windowAngle = 31; int32 targetAngle = 32; + + string interface = 33; } message Point { -- 2.34.1