From: Hosang Kim Date: Wed, 17 Apr 2024 07:22:15 +0000 (+0900) Subject: libaurum: Introduce new moveTo API X-Git-Tag: accepted/tizen/unified/20240424.063514~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ea6b162e84079582e67f10fdec91c4353db93fa2;p=platform%2Fcore%2Fuifw%2Faurum.git libaurum: Introduce new moveTo API Change-Id: I5eed0a5290d1a0252bc168efd0be85563f235526 --- diff --git a/libaurum/inc/Accessibility/AccessibleNode.h b/libaurum/inc/Accessibility/AccessibleNode.h index 3dcc22f..9a8766d 100644 --- a/libaurum/inc/Accessibility/AccessibleNode.h +++ b/libaurum/inc/Accessibility/AccessibleNode.h @@ -465,6 +465,11 @@ public: */ virtual bool setFocus() = 0; + /** + * @copydoc UiObject::moveTo() + */ + virtual bool moveTo() = 0; + /** * @copydoc UIObject::updateTextMinBoundingRect() */ diff --git a/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h b/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h index 43d20f6..33d03d2 100644 --- a/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h +++ b/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h @@ -161,6 +161,11 @@ public: */ bool setFocus() override; + /** + * @copydoc UiObject::moveTo() + */ + bool moveTo() override; + /** * @copydoc AccessibleNode::refresh() */ diff --git a/libaurum/inc/Impl/Accessibility/AtspiWrapper.h b/libaurum/inc/Impl/Accessibility/AtspiWrapper.h index 6e84b2a..38022ea 100644 --- a/libaurum/inc/Impl/Accessibility/AtspiWrapper.h +++ b/libaurum/inc/Impl/Accessibility/AtspiWrapper.h @@ -61,6 +61,7 @@ public: static AtspiAccessible *Atspi_accessible_get_application (AtspiAccessible *node, GError **error); static void Atspi_accessible_clear_cache (AtspiAccessible *node); static gboolean Atspi_component_grab_focus(AtspiComponent *obj, GError **error); + static gboolean Atspi_component_grab_highlight(AtspiComponent *obj, GError **error); static void Atspi_accessible_set_cache_mask(AtspiAccessible *node, AtspiCache mask); static AtspiValue *Atspi_accessible_get_value(AtspiAccessible *node); static gdouble Atspi_value_get_minimum_value(AtspiValue *iface, GError **error); diff --git a/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h b/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h index 4f2d02d..8c13710 100644 --- a/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h +++ b/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h @@ -163,6 +163,12 @@ public: */ bool setFocus() override; + /** + * @brief TBD + * @since_tizen 9.0 + */ + bool moveTo() override; + /** * @brief TBD * @since_tizen 7.0 diff --git a/libaurum/inc/UiObject.h b/libaurum/inc/UiObject.h index f9904bd..51f58a9 100644 --- a/libaurum/inc/UiObject.h +++ b/libaurum/inc/UiObject.h @@ -691,6 +691,13 @@ public: */ bool setFocus() const; + /** + * @brief Moves to object. + * + * @since_tizen 9.0 + */ + bool moveTo() const; + /** * @brief Updates object's information from atspi server. * diff --git a/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc b/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc index 29ff6dc..451946b 100644 --- a/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc +++ b/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc @@ -340,6 +340,18 @@ bool AtspiAccessibleNode::setFocus() return false; } +bool AtspiAccessibleNode::moveTo() +{ + AtspiComponent *component = AtspiWrapper::Atspi_accessible_get_component_iface(mNode); + if (component) { + bool ret = AtspiWrapper::Atspi_component_grab_highlight(component, NULL); + g_object_unref(component); + return ret; + } + else + return false; +} + void AtspiAccessibleNode::refresh(bool updateAll) { AtspiWrapper::Atspi_accessible_clear_cache(mNode); diff --git a/libaurum/src/Impl/Accessibility/AtspiWrapper.cc b/libaurum/src/Impl/Accessibility/AtspiWrapper.cc index f18867d..d1b3b62 100644 --- a/libaurum/src/Impl/Accessibility/AtspiWrapper.cc +++ b/libaurum/src/Impl/Accessibility/AtspiWrapper.cc @@ -177,6 +177,12 @@ gboolean AtspiWrapper::Atspi_component_grab_focus(AtspiComponent *obj, GError ** return atspi_component_grab_focus(obj, error); } +gboolean AtspiWrapper::Atspi_component_grab_highlight(AtspiComponent *obj, GError **error) +{ + std::unique_lock lock(mMutex); + return atspi_component_grab_highlight(obj, error); +} + void AtspiWrapper::Atspi_accessible_set_cache_mask(AtspiAccessible *node, AtspiCache mask) { std::unique_lock lock(mMutex); diff --git a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc index df9bd22..e8aa1d5 100644 --- a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc +++ b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc @@ -198,6 +198,11 @@ bool MockAccessibleNode::setFocus() return false; } +bool MockAccessibleNode::moveTo() +{ + return false; +} + void MockAccessibleNode::updateTextMinBoundingRect() { } diff --git a/libaurum/src/UiObject.cc b/libaurum/src/UiObject.cc index 4b200c2..a1f6e0c 100644 --- a/libaurum/src/UiObject.cc +++ b/libaurum/src/UiObject.cc @@ -442,6 +442,11 @@ bool UiObject::setFocus() const return mNode->setFocus(); } +bool UiObject::moveTo() const +{ + return mNode->moveTo(); +} + bool UiObject::isValid() const { return mNode->isValid(); diff --git a/org.tizen.aurum-bootstrap/inc/AurumServiceImpl.h b/org.tizen.aurum-bootstrap/inc/AurumServiceImpl.h index dc7a6ce..04159cc 100644 --- a/org.tizen.aurum-bootstrap/inc/AurumServiceImpl.h +++ b/org.tizen.aurum-bootstrap/inc/AurumServiceImpl.h @@ -132,6 +132,9 @@ public: ::grpc::Status getAngle(::grpc::ServerContext *context, const ::aurum::ReqGetAngle *request, ::aurum::RspGetAngle *response) override; + ::grpc::Status moveTo(::grpc::ServerContext *context, + const ::aurum::ReqMoveTo *request, + ::aurum::RspMoveTo *response) override; public: int WAIT_TIMEOUT_MS; }; diff --git a/org.tizen.aurum-bootstrap/inc/Commands/Commands.h b/org.tizen.aurum-bootstrap/inc/Commands/Commands.h index a98c138..bedd096 100644 --- a/org.tizen.aurum-bootstrap/inc/Commands/Commands.h +++ b/org.tizen.aurum-bootstrap/inc/Commands/Commands.h @@ -42,6 +42,7 @@ #include "Commands/GetScreenSizeCommand.h" #include "Commands/ActionAndWaitEventCommand.h" #include "Commands/SetFocusCommand.h" +#include "Commands/MoveToCommand.h" #include "Commands/GetActiveAppToolkitNameCommand.h" #include "Commands/GetTextMinBoundingRectCommand.h" #include "Commands/SetXMLSyncCommand.h" diff --git a/org.tizen.aurum-bootstrap/inc/Commands/MoveToCommand.h b/org.tizen.aurum-bootstrap/inc/Commands/MoveToCommand.h new file mode 100644 index 0000000..40d96cf --- /dev/null +++ b/org.tizen.aurum-bootstrap/inc/Commands/MoveToCommand.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 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" + +class MoveToCommand : public Command { +private: + const ::aurum::ReqMoveTo *mRequest; + ::aurum::RspMoveTo *mResponse; + +public: + MoveToCommand(const ::aurum::ReqMoveTo *request, + ::aurum::RspMoveTo *response); + ::grpc::Status execute() override; +}; diff --git a/org.tizen.aurum-bootstrap/meson.build b/org.tizen.aurum-bootstrap/meson.build index eb3876b..9a9b29b 100644 --- a/org.tizen.aurum-bootstrap/meson.build +++ b/org.tizen.aurum-bootstrap/meson.build @@ -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/MoveToCommand.cc'), files('src/Commands/GetActiveAppToolkitNameCommand.cc'), files('src/Commands/GetTextMinBoundingRectCommand.cc'), files('src/Commands/SetXMLSyncCommand.cc'), diff --git a/org.tizen.aurum-bootstrap/src/AurumServiceImpl.cc b/org.tizen.aurum-bootstrap/src/AurumServiceImpl.cc index ad9aa13..1b3fa2f 100644 --- a/org.tizen.aurum-bootstrap/src/AurumServiceImpl.cc +++ b/org.tizen.aurum-bootstrap/src/AurumServiceImpl.cc @@ -303,4 +303,12 @@ aurumServiceImpl::~aurumServiceImpl() { std::unique_ptr cmd = std::make_unique(request, response); return execute(cmd.get(), true); +} + +::grpc::Status aurumServiceImpl::moveTo(::grpc::ServerContext *context, + const ::aurum::ReqMoveTo *request, + ::aurum::RspMoveTo *response) +{ + std::unique_ptr cmd = std::make_unique(request, response); + return execute(cmd.get(), true); } \ No newline at end of file diff --git a/org.tizen.aurum-bootstrap/src/Commands/MoveToCommand.cc b/org.tizen.aurum-bootstrap/src/Commands/MoveToCommand.cc new file mode 100644 index 0000000..6503639 --- /dev/null +++ b/org.tizen.aurum-bootstrap/src/Commands/MoveToCommand.cc @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 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 "MoveToCommand.h" +#include "UiObject.h" + +MoveToCommand::MoveToCommand(const ::aurum::ReqMoveTo *request, + ::aurum::RspMoveTo *response) + : mRequest{request}, mResponse{response} +{ +} + +::grpc::Status MoveToCommand::execute() +{ + LOGI("MoveTo --------------- "); + + bool ret = false; + + ObjectMapper *mObjMap = ObjectMapper::getInstance(); + std::shared_ptr obj = mObjMap->getElement(mRequest->elementid()); + if (obj) ret = obj->moveTo(); + + if (ret) mResponse->set_status(::aurum::RspStatus::OK); + else mResponse->set_status(::aurum::RspStatus::ERROR); + + return grpc::Status::OK; +} diff --git a/protocol/aurum.proto b/protocol/aurum.proto index 39a2635..9ee7ae4 100644 --- a/protocol/aurum.proto +++ b/protocol/aurum.proto @@ -38,6 +38,7 @@ service Bootstrap { rpc setTimeout(ReqSetTimeout) returns (RspSetTimeout) {} rpc setXMLSync(ReqSetXMLSync) returns (RspSetXMLSync) {} rpc getAngle(ReqGetAngle) returns (RspGetAngle) {} + rpc moveTo(ReqMoveTo) returns (RspMoveTo) {} } // ------------------------------------ // @@ -633,6 +634,14 @@ message RspSetFocus { RspStatus status = 1; } +message ReqMoveTo { + string elementId = 1; +} + +message RspMoveTo { + RspStatus status = 1; +} + message ReqGetActiveAppToolkitName { }