From bd67dbfad135baf943663b2c02867511a1a7c14b Mon Sep 17 00:00:00 2001 From: Hosang Kim Date: Wed, 26 Oct 2022 20:11:12 +0900 Subject: [PATCH] aurum: add searching highlightable object Change-Id: I2213133ba5f553298d7d4f1d057cb30a56525c21 --- libaurum/inc/Accessibility/AccessibleNode.h | 8 +++- libaurum/inc/UiObject.h | 9 +++++ libaurum/inc/UiSelector.h | 13 ++++++ libaurum/src/Accessibility/AccessibleNode.cc | 5 +++ libaurum/src/AurumXML.cc | 1 + .../Impl/Accessibility/AtspiAccessibleNode.cc | 3 ++ libaurum/src/PartialMatch.cc | 1 + libaurum/src/UiObject.cc | 5 +++ libaurum/src/UiSelector.cc | 12 +++++- .../src/Commands/DumpObjectTreeCommand.cc | 1 + .../src/Commands/FindElementCommand.cc | 4 ++ .../src/Commands/FindElementsCommand.cc | 4 ++ protocol/aurum.proto | 40 +++++++++++++++---- 13 files changed, 96 insertions(+), 10 deletions(-) diff --git a/libaurum/inc/Accessibility/AccessibleNode.h b/libaurum/inc/Accessibility/AccessibleNode.h index be58257..e3e5cb2 100644 --- a/libaurum/inc/Accessibility/AccessibleNode.h +++ b/libaurum/inc/Accessibility/AccessibleNode.h @@ -76,7 +76,8 @@ enum class NodeFeatureProperties { VISIBLE = 0X0400, SHOWING = 0X0800, ACTIVE = 0X1000, - INVALID = 0X2000, + HIGHLIGHTABLE = 0X2000, + INVALID = 0X4000, }; /** @@ -322,6 +323,11 @@ public: */ bool isVisible() const; + /** + * @copydoc UiObject::isHighlightable() + */ + bool isHighlightable() const; + public: /** * @brief Print Node information. diff --git a/libaurum/inc/UiObject.h b/libaurum/inc/UiObject.h index bb50d19..35fabea 100644 --- a/libaurum/inc/UiObject.h +++ b/libaurum/inc/UiObject.h @@ -514,6 +514,15 @@ public: */ bool isVisible() const; + /** + * @brief Gets object's highlightable property. + * + * @return true if highlightable else false + * + * @since_tizen 7.0 + */ + bool isHighlightable() const; + /** * @brief Performs a click action on object. * diff --git a/libaurum/inc/UiSelector.h b/libaurum/inc/UiSelector.h index 4db056e..2eca30d 100644 --- a/libaurum/inc/UiSelector.h +++ b/libaurum/inc/UiSelector.h @@ -335,6 +335,17 @@ public: */ UiSelector *isSelectable(bool condition); + /** + * @brief Sets the search criteria to match the object that is highlightable. + * + * @param[in] condition object's highlightable condition + * + * @return UiSelector class instance + * + * @since_tizen 7.0 + */ + UiSelector *isHighlightable(bool condition); + /** * @brief Sets the child selector. * @@ -416,6 +427,7 @@ public: bool mMatchActive; bool mMatchVisible; bool mMatchSelectable; + bool mMatchHighlightable; int mMinDepth; int mMaxDepth; @@ -432,6 +444,7 @@ public: bool mIsactive; bool mIsvisible; bool mIsselectable; + bool mIshighlightable; bool mGeometryIsEqual; diff --git a/libaurum/src/Accessibility/AccessibleNode.cc b/libaurum/src/Accessibility/AccessibleNode.cc index 92e9cb6..7bd33c7 100644 --- a/libaurum/src/Accessibility/AccessibleNode.cc +++ b/libaurum/src/Accessibility/AccessibleNode.cc @@ -246,6 +246,11 @@ bool AccessibleNode::isActive() const return hasFeatureProperty(NodeFeatureProperties::ACTIVE); } +bool AccessibleNode::isHighlightable() const +{ + return hasFeatureProperty(NodeFeatureProperties::HIGHLIGHTABLE); +} + double AccessibleNode::getMinValue() const { return mMinValue; diff --git a/libaurum/src/AurumXML.cc b/libaurum/src/AurumXML.cc index 4067afe..9a8c8a8 100644 --- a/libaurum/src/AurumXML.cc +++ b/libaurum/src/AurumXML.cc @@ -77,6 +77,7 @@ void AurumXML::traverse(xml_node element, std::shared_ptr node) element.append_attribute("active") = node->isActive(); element.append_attribute("visible") = node->isVisible(); element.append_attribute("selectable") = node->isSelectable(); + element.append_attribute("highlightable") = node->isHighlightable(); mXNodeMap[node->getId()] = node; diff --git a/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc b/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc index 1f40f58..2fc415f 100644 --- a/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc +++ b/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc @@ -548,6 +548,9 @@ void AtspiAccessibleNode::setFeatureProperty(AtspiStateType type) case ATSPI_STATE_SENSITIVE: setFeatureProperty(NodeFeatureProperties::CLICKABLE, true); break; + case ATSPI_STATE_HIGHLIGHTABLE: + setFeatureProperty(NodeFeatureProperties::HIGHLIGHTABLE, true); + break; case ATSPI_STATE_DEFUNCT: case ATSPI_STATE_INVALID: setFeatureProperty(NodeFeatureProperties::INVALID, true); diff --git a/libaurum/src/PartialMatch.cc b/libaurum/src/PartialMatch.cc index 1e0d018..f5b8e92 100644 --- a/libaurum/src/PartialMatch.cc +++ b/libaurum/src/PartialMatch.cc @@ -132,6 +132,7 @@ bool PartialMatch::checkCriteria(const std::shared_ptr selector, if (selector->mMatchActive && checkCriteria(selector->mIsactive, node->isActive())) return false; if (selector->mMatchVisible && checkCriteria(selector->mIsvisible, node->isVisible())) return false; if (selector->mMatchSelectable && checkCriteria(selector->mIsselectable, node->isSelectable())) return false; + if (selector->mMatchHighlightable && checkCriteria(selector->mIshighlightable, node->isHighlightable())) return false; return true; } diff --git a/libaurum/src/UiObject.cc b/libaurum/src/UiObject.cc index 577ef65..82fa073 100644 --- a/libaurum/src/UiObject.cc +++ b/libaurum/src/UiObject.cc @@ -315,6 +315,11 @@ bool UiObject::isActive() const return getAccessibleNode()->isActive(); } +bool UiObject::isHighlightable() const +{ + return getAccessibleNode()->isHighlightable(); +} + void UiObject::refresh() const { mNode->refresh(); diff --git a/libaurum/src/UiSelector.cc b/libaurum/src/UiSelector.cc index f568eb7..63fd965 100644 --- a/libaurum/src/UiSelector.cc +++ b/libaurum/src/UiSelector.cc @@ -26,9 +26,9 @@ UiSelector::UiSelector() mMatchId{}, mMatchAutomationId{}, mMatchRole{}, mMatchText{}, mMatchPkg{}, mMatchType{}, mMatchStyle{}, mMatchTextPartialMatch{}, mMatchXPath{}, mMatchOcrText{}, mMatchGeometry{}, mMatchChecked{}, mMatchCheckable{}, mMatchClickable{}, mMatchEnabled{}, mMatchFocused{}, mMatchFocusable{}, mMatchScrollable{}, mMatchSelected{}, mMatchShowing{}, mMatchActive{}, mMatchVisible{}, - mMatchSelectable{}, mMinDepth{}, mMaxDepth{}, mIschecked{}, mIscheckable{}, mIsclickable{}, mIsenabled{}, + mMatchSelectable{}, mMatchHighlightable{}, mMinDepth{}, mMaxDepth{}, mIschecked{}, mIscheckable{}, mIsclickable{}, mIsenabled{}, mIsfocused{}, mIsfocusable{}, mIsscrollable{}, mIsselected{}, mIsshowing{}, mIsactive{}, mIsvisible{}, - mIsselectable{}, mChild{}, mParent{}, mGeometry{}, mGeometryIsEqual{} + mIsselectable{}, mIshighlightable{}, mChild{}, mParent{}, mGeometry{}, mGeometryIsEqual{} { } @@ -72,6 +72,7 @@ std::string UiSelector::description() if(this->mMatchActive) ss << "\"mMatchActive\":\"" << ((this->mMatchActive)?"true":"false") << "\", "; if(this->mMatchVisible) ss << "\"mMatchVisible\":\"" << ((this->mMatchVisible)?"true":"false") << "\", "; if(this->mMatchSelectable) ss << "\"mMatchSelectable\":\"" << ((this->mMatchSelectable)?"true":"false") << "\", "; + if(this->mMatchHighlightable) ss << "\"mMatchHighlightable\":\"" << ((this->mMatchHighlightable)?"true":"false") << "\", "; if(this->mParent) { ss << "\"mParent\":" << this->mParent->description(); } @@ -266,6 +267,13 @@ UiSelector *UiSelector::isSelectable(bool condition) return this; } +UiSelector *UiSelector::isHighlightable(bool condition) +{ + this->mIshighlightable = condition; + this->mMatchHighlightable = true; + return this; +} + UiSelector *UiSelector::hasChild(std::shared_ptr child) { mChild.push_back(child); diff --git a/org.tizen.aurum-bootstrap/src/Commands/DumpObjectTreeCommand.cc b/org.tizen.aurum-bootstrap/src/Commands/DumpObjectTreeCommand.cc index cd5acbd..b899715 100644 --- a/org.tizen.aurum-bootstrap/src/Commands/DumpObjectTreeCommand.cc +++ b/org.tizen.aurum-bootstrap/src/Commands/DumpObjectTreeCommand.cc @@ -76,6 +76,7 @@ void DumpObjectTreeCommand::traverse(::aurum::Element *root, std::shared_ptrset_isactive(obj->isActive()); root->set_isvisible(obj->isVisible()); root->set_isselectable(obj->isSelectable()); + root->set_ishighlightable(obj->isHighlightable()); root->set_minvalue(obj->getMinValue()); root->set_maxvalue(obj->getMaxValue()); diff --git a/org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc b/org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc index c0d4641..349d2a5 100644 --- a/org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc +++ b/org.tizen.aurum-bootstrap/src/Commands/FindElementCommand.cc @@ -72,6 +72,9 @@ std::shared_ptr FindElementCommand::getSelector(void) if(mRequest->_xpath_case()) sel->xpath(mRequest->xpath()); if(mRequest->_ocrtext_case()) sel->ocrText(mRequest->ocrtext()); if(mRequest->_geometry_case()) sel->geometry(Rect{mRequest->geometry().x(), mRequest->geometry().y(), mRequest->geometry().x() + mRequest->geometry().width(), mRequest->geometry().y() + mRequest->geometry().height()}, true); + if(mRequest->_isvisible_case()) sel->isVisible(mRequest->isvisible()); + if(mRequest->_isselectable_case()) sel->isSelectable(mRequest->isselectable()); + if(mRequest->_ishighlightable_case()) sel->isHighlightable(mRequest->ishighlightable()); return sel; } @@ -179,6 +182,7 @@ std::shared_ptr FindElementCommand::getSelector(void) elm->set_isactive(obj->isActive()); elm->set_isvisible(obj->isVisible()); elm->set_isselectable(obj->isSelectable()); + elm->set_ishighlightable(obj->isHighlightable()); elm->set_minvalue(obj->getMinValue()); elm->set_maxvalue(obj->getMaxValue()); diff --git a/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc b/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc index fe09e14..d3b2de6 100644 --- a/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc +++ b/org.tizen.aurum-bootstrap/src/Commands/FindElementsCommand.cc @@ -72,6 +72,9 @@ std::vector> FindElementsCommand::getSelectors(void) if(mRequest->_xpath_case()) sel->xpath(mRequest->xpath()); if(mRequest->_ocrtext_case()) sel->ocrText(mRequest->ocrtext()); if(mRequest->_geometry_case()) sel->geometry(Rect{mRequest->geometry().x(), mRequest->geometry().y(), mRequest->geometry().x() + mRequest->geometry().width(), mRequest->geometry().y() + mRequest->geometry().height()}, false); + if(mRequest->_isvisible_case()) sel->isVisible(mRequest->isvisible()); + if(mRequest->_isselectable_case()) sel->isSelectable(mRequest->isselectable()); + if(mRequest->_ishighlightable_case()) sel->isHighlightable(mRequest->ishighlightable()); return std::vector>{sel}; } @@ -192,6 +195,7 @@ std::vector> FindElementsCommand::getSelectors(void) elm->set_isactive(obj->isActive()); elm->set_isvisible(obj->isVisible()); elm->set_isselectable(obj->isSelectable()); + elm->set_ishighlightable(obj->isHighlightable()); elm->set_minvalue(obj->getMinValue()); elm->set_maxvalue(obj->getMaxValue()); diff --git a/protocol/aurum.proto b/protocol/aurum.proto index 73ed266..9e4a42a 100644 --- a/protocol/aurum.proto +++ b/protocol/aurum.proto @@ -84,11 +84,12 @@ message Element { bool isActive = 23; bool isVisible = 24; bool isSelectable = 25; + bool isHighlightable = 26; - double minValue = 26; - double maxValue = 27; - double value = 28; - double increment = 29; + double minValue = 27; + double maxValue = 28; + double value = 29; + double increment = 30; } message Point { @@ -170,6 +171,7 @@ message ReqFindElement { oneof _isactive { bool isActive = 15; } + oneof _mindepth { int32 minDepth = 16; } @@ -197,8 +199,19 @@ message ReqFindElement { oneof _geometry { Rect geometry = 22; } + oneof _isvisible { + bool isVisible = 23; + } + + oneof _isselectable { + bool isSelectable = 24; + } - repeated ReqFindElement children = 23; + oneof _ishighlightable { + bool isHighlightable = 25; + } + + repeated ReqFindElement children = 26; } message RspFindElement { @@ -266,6 +279,7 @@ message ReqFindElements { oneof _isactive { bool isActive = 15; } + oneof _mindepth { int32 minDepth = 16; } @@ -291,10 +305,22 @@ message ReqFindElements { } oneof _geometry { - Rect geometry = 22; + Rect geometry = 22; + } + + oneof _isvisible { + bool isVisible = 23; + } + + oneof _isselectable { + bool isSelectable = 24; + } + + oneof _ishighlightable { + bool isHighlightable = 25; } - repeated ReqFindElements children = 23; + repeated ReqFindElements children = 26; } message RspFindElements { -- 2.34.1