* Copyright (c) 2024-2026 Huawei Device Co., Ltd.
* 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.
*/
#ifndef FOUNDATION_ACE_INTERFACE_UI_SESSION_MANAGER_H
#define FOUNDATION_ACE_INTERFACE_UI_SESSION_MANAGER_H
#include <atomic>
#include <cstdint>
#include <functional>
#include <map>
#include <memory>
#include <mutex>
#include <set>
#include <shared_mutex>
#include <unordered_map>
#include <vector>
#include "base/utils/macros.h"
#include "param_config.h"
#include "ui_content_errors.h"
#include "ui_content_proxy_error_code.h"
#include "ui_translate_type.h"
#include "ui_translate_manager.h"
namespace OHOS {
class IRemoteObject;
template<typename T>
class sptr;
namespace Media {
class PixelMap;
}
}
namespace OHOS::Ace {
class InspectorJsonValue;
class ACE_FORCE_EXPORT UiSessionManager {
public:
using InspectorFunction = std::function<void(bool onlyNeedVisible, ParamConfig config)>;
using NotifyAllWebFunction = std::function<void(bool isRegister)>;
using GetPixelMapFunction = std::function<void()>;
using NotifySendCommandFunction = std::function<void(int32_t id, const std::string& command)>;
using NotifySendCommandAsyncFunction = std::function<int32_t(int32_t id, const std::string& command)>;
using SendCommandFunction = std::function<void(int32_t value)>;
using RelaxedCommandFunction = std::function<void(const std::string& command)>;
using ExeAppAIFunctionFunction = std::function<std::pair<uint32_t, std::string>(
const std::string&, const std::string&, const sptr<IRemoteObject>&, int32_t)>;
using GetHitTestInfoFunction = std::function<void(InteractionParamConfig config)>;
using GetStateMgmtInfoFunction = std::function<void(const std::string& componentName,
const std::string& propertyName, const std::string& jsonPath, bool onlyVisible)>;
using GetImagesByIdFunction =
std::function<void(const std::vector<int32_t>&, const std::map<int32_t, std::vector<int32_t>>&)>;
using GetWebInfoByRequestFunction = std::function<void(int32_t, const std::string&)>;
using GetAbilityLanguageInfoFunction = std::function<int32_t(std::string&, std::string&)>;
using PageTranslateTextFunction = std::function<void(bool)>;
using PageTranslateEndFunction = std::function<void()>;
using PageTranslateResetFunction = std::function<void(int32_t)>;
using PageTranslateResultFunction = std::function<void(const std::vector<TranslateResult>&)>;
using PageSceneDetectFunction = std::function<void(int32_t, const std::string&, bool)>;
enum class WebPageSceneOp {
RegisterRules,
UnregisterRules,
Traverse,
};
using WebPageSceneFunction = std::function<void(WebPageSceneOp op, int32_t processId, const std::string& ruleJson,
bool isGetResult)>;
* @description: Get ui_manager instance,this object process singleton
* @return The return value is ui_manager singleton
*/
static UiSessionManager* GetInstance();
* @description: execute click callback when component click event occurs
*/
virtual void ReportClickEvent(const std::string& data) {};
* @description: execute search callback when component search event occurs
*/
virtual void ReportSearchEvent(const std::string& data) {};
* @description: execute text change callback when component text change event occurs
*/
virtual void ReportTextChangeEvent(const std::string& data) {};
* @description: execute switch callback when page switch to another page occurs
*/
virtual void ReportRouterChangeEvent(const std::string& data) {};
* @description: execute click callback when page some component change occurs
*/
virtual void ReportComponentChangeEvent(const std::string& key, const std::string& value, uint32_t eventType) {};
* @description: execute click callback when page some component change occurs
*/
virtual void ReportComponentChangeEvent(int32_t nodeId, const std::string& key,
const std::string& value, uint32_t eventType) {};
* @description: execute callback when scroll event occurs
*/
virtual void ReportScrollEvent(const std::string& data) {};
* @description: execute callback when life cycle event occurs
*/
virtual void ReportLifeCycleEvent(const std::string& data) {};
* @description: execute callback when select text event occurs
*/
virtual void ReportSelectTextEvent(const std::string& data) {};
* @description: get current page inspector tree value
*/
virtual void GetInspectorTree(ParamConfig config = ParamConfig()) {};
virtual void AddValueForTree(int32_t id, const std::string& value) {};
virtual void WebTaskNumsChange(int32_t num) {};
virtual void ReportInspectorTreeValue(const std::string& value) {};
virtual void SaveForSendCommandFunction(NotifySendCommandFunction&& function) {};
virtual void SaveForSendCommandAsyncFunction(NotifySendCommandAsyncFunction&& function) {};
virtual void SaveInspectorTreeFunction(InspectorFunction&& function) {};
virtual void SaveRegisterForWebFunction(NotifyAllWebFunction&& function) {};
virtual void SaveGetHitTestInfoCallback(GetHitTestInfoFunction&& function) {};
virtual void GetLatestHitTestNodeInfosForTouch(InteractionParamConfig config) {};
virtual void ReportHitTestNodeInfos(const std::string& data) {};
* @description: Report web editing area focus/blur/textChange event
* @param type The type of event (focus, blur, or textChange), defaults to empty string
*/
virtual void ReportWebInputEvent(
int64_t accessibilityId, const std::string& data, const std::string& type = "") {};
virtual void NotifyAllWebPattern(bool isRegister) {};
virtual void NotifySendCommandPattern(int32_t id, const std::string& command) {};
virtual int32_t NotifySendCommandAsyncPattern(int32_t id, const std::string& command) { return 11; };
virtual void SetClickEventRegistered(bool status) {};
virtual void SetSearchEventRegistered(bool status) {};
virtual void SetTextChangeEventRegistered(bool status) {};
virtual void OnRouterChange(const std::string& path, const std::string& event) {};
virtual void SetRouterChangeEventRegistered(bool status) {};
virtual void SetComponentChangeEventRegistered(bool status) {};
virtual void SetComponentChangeEventMask(uint32_t mask) {};
virtual void SetScrollEventRegistered(bool status) {};
virtual void SetLifeCycleEventRegistered(bool status) {};
virtual void SetSelectTextEventRegistered(bool status) {};
virtual bool GetClickEventRegistered()
{
return false;
};
virtual bool GetSearchEventRegistered()
{
return false;
};
virtual bool GetTextChangeEventRegistered()
{
return false;
};
virtual bool GetRouterChangeEventRegistered()
{
return false;
};
virtual bool GetComponentChangeEventRegistered()
{
return false;
};
virtual bool NeedComponentChangeTypeReporting(uint32_t eventType)
{
return false;
};
virtual bool GetWebFocusRegistered()
{
return false;
};
virtual bool GetScrollEventRegistered()
{
return false;
};
virtual bool GetLifeCycleEventRegistered()
{
return false;
};
virtual bool GetSelectTextEventRegistered()
{
return false;
};
virtual void SaveBaseInfo(const std::string& info) {};
virtual void SendBaseInfo(int32_t processId) {};
virtual void SaveGetPixelMapFunction(GetPixelMapFunction&& function) {};
virtual void SaveGetImagesByIdFunction(GetImagesByIdFunction&& function) {};
virtual void SaveTranslateManager(std::shared_ptr<UiTranslateManager> uiTranslateManager,
int32_t instanceId) {};
virtual void SaveGetCurrentInstanceIdCallback(std::function<int32_t()>&& callback) {};
virtual void RemoveSaveGetCurrentInstanceId(int32_t instanceId) {};
virtual void SaveArkUIPageTranslateFunctions(PageTranslateTextFunction&& getTextFunction,
PageTranslateTextFunction&& startFunction, PageTranslateEndFunction&& endFunction,
PageTranslateResetFunction&& resetFunction, PageTranslateResultFunction&& resultFunction) {};
virtual std::shared_ptr<UiTranslateManager> GetCurrentTranslateManager() {
std::shared_ptr<UiTranslateManager> currentTranslateManager = nullptr;
return currentTranslateManager;
};
virtual void GetWebViewLanguage() {};
virtual void RegisterPipeLineGetCurrentPageName(std::function<std::string()>&& callback) {};
virtual void GetCurrentPageName() {};
virtual void SendCurrentPageName(const std::string& result) {};
virtual void SendCurrentLanguage(std::string result) {};
virtual void SaveProcessId(std::string key, int32_t id) {};
virtual void EraseProcessId(const std::string& key, int32_t targetPid) {};
virtual void MarkPageTranslateOwner(int32_t processId) {};
virtual void OnPageTranslateResultHandled(int32_t processId) {};
virtual void GetWebTranslateText(std::string extraData, bool isContinued) {};
virtual int32_t GetPageTranslateText(const std::string& request)
{
return FAILED;
};
virtual int32_t StartPageTranslate(const std::string& request)
{
return FAILED;
};
virtual void EndPageTranslate() {};
virtual void ResetPageTranslate(int32_t nodeId = -1) {};
virtual void SendPageTranslateResult(const std::string& result) {};
virtual void SendPageTextToAI(int32_t nodeId, const std::string& text, int64_t version) {};
virtual int32_t GetCurrentAbilityLanguageInfo(std::string& language, std::string& region)
{
return FAILED;
};
virtual void SaveGetCurrentAbilityLanguageInfoFunction(GetAbilityLanguageInfoFunction&& callback) {};
virtual void GetStateMgmtInfo(const std::string& componentName, const std::string& propertyName,
const std::string& jsonPath, bool onlyVisible = false) {};
virtual void SendWebTextToAI(int32_t nodeId, std::string res) {};
virtual void SendTranslateResult(int32_t nodeId, std::vector<std::string> results, std::vector<int32_t> ids) {};
virtual void SendTranslateResult(int32_t nodeId, std::string result) {};
virtual void ResetTranslate(int32_t nodeId = -1) {};
virtual void GetPixelMap() {};
virtual void GetMultiImagesById(const std::vector<int32_t>& arkUIIds,
const std::map<int32_t, std::vector<int32_t>>& arkWebs) {};
virtual void SendCommand(const std::string& command) {};
virtual void SaveSendCommandFunction(SendCommandFunction&& function) {};
virtual void SaveRelaxedCommandFunction(RelaxedCommandFunction&& function) {};
virtual void SaveGetStateMgmtInfoFunction(GetStateMgmtInfoFunction&& callback) {};
virtual void SaveGetWebInfoByRequestFunction(GetWebInfoByRequestFunction&& callback) {};
virtual void GetWebInfoByRequest(int32_t webId, const std::string& request) {};
virtual void SendWebInfoByRequest(uint32_t windowId, int32_t webId, const std::string& request,
const std::string& result, WebRequestErrorCode errorCode) {};
virtual void SendPixelMap(const std::vector<std::pair<int32_t, std::shared_ptr<Media::PixelMap>>>& maps) {};
virtual void SendArkUIImagesById(int32_t windowId,
const std::unordered_map<int32_t, std::shared_ptr<Media::PixelMap>>& componentImages,
MultiImageQueryErrorCode arkUIErrorCode) {};
virtual void SendArkWebImagesById(int32_t windowId, const std::map<int32_t, std::map<int32_t,
std::shared_ptr<Media::PixelMap>>>& webImages, MultiImageQueryErrorCode arkWebErrorCode) {};
virtual void GetVisibleInspectorTree(ParamConfig config = ParamConfig()) {};
virtual void RegisterPipeLineExeAppAIFunction(ExeAppAIFunctionFunction&& callback) {};
virtual void ExeAppAIFunction(const std::string& funcName, const std::string& params,
const sptr<IRemoteObject>& remoteObj, int32_t nodeId = -1) {};
virtual void SendExeAppAIFunctionResult(uint32_t result, const std::string& data) {};
virtual void GetSpecifiedContentOffsets(int32_t id, const std::string& content) {};
virtual void HighlightSpecifiedContent(
int32_t id, const std::string& content, const std::vector<std::string>& nodeIds, const std::string& configs) {};
virtual void ReportSelectText() {};
virtual void SaveGetSpecifiedContentOffsetsFunction(
std::function<std::vector<std::pair<float, float>>(int32_t id, const std::string& content)>&& callback) {};
virtual void SaveHighlightSpecifiedContentFunction(std::function<void(int32_t id, const std::string& content,
const std::vector<std::string>& nodeIds, const std::string& configs)>&& callback) {};
virtual void SaveSelectTextFunction(std::function<void()>&& callback) {};
virtual void SendSpecifiedContentOffsets(const std::vector<std::pair<float, float>>& offsets) {};
virtual void RegisterContentChangeCallback(const ContentChangeConfig& config) {};
virtual void UnregisterContentChangeCallback() {};
virtual void ReportContentChangeEvent(ChangeType type, const std::string& simpleTree) {};
virtual void SetStartContentChangeDetectCallback(std::function<void(ContentChangeConfig)>&&) {};
virtual void SetStopContentChangeDetectCallback(std::function<void()>&&) {};
virtual void ReportGetStateMgmtInfo(std::vector<std::string> results) {};
virtual int32_t RegisterPageSceneRules(int32_t processId, const std::string& ruleJson)
{
return NOT_CONNECTED;
};
virtual int32_t UnregisterPageSceneRules(int32_t processId, const std::string& ruleSetId)
{
return NOT_CONNECTED;
};
virtual int32_t GetPageScene(int32_t processId, const std::string& ruleJsonOrRuleSetId)
{
return NOT_CONNECTED;
};
virtual bool GetPageSceneRulesRegistered()
{
return false;
};
virtual void ReportPageSceneEvent(int32_t processId, const std::string& sceneJson, bool isGetResult) {};
virtual void CompleteGetPageScene(int32_t processId) {};
virtual void NotifyPageSceneNodeChanged(const std::string& nodeTag, bool isAttach) {};
virtual void NotifyPageSceneContentChanged() {};
virtual void FlushPageSceneNodeChanged() {};
virtual void SavePageSceneDetectFunction(PageSceneDetectFunction&& function) {};
virtual void SaveWebPageSceneFunction(WebPageSceneFunction&& function) {};
protected:
UiSessionManager() = default;
virtual ~UiSessionManager() = default;
std::map<std::string, std::set<int32_t>> processMap_;
std::shared_mutex processMapMutex_;
std::atomic<int32_t> clickEventRegisterProcesses_ = 0;
std::atomic<int32_t> searchEventRegisterProcesses_ = 0;
std::atomic<int32_t> textChangeEventRegisterProcesses_ = 0;
std::atomic<int32_t> routerChangeEventRegisterProcesses_ = 0;
std::atomic<int32_t> componentChangeEventRegisterProcesses_ = 0;
uint32_t componentChangeEventMask_ = 0;
std::atomic<int32_t> scrollEventRegisterProcesses_ = 0;
std::atomic<int32_t> lifeCycleEventRegisterProcesses_ = 0;
std::atomic<int32_t> selectTextEventRegisterProcesses_ = 0;
std::atomic<int32_t> pageSceneRuleRegisterProcesses_ = 0;
bool webFocusEventRegistered = false;
std::mutex webFocusEventRegisteredMutex_;
InspectorFunction inspectorFunction_ = 0;
std::mutex inspectorFunctionMutex_;
NotifyAllWebFunction notifyWebFunction_ = 0;
std::mutex notifyWebFunctionMutex_;
GetPixelMapFunction getPixelMapFunction_ = 0;
std::mutex getPixelMapFunctionMutex_;
GetHitTestInfoFunction getHitTestInfoFunction_ = 0;
std::mutex getHitTestInfoFunctionMutex_;
GetImagesByIdFunction getImagesByIdFunction_ = 0;
std::mutex getImagesByIdFunctionMutex_;
NotifySendCommandFunction notifySendCommandFunction_ = 0;
std::mutex notifySendCommandFunctionMutex_;
NotifySendCommandAsyncFunction notifySendCommandAsyncFunction_ = 0;
std::mutex notifySendCommandAsyncFunctionMutex_;
GetStateMgmtInfoFunction getStateMgmtInfoFunction_ = 0;
std::mutex getStateMgmtInfoFunctionMutex_;
std::shared_ptr<InspectorJsonValue> jsonValue_ = nullptr;
std::mutex jsonValueMutex_;
std::atomic<int32_t> webTaskNums_ = 0;
std::string baseInfo_;
std::mutex baseInfoMutex_;
std::map<int32_t, std::shared_ptr<UiTranslateManager>> translateManagerMap_;
std::shared_mutex translateManagerMutex_;
std::function<int32_t()> getInstanceIdCallback_;
std::shared_mutex getInstanceIdCallbackMutex_;
std::function<std::string()> pipelineContextPageNameCallback_;
std::mutex pipelineContextPageNameCallbackMutex_;
std::function<std::vector<std::pair<float, float>>(int32_t id,
const std::string& content)> getSpecifiedContentOffsetsCallback_;
std::mutex getSpecifiedContentOffsetsCallbackMutex_;
std::function<void(
int32_t id, const std::string& content, const std::vector<std::string>& nodeIds, const std::string& configs)>
highlightSpecifiedContentCallback_;
std::mutex highlightSpecifiedContentCallbackMutex_;
std::function<void()> selectTextCallback_;
std::mutex selectTextCallbackMutex_;
SendCommandFunction sendCommandFunction_ = 0;
std::mutex sendCommandFunctionMutex_;
ExeAppAIFunctionFunction pipelineExeAppAIFunctionCallback_;
std::mutex pipelineExeAppAIFunctionCallbackMutex_;
std::function<void(ContentChangeConfig)> startContentChangeDetectCallback_;
std::mutex startContentChangeDetectCallbackMutex_;
std::function<void()> stopContentChangeDetectCallback_;
std::mutex stopContentChangeDetectCallbackMutex_;
GetWebInfoByRequestFunction getWebInfoByRequestCallback_;
std::mutex getWebInfoByRequestCallbackMutex_;
GetAbilityLanguageInfoFunction getAbilityLanguageInfoCallback_;
std::mutex getAbilityLanguageInfoCallbackMutex_;
PageTranslateTextFunction getArkUIPageTranslateTextFunction_;
PageTranslateTextFunction startArkUIPageTranslateFunction_;
PageTranslateEndFunction endArkUIPageTranslateFunction_;
PageTranslateResetFunction resetArkUIPageTranslateFunction_;
PageTranslateResultFunction sendArkUIPageTranslateResultFunction_;
std::mutex arkUIPageTranslateFunctionMutex_;
RelaxedCommandFunction relaxedCommandFunction_ = nullptr;
PageSceneDetectFunction pageSceneDetectFunction_;
std::mutex pageSceneDetectFunctionMutex_;
WebPageSceneFunction webPageSceneFunction_;
std::mutex webPageSceneMutex_;
};
}
#endif