From a325a76d32c0dda09c715d4a98e3503b14dee273 Mon Sep 17 00:00:00 2001 From: zhanghang Date: Fri, 12 Sep 2025 09:51:40 +0800 Subject: [PATCH] fix SearchElementInfoBySpecificProperty Signed-off-by: zhanghang --- .../ohos/osal/js_accessibility_manager.cpp | 31 +++++++++++++++++++ adapter/ohos/osal/js_accessibility_manager.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/adapter/ohos/osal/js_accessibility_manager.cpp b/adapter/ohos/osal/js_accessibility_manager.cpp index 0a0199b283a..7eb41ba860c 100644 --- a/adapter/ohos/osal/js_accessibility_manager.cpp +++ b/adapter/ohos/osal/js_accessibility_manager.cpp @@ -6089,6 +6089,37 @@ void JsAccessibilityManager::SearchElementInfosByTextNG(const SearchParameter& s void JsAccessibilityManager::SearchElementInfoBySpecificProperty(const int64_t elementId, const SpecificPropertyParam ¶m, const int32_t requestId, AccessibilityElementOperatorCallback &callback, const int32_t windowId) +{ + auto context = GetPipelineByWindowId(windowId); + if (!context) { + std::list infos; + std::list treeInfos; + callback.SetSearchElementInfoBySpecificPropertyResult(infos, treeInfos, requestId); + } + auto ngPipeline = AceType::DynamicCast(context); + if (ngPipeline) { + ngPipeline->AddAfterRenderTask( + [weak = WeakClaim(this), elementId, param, requestId, &callback, windowId]() { + auto jsAccessibilityManager = weak.Upgrade(); + if (!jsAccessibilityManager) { + std::list infos; + std::list treeInfos; + callback.SetSearchElementInfoBySpecificPropertyResult(infos, treeInfos, requestId); + return; + } + jsAccessibilityManager->SearchElementInfoBySpecificPropertyInner( + elementId, param, requestId, callback, windowId); + } + ); + ngPipeline->RequestFrame(); + } else { + SearchElementInfoBySpecificPropertyInner(elementId, param, requestId, callback, windowId); + } +} + +void JsAccessibilityManager::SearchElementInfoBySpecificPropertyInner(const int64_t elementId, + const SpecificPropertyParam ¶m, const int32_t requestId, + AccessibilityElementOperatorCallback &callback, const int32_t windowId) { TAG_LOGD(AceLogTag::ACE_ACCESSIBILITY, "elementId: %{public}" PRId64 ", propType: %{public}d," "propTarget: %{public}s", elementId, param.propertyType, param.propertyTarget.c_str()); diff --git a/adapter/ohos/osal/js_accessibility_manager.h b/adapter/ohos/osal/js_accessibility_manager.h index 7a5008aa972..0715e2cceff 100644 --- a/adapter/ohos/osal/js_accessibility_manager.h +++ b/adapter/ohos/osal/js_accessibility_manager.h @@ -242,6 +242,8 @@ public: Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode, const int32_t windowId); void SearchElementInfoBySpecificProperty(const int64_t elementId, const SpecificPropertyParam ¶m, const int32_t requestId, AccessibilityElementOperatorCallback &callback, const int32_t windowId); + void SearchElementInfoBySpecificPropertyInner(const int64_t elementId, const SpecificPropertyParam ¶m, + const int32_t requestId, AccessibilityElementOperatorCallback &callback, const int32_t windowId); void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId, Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId); void SearchDefaultFocusByWindowId(const int32_t windowId, int32_t pageId, const int32_t requestId, -- Gitee