ScreenAnalyzer: Add command to get application toolkit info (FR3, FR1)
authorWoochanlee <wc0917.lee@samsung.com>
Thu, 23 Jun 2022 09:12:49 +0000 (18:12 +0900)
committerWoochanlee <wc0917.lee@samsung.com>
Thu, 23 Jun 2022 09:12:49 +0000 (18:12 +0900)
17 files changed:
libaurum/inc/Aurum.h
libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h
libaurum/inc/Impl/Accessibility/MockAccessibleNode.h
libaurum/inc/UiObject.h
libaurum/inc/UiSelector.h
libaurum/src/Accessibility/AccessibleNode.cc
libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc
libaurum/src/Impl/Accessibility/AtspiWrapper.cc
libaurum/src/Impl/Accessibility/MockAccessibleNode.cc
libaurum/src/UiObject.cc
org.tizen.aurum-bootstrap/inc/AurumServiceImpl.h
org.tizen.aurum-bootstrap/inc/Commands/Commands.h
org.tizen.aurum-bootstrap/inc/Commands/GetActiveAppToolkitNameCommand.h [new file with mode: 0644]
org.tizen.aurum-bootstrap/meson.build
org.tizen.aurum-bootstrap/src/AurumServiceImpl.cc
org.tizen.aurum-bootstrap/src/Commands/GetActiveAppToolkitNameCommand.cc [new file with mode: 0644]
protocol/aurum.proto

index c76e2e2..bc1aa32 100644 (file)
@@ -53,6 +53,7 @@
 #include "Waiter.h"
 #include "ISearchable.h"
 #include "IDevice.h"
+#include "IObject.h"
 #include "Accessible.h"
 #include "Point2D.h"
 #include "Size2D.h"
index 2724c93..2db208a 100644 (file)
@@ -127,6 +127,11 @@ public:
     void updateValue() override;
 
     /**
+     * @copydoc UiObject::updateToolkitName()
+     */
+    void updateToolkitName() override;
+
+    /**
      * @copydoc UiObject::setFocus()
      */
     bool setFocus() override;
index be6ce32..c81615d 100644 (file)
@@ -131,6 +131,12 @@ public:
 
     /**
      * @brief TBD
+     * @since_tizen 6.5
+     */
+    void updateToolkitName() override;
+
+    /**
+     * @brief TBD
      * @since_tizen 7.0
      */
     bool setFocus() override;
index 180594a..0402964 100644 (file)
@@ -303,6 +303,15 @@ public:
     std::string getXPath() const;
 
     /**
+     * @brief Gets object's Toolkit name.
+     *
+     * @return string
+     *
+     * @since_tizen 6.5
+     */
+    std::string getToolkitName() const;
+
+    /**
      * @brief Sets object's text.
      *
      * @param[in] text string
@@ -537,6 +546,13 @@ public:
     void updateValue() const;
 
     /**
+     * @brief Updates object's toolkit name information from atspi server.
+     *
+     * @since_tizen 6.5
+     */
+    void updateToolkitName() const;
+
+    /**
      * @brief Sets focus to object.
      *
      * @since_tizen 7.0
index c8f510d..267354b 100644 (file)
@@ -93,6 +93,17 @@ public:
     UiSelector *text(std::string text);
 
     /**
+     * @brief Sets the search criteria to match the object's text.
+     *
+     * @param[in] text object text
+     *
+     * @return UiSelector class instance
+     *
+     * @since_tizen 6.5
+     */
+    UiSelector *ocrText(std::string text);
+
+    /**
      * @brief Sets the search criteria to match the object's text has given text.
      *
      * @param[in] text object text
@@ -367,6 +378,7 @@ public:
     std::string mStyle;
     std::string mTextPartialMatch;
     std::string mXPath;
+    std::string mOcrText;
 
     bool mMatchId;
     bool mMatchAutomationId;
@@ -377,6 +389,7 @@ public:
     bool mMatchStyle;
     bool mMatchTextPartialMatch;
     bool mMatchXPath;
+    bool mMatchOcrText;
 
     bool mMatchChecked;
     bool mMatchCheckable;
index 02c4816..e3b8c82 100644 (file)
@@ -171,6 +171,11 @@ std::string AccessibleNode::getXPath() const
     return mXPath;
 }
 
+std::string AccessibleNode::getToolkitName() const
+{
+    return mToolkitName;
+}
+
 Rect<int> AccessibleNode::getScreenBoundingBox() const
 {
     return mScreenBoundingBox;
index 5d9e922..9d0561f 100644 (file)
@@ -144,6 +144,17 @@ void AtspiAccessibleNode::updateName()
     }
 }
 
+void AtspiAccessibleNode::updateToolkitName()
+{
+    AtspiWrapper::Atspi_accessible_clear_cache(mNode);
+
+    gchar *toolkitName = AtspiWrapper::Atspi_accessible_get_toolkit_name(mNode, NULL);
+    if (toolkitName) {
+        mToolkitName = toolkitName;
+        g_free(toolkitName);
+    }
+}
+
 void AtspiAccessibleNode::updateApplication()
 {
     AtspiWrapper::Atspi_accessible_clear_cache(mNode);
@@ -292,6 +303,12 @@ void AtspiAccessibleNode::refresh(bool updateAll)
             g_free(name);
         }
 
+        gchar *toolkitName = AtspiWrapper::Atspi_accessible_get_toolkit_name(mNode, NULL);
+        if (toolkitName) {
+            mToolkitName = toolkitName;
+            g_free(toolkitName);
+        }
+
         AtspiAccessible *app = AtspiWrapper::Atspi_accessible_get_application(mNode, NULL);
         if (app) {
             gchar *pkg = AtspiWrapper::Atspi_accessible_get_name(app, NULL);
index 34d459f..ec7325b 100644 (file)
@@ -205,4 +205,10 @@ gdouble AtspiWrapper::Atspi_value_get_minimum_increment(AtspiValue *iface, GErro
 {
     std::unique_lock<std::recursive_mutex> lock(mMutex);
     return atspi_value_get_minimum_increment(iface, error);
-}
\ No newline at end of file
+}
+
+gchar *AtspiWrapper::Atspi_accessible_get_toolkit_name(AtspiAccessible *node, GError **error)
+{
+    std::unique_lock<std::recursive_mutex> lock(mMutex);
+    return atspi_accessible_get_toolkit_name(node, error);
+}
index 51ba193..1297537 100644 (file)
@@ -117,6 +117,10 @@ void MockAccessibleNode::updateValue()
 {
 }
 
+void MockAccessibleNode::updateToolkitName()
+{
+}
+
 bool MockAccessibleNode::setFocus()
 {
     return false;
index 71bbeea..162c534 100644 (file)
@@ -194,6 +194,12 @@ std::string UiObject::getOcrText() const
     return getAccessibleNode()->getOcrText();
 }
 
+std::string UiObject::getToolkitName() const
+{
+    getAccessibleNode()->updateToolkitName();
+    return getAccessibleNode()->getToolkitName();
+}
+
 bool UiObject::setText(std::string text)
 {
     return getAccessibleNode()->setValue(text);
@@ -359,6 +365,11 @@ void UiObject::updateValue() const
     mNode->updateValue();
 }
 
+void UiObject::updateToolkitName() const
+{
+    mNode->updateToolkitName();
+}
+
 bool UiObject::setFocus() const
 {
     return mNode->setFocus();
index 119e36a..5d538bc 100644 (file)
@@ -120,6 +120,9 @@ public:
     ::grpc::Status setFocus(::grpc::ServerContext *context,
                             const ::aurum::ReqSetFocus *request,
                             ::aurum::RspSetFocus *response) override;
+    ::grpc::Status getActiveAppToolkitName(::grpc::ServerContext *context,
+                                           const ::aurum::ReqGetActiveAppToolkitName *request,
+                                           ::aurum::RspGetActiveAppToolkitName *response) override;
 };
 
 #endif
index e0badc1..b7742e6 100644 (file)
@@ -49,3 +49,4 @@
 #include "Commands/GetScreenSizeCommand.h"
 #include "Commands/ActionAndWaitEventCommand.h"
 #include "Commands/SetFocusCommand.h"
+#include "Commands/GetActiveAppToolkitNameCommand.h"
diff --git a/org.tizen.aurum-bootstrap/inc/Commands/GetActiveAppToolkitNameCommand.h b/org.tizen.aurum-bootstrap/inc/Commands/GetActiveAppToolkitNameCommand.h
new file mode 100644 (file)
index 0000000..e85aba3
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *               http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+#include <gio/gio.h>
+#include <grpcpp/grpcpp.h>
+#include "Commands/Command.h"
+#include "ObjectMapper.h"
+#include <aurum.grpc.pb.h>
+#include "config.h"
+
+class GetActiveAppToolkitNameCommand : public Command {
+private:
+    const ::aurum::ReqGetActiveAppToolkitName *mRequest;
+    ::aurum::RspGetActiveAppToolkitName *mResponse;
+
+public:
+    GetActiveAppToolkitNameCommand(const ::aurum::ReqGetActiveAppToolkitName *request,
+                   ::aurum::RspGetActiveAppToolkitName *response);
+    ::grpc::Status execute() override;
+};
index 0e90268..3984b45 100644 (file)
@@ -45,6 +45,7 @@ bootstrap_svr_src += [
    files('src/Commands/GetScreenSizeCommand.cc'),
    files('src/Commands/ActionAndWaitEventCommand.cc'),
    files('src/Commands/SetFocusCommand.cc'),
+   files('src/Commands/GetActiveAppToolkitNameCommand.cc'),
 ]
 
 bootstrap_svr_dep = [
index fe62067..aa575eb 100644 (file)
@@ -264,3 +264,11 @@ aurumServiceImpl::~aurumServiceImpl()
     std::unique_ptr<SetFocusCommand> cmd = std::make_unique<SetFocusCommand>(request, response);
     return execute(cmd.get(), true);
 }
+
+::grpc::Status aurumServiceImpl::getActiveAppToolkitName(::grpc::ServerContext *context,
+                                                         const ::aurum::ReqGetActiveAppToolkitName *request,
+                                                         ::aurum::RspGetActiveAppToolkitName *response)
+{
+    std::unique_ptr<GetActiveAppToolkitNameCommand> cmd = std::make_unique<GetActiveAppToolkitNameCommand>(request, response);
+    return execute(cmd.get(), true);
+}
diff --git a/org.tizen.aurum-bootstrap/src/Commands/GetActiveAppToolkitNameCommand.cc b/org.tizen.aurum-bootstrap/src/Commands/GetActiveAppToolkitNameCommand.cc
new file mode 100644 (file)
index 0000000..cb9d869
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *               http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+#include "bootstrap.h"
+#include "GetActiveAppToolkitNameCommand.h"
+#include "UiDevice.h"
+
+GetActiveAppToolkitNameCommand::GetActiveAppToolkitNameCommand(const ::aurum::ReqGetActiveAppToolkitName *request,
+                               ::aurum::RspGetActiveAppToolkitName *response)
+    : mRequest{request}, mResponse{response}
+{
+}
+
+::grpc::Status GetActiveAppToolkitNameCommand::execute()
+{
+    LOGI("GetActiveAppToolkitName --------------- ");
+
+    return grpc::Status::OK;
+}
index 6b7d454..49bc8dd 100644 (file)
@@ -33,6 +33,7 @@ service Bootstrap {
    rpc actionAndWaitEvent(ReqActionAndWaitEvent) returns (RspActionAndWaitEvent) {}
    rpc setFocus(ReqSetFocus) returns (RspSetFocus) {}
    rpc findElements(ReqFindElements) returns (RspFindElements) {}
+   rpc getActiveAppToolkitName(ReqGetActiveAppToolkitName) returns (RspGetActiveAppToolkitName) {}
 }
 
 // ------------------------------------ //
@@ -65,6 +66,7 @@ message Element {
    string automationId = 9;
    string package = 10;
    string role = 11;
+   string toolkit = 12;
 
    bool isChecked = 12;
    bool isCheckable = 13;
@@ -564,3 +566,12 @@ message ReqSetFocus {
 message RspSetFocus {
    RspStatus status = 1;
 }
+
+message ReqGetActiveAppToolkitName {
+}
+
+message RspGetActiveAppToolkitName {
+   RspStatus status = 1;
+   string toolkitName = 2;
+}
+