• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_ADAPTER_OHOS_CPP_ACE_CONTAINER_H
17 #define FOUNDATION_ACE_ADAPTER_OHOS_CPP_ACE_CONTAINER_H
18 
19 #include <cstddef>
20 #include <list>
21 #include <memory>
22 #include <mutex>
23 #include <optional>
24 
25 #include "display_manager.h"
26 #include "dm_common.h"
27 #include "interfaces/inner_api/ace/arkui_rect.h"
28 #include "native_engine/native_reference.h"
29 #include "native_engine/native_value.h"
30 
31 #include "adapter/ohos/entrance/ace_ability.h"
32 #include "adapter/ohos/entrance/platform_event_callback.h"
33 #include "base/memory/ace_type.h"
34 #include "base/resource/asset_manager.h"
35 #include "base/thread/task_executor.h"
36 #include "base/utils/noncopyable.h"
37 #include "base/utils/utils.h"
38 #include "base/view_data/view_data_wrap.h"
39 #include "base/view_data/hint_to_type_wrap.h"
40 #include "core/common/ace_view.h"
41 #include "core/common/container.h"
42 #include "core/common/display_info.h"
43 #include "core/common/font_manager.h"
44 #include "core/common/js_message_dispatcher.h"
45 #include "core/common/resource/resource_configuration.h"
46 #include "core/common/router_recover_record.h"
47 #include "core/components/common/layout/constants.h"
48 #include "core/pipeline/pipeline_context.h"
49 
50 namespace OHOS::Accessibility {
51 class AccessibilityElementInfo;
52 }
53 
54 namespace OHOS::Ace {
55 class FontManager;
56 }
57 
58 namespace OHOS::Ace::Platform {
59 using UIEnvCallback = std::function<void(const OHOS::Ace::RefPtr<OHOS::Ace::PipelineContext>& context)>;
60 using SharePanelCallback = std::function<void(const std::string& bundleName, const std::string& abilityName)>;
61 using DataHandlerErr = OHOS::Rosen::DataHandlerErr;
62 using SubSystemId = OHOS::Rosen::SubSystemId;
63 using DataConsumeCallback = OHOS::Rosen::DataConsumeCallback;
64 
65 struct ParsedConfig {
66     std::string colorMode;
67     std::string deviceAccess;
68     std::string languageTag;
69     std::string direction;
70     std::string densitydpi;
71     std::string themeTag;
72     std::string fontFamily;
73     std::string fontScale;
74     std::string fontWeightScale;
75     std::string colorModeIsSetByApp;
76     std::string mcc;
77     std::string mnc;
78     std::string preferredLanguage;
79     std::string fontId;
IsValidParsedConfig80     bool IsValid() const
81     {
82         return !(colorMode.empty() && deviceAccess.empty() && languageTag.empty() && direction.empty() &&
83                  densitydpi.empty() && themeTag.empty() && fontScale.empty() && fontWeightScale.empty() &&
84                  colorModeIsSetByApp.empty() && mcc.empty() && mnc.empty() && fontFamily.empty() &&
85                  preferredLanguage.empty() && fontId.empty());
86     }
87 };
88 
89 struct SingleHandTransform {
90     SingleHandTransform() = default;
SingleHandTransformSingleHandTransform91     SingleHandTransform(float x, float y, float scaleX, float scaleY)
92         : x_(x), y_(y), scaleX_(scaleX), scaleY_(scaleY) {}
93 
94     float x_ = 0.0f;
95     float y_ = 0.0f;
96     float scaleX_ = 1.0f;
97     float scaleY_ = 1.0f;
98 };
99 
100 using ConfigurationChangedCallback = std::function<void(const ParsedConfig& config, const std::string& configuration)>;
101 
102 class ACE_FORCE_EXPORT AceContainer : public Container, public JsMessageDispatcher {
103     DECLARE_ACE_TYPE(AceContainer, Container, JsMessageDispatcher);
104 
105 public:
106     AceContainer(int32_t instanceId, FrontendType type, std::shared_ptr<OHOS::AppExecFwk::Ability> aceAbility,
107         std::unique_ptr<PlatformEventCallback> callback, bool useCurrentEventRunner = false,
108         bool useNewPipeline = false);
109     AceContainer(int32_t instanceId, FrontendType type, std::weak_ptr<OHOS::AbilityRuntime::Context> runtimeContext,
110         std::weak_ptr<OHOS::AppExecFwk::AbilityInfo> abilityInfo, std::unique_ptr<PlatformEventCallback> callback,
111         bool useCurrentEventRunner = false, bool isSubContainer = false, bool useNewPipeline = false);
112 
113     AceContainer(int32_t instanceId, FrontendType type, std::weak_ptr<OHOS::AbilityRuntime::Context> runtimeContext,
114         std::weak_ptr<OHOS::AppExecFwk::AbilityInfo> abilityInfo, std::unique_ptr<PlatformEventCallback> callback,
115         std::shared_ptr<TaskWrapper> taskWrapper, bool useCurrentEventRunner = false, bool isSubContainer = false,
116         bool useNewPipeline = false);
117 
118     ~AceContainer() override;
119 
120     bool UpdatePopupUIExtension(const RefPtr<NG::FrameNode>& node,
121         uint32_t autoFillSessionId, bool isNative = true) override;
122 
123     bool ClosePopupUIExtension(uint32_t autoFillSessionId) override;
124 
125     void Initialize() override;
126 
127     void Destroy() override;
128 
129     bool IsKeyboard() override;
130 
131     void DestroyView() override;
132 
133     static bool Register();
134 
GetInstanceId()135     int32_t GetInstanceId() const override
136     {
137         if (aceView_) {
138             return aceView_->GetInstanceId();
139         }
140         return -1;
141     }
142 
GetFrontend()143     RefPtr<Frontend> GetFrontend() const override
144     {
145         std::lock_guard<std::mutex> lock(frontendMutex_);
146         return frontend_;
147     }
148 
SetCardFrontend(WeakPtr<Frontend> frontend,int64_t cardId)149     void SetCardFrontend(WeakPtr<Frontend> frontend, int64_t cardId) override
150     {
151         std::lock_guard<std::mutex> lock(cardFrontMutex_);
152         cardFrontendMap_.try_emplace(cardId, frontend);
153     }
154 
GetCardFrontend(int64_t cardId)155     WeakPtr<Frontend> GetCardFrontend(int64_t cardId) const override
156     {
157         std::lock_guard<std::mutex> lock(cardFrontMutex_);
158         auto it = cardFrontendMap_.find(cardId);
159         if (it != cardFrontendMap_.end()) {
160             return it->second;
161         }
162         return nullptr;
163     }
164 
SetCardPipeline(WeakPtr<PipelineBase> pipeline,int64_t cardId)165     void SetCardPipeline(WeakPtr<PipelineBase> pipeline, int64_t cardId) override
166     {
167         std::lock_guard<std::mutex> lock(cardPipelineMutex_);
168         cardPipelineMap_.try_emplace(cardId, pipeline);
169     }
170 
GetCardPipeline(int64_t cardId)171     WeakPtr<PipelineBase> GetCardPipeline(int64_t cardId) const override
172     {
173         std::lock_guard<std::mutex> lock(cardPipelineMutex_);
174         auto it = cardPipelineMap_.find(cardId);
175         if (it == cardPipelineMap_.end()) {
176             return nullptr;
177         }
178         return it->second;
179     }
180 
GetTaskExecutor()181     RefPtr<TaskExecutor> GetTaskExecutor() const override
182     {
183         return taskExecutor_;
184     }
185 
SetAssetManager(const RefPtr<AssetManager> & assetManager)186     void SetAssetManager(const RefPtr<AssetManager>& assetManager)
187     {
188         assetManager_ = assetManager;
189         if (frontend_) {
190             frontend_->SetAssetManager(assetManager);
191         }
192     }
193 
GetAssetManager()194     RefPtr<AssetManager> GetAssetManager() const override
195     {
196         return assetManager_;
197     }
198 
GetPlatformResRegister()199     RefPtr<PlatformResRegister> GetPlatformResRegister() const override
200     {
201         return resRegister_;
202     }
203 
GetPipelineContext()204     RefPtr<PipelineBase> GetPipelineContext() const override
205     {
206         std::lock_guard<std::mutex> lock(pipelineMutex_);
207         return pipelineContext_;
208     }
209 
GetViewWidth()210     int32_t GetViewWidth() const override
211     {
212         return aceView_ ? aceView_->GetWidth() : 0;
213     }
214 
GetViewHeight()215     int32_t GetViewHeight() const override
216     {
217         return aceView_ ? aceView_->GetHeight() : 0;
218     }
219 
GetViewPosX()220     int32_t GetViewPosX() const override
221     {
222         return aceView_ ? aceView_->GetPosX() : 0;
223     }
224 
GetViewPosY()225     int32_t GetViewPosY() const override
226     {
227         return aceView_ ? aceView_->GetPosY() : 0;
228     }
229 
GetAceView()230     RefPtr<AceView> GetAceView() const override
231     {
232         std::lock_guard<std::mutex> lock(viewMutex_);
233         return aceView_;
234     }
235 
GetView()236     void* GetView() const override
237     {
238         std::lock_guard<std::mutex> lock(viewMutex_);
239         return static_cast<void*>(AceType::RawPtr(aceView_));
240     }
241 
SetWindowModal(WindowModal windowModal)242     void SetWindowModal(WindowModal windowModal)
243     {
244         windowModal_ = windowModal;
245     }
246 
SetInstallationFree(bool installationFree)247     void SetInstallationFree(bool installationFree)
248     {
249         installationFree_ = installationFree;
250     }
251 
SetSharePanelCallback(SharePanelCallback && callback)252     void SetSharePanelCallback(SharePanelCallback&& callback)
253     {
254         sharePanelCallback_ = std::move(callback);
255     }
256 
SetColorScheme(ColorScheme colorScheme)257     void SetColorScheme(ColorScheme colorScheme)
258     {
259         colorScheme_ = colorScheme;
260     }
261 
GetResourceConfiguration()262     ResourceConfiguration GetResourceConfiguration() const override
263     {
264         return resourceInfo_.GetResourceConfiguration();
265     }
266 
SetResourceConfiguration(const ResourceConfiguration & config)267     void SetResourceConfiguration(const ResourceConfiguration& config)
268     {
269         resourceInfo_.SetResourceConfiguration(config);
270     }
271 
GetPackagePathStr()272     std::string GetPackagePathStr() const
273     {
274         return resourceInfo_.GetPackagePath();
275     }
276 
SetPackagePathStr(const std::string & packagePath)277     void SetPackagePathStr(const std::string& packagePath)
278     {
279         resourceInfo_.SetPackagePath(packagePath);
280     }
281 
GetHapPath()282     std::string GetHapPath() const override
283     {
284         return resourceInfo_.GetHapPath();
285     }
286 
GetResourceInfo()287     const ResourceInfo& GetResourceInfo() const
288     {
289         return resourceInfo_;
290     }
291 
SetOrientation(Orientation orientation)292     void SetOrientation(Orientation orientation) override
293     {
294         CHECK_NULL_VOID(uiWindow_);
295         auto dmOrientation = static_cast<Rosen::Orientation>(static_cast<uint32_t>(orientation));
296         uiWindow_->SetRequestedOrientation(dmOrientation);
297     }
298 
GetOrientation()299     Orientation GetOrientation() override
300     {
301         CHECK_NULL_RETURN(uiWindow_, Orientation::UNSPECIFIED);
302         auto dmOrientation = uiWindow_->GetRequestedOrientation();
303         return static_cast<Orientation>(static_cast<uint32_t>(dmOrientation));
304     }
305 
306     void SetHapPath(const std::string& hapPath);
307 
308     void Dispatch(
309         const std::string& group, std::vector<uint8_t>&& data, int32_t id, bool replyToComponent) const override;
310 
DispatchSync(const std::string & group,std::vector<uint8_t> && data,uint8_t ** resData,int64_t & position)311     void DispatchSync(
312         const std::string& group, std::vector<uint8_t>&& data, uint8_t** resData, int64_t& position) const override
313     {}
314 
315     void DispatchPluginError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override;
316 
317     bool Dump(const std::vector<std::string>& params, std::vector<std::string>& info) override;
318 
319     bool DumpInfo(const std::vector<std::string>& params);
320 
321     bool DumpRSNodeByStringID(const std::vector<std::string>& params);
322 
323     bool OnDumpInfo(const std::vector<std::string>& params);
324 
325     void TriggerGarbageCollection() override;
326 
327     void DumpHeapSnapshot(bool isPrivate) override;
328 
329     void DestroyHeapProfiler() override;
330 
331     void ForceFullGC() override;
332 
333     void SetLocalStorage(NativeReference* storage, const std::shared_ptr<OHOS::AbilityRuntime::Context>& context);
334 
335     void CheckAndSetFontFamily();
336 
OnFinish()337     void OnFinish()
338     {
339         if (platformEventCallback_) {
340             platformEventCallback_->OnFinish();
341         }
342     }
343 
OnStartAbility(const std::string & address)344     void OnStartAbility(const std::string& address)
345     {
346         if (platformEventCallback_) {
347             platformEventCallback_->OnStartAbility(address);
348         }
349     }
350 
GeneratePageId()351     int32_t GeneratePageId()
352     {
353         return pageId_++;
354     }
355 
GetHostClassName()356     std::string GetHostClassName() const override
357     {
358         return "";
359     }
360 
SetSharedRuntime(void * runtime)361     void SetSharedRuntime(void* runtime) override
362     {
363         sharedRuntime_ = runtime;
364     }
365 
SetPageProfile(const std::string & pageProfile)366     void SetPageProfile(const std::string& pageProfile)
367     {
368         pageProfile_ = pageProfile;
369     }
370 
IsSubContainer()371     bool IsSubContainer() const override
372     {
373         return isSubContainer_;
374     }
375 
IsFormRender()376     bool IsFormRender() const override
377     {
378         return isFormRender_;
379     }
380 
GetSharedRuntime()381     void* GetSharedRuntime() override
382     {
383         return sharedRuntime_;
384     }
385 
SetParentId(int32_t parentId)386     void SetParentId(int32_t parentId)
387     {
388         parentId_ = parentId;
389     }
390 
SetWindowScale(float windowScale)391     void SetWindowScale(float windowScale) override
392     {
393         windowScale_ = windowScale;
394     }
395 
GetWindowScale()396     float GetWindowScale() const override
397     {
398         return windowScale_;
399     }
400 
GetWindowDensity()401     double GetWindowDensity() const
402     {
403         if (!uiWindow_) {
404             return 1.0;
405         }
406         return static_cast<double>(uiWindow_->GetVirtualPixelRatio());
407     }
408 
GetParentId()409     int32_t GetParentId() const
410     {
411         return parentId_;
412     }
413 
SetFocusWindowId(uint32_t focusWindowId)414     void SetFocusWindowId(uint32_t focusWindowId)
415     {
416         if (pipelineContext_) {
417             pipelineContext_->SetFocusWindowId(focusWindowId);
418         }
419     }
420 
SetRealHostWindowId(uint32_t realHostWindowId)421     void SetRealHostWindowId(uint32_t realHostWindowId)
422     {
423         if (pipelineContext_) {
424             pipelineContext_->SetRealHostWindowId(realHostWindowId);
425         }
426     }
427 
IsUseCustomBg()428     bool IsUseCustomBg() const
429     {
430         return isUseCustomBg_;
431     }
432 
SetIsUseCustomBg(bool isUseCustomBg)433     void SetIsUseCustomBg(bool isUseCustomBg)
434     {
435         isUseCustomBg_ = isUseCustomBg;
436     }
437 
438     bool IsTransparentBg() const;
439 
440     static void CreateContainer(int32_t instanceId, FrontendType type, const std::string& instanceName,
441         std::shared_ptr<OHOS::AppExecFwk::Ability> aceAbility, std::unique_ptr<PlatformEventCallback> callback,
442         bool useCurrentEventRunner = false, bool useNewPipeline = false);
443 
444     static void DestroyContainer(int32_t instanceId, const std::function<void()>& destroyCallback = nullptr);
445     static UIContentErrorCode RunPage(
446         int32_t instanceId, const std::string& content, const std::string& params, bool isNamedRouter = false);
447     static UIContentErrorCode RunPage(
448         int32_t instanceId, const std::shared_ptr<std::vector<uint8_t>>& content, const std::string& params);
449     static bool PushPage(int32_t instanceId, const std::string& content, const std::string& params);
450     static bool RunDynamicPage(
451         int32_t instanceId, const std::string& content, const std::string& params, const std::string& entryPoint);
452     static bool OnBackPressed(int32_t instanceId);
453     static void OnShow(int32_t instanceId);
454     static void OnHide(int32_t instanceId);
455     static void OnActive(int32_t instanceId);
456     static void OnInactive(int32_t instanceId);
457     static void OnNewWant(int32_t instanceId, const std::string& data);
458     static bool OnStartContinuation(int32_t instanceId);
459     static std::string OnSaveData(int32_t instanceId);
460     static bool OnRestoreData(int32_t instanceId, const std::string& data);
461     static void OnCompleteContinuation(int32_t instanceId, int result);
462     static void OnRemoteTerminated(int32_t instanceId);
463     static void OnConfigurationUpdated(int32_t instanceId, const std::string& configuration);
464     static void OnNewRequest(int32_t instanceId, const std::string& data);
465     static void AddAssetPath(int32_t instanceId, const std::string& packagePath, const std::string& hapPath,
466         const std::vector<std::string>& paths);
467     static void AddLibPath(int32_t instanceId, const std::vector<std::string>& libPath);
468     static void SetView(const RefPtr<AceView>& view, double density, int32_t width, int32_t height,
469         sptr<OHOS::Rosen::Window> rsWindow, UIEnvCallback callback = nullptr);
470     static UIContentErrorCode SetViewNew(
471         const RefPtr<AceView>& view, double density, float width, float height, sptr<OHOS::Rosen::Window> rsWindow);
472     static void SetUIWindow(int32_t instanceId, sptr<OHOS::Rosen::Window> uiWindow);
473     static sptr<OHOS::Rosen::Window> GetUIWindow(int32_t instanceId);
474     static OHOS::AppExecFwk::Ability* GetAbility(int32_t instanceId);
475     static OHOS::AbilityRuntime::Context* GetRuntimeContext(int32_t instanceId);
476     static void SetWindowStyle(int32_t instanceId, WindowModal windowModal, ColorScheme colorScheme);
477     static std::pair<RouterRecoverRecord, UIContentErrorCode> RestoreRouterStack(
478         int32_t instanceId, const std::string& contentInfo, ContentInfoType type);
479     static std::string GetContentInfo(int32_t instanceId, ContentInfoType type);
480 
481     static RefPtr<AceContainer> GetContainer(int32_t instanceId);
482     static bool UpdatePage(int32_t instanceId, int32_t pageId, const std::string& content);
483     static bool RemoveOverlayBySubwindowManager(int32_t instanceId);
484 
485     // ArkTsCard
486     static std::shared_ptr<Rosen::RSSurfaceNode> GetFormSurfaceNode(int32_t instanceId);
487 
SetWindowName(const std::string & name)488     void SetWindowName(const std::string& name)
489     {
490         windowName_ = name;
491     }
492 
GetWindowName()493     std::string& GetWindowName()
494     {
495         return windowName_;
496     }
497 
SetWindowId(uint32_t windowId)498     void SetWindowId(uint32_t windowId) override
499     {
500         windowId_ = windowId;
501     }
502 
GetWindowId()503     uint32_t GetWindowId() const override
504     {
505         return windowId_;
506     }
507 
WindowIsShow()508     bool WindowIsShow() const override
509     {
510         if (!uiWindow_) {
511             return false;
512         }
513         return uiWindow_->GetWindowState() == Rosen::WindowState::STATE_SHOWN;
514     }
515 
516     void SetWindowPos(int32_t left, int32_t top);
517 
SetIsSubContainer(bool isSubContainer)518     void SetIsSubContainer(bool isSubContainer)
519     {
520         isSubContainer_ = isSubContainer;
521     }
522 
SetIsFormRender(bool isFormRender)523     void SetIsFormRender(bool isFormRender) override
524     {
525         isFormRender_ = isFormRender;
526     }
527 
528     void SetAppRunningUniqueId(const std::string& uniqueId) override;
529 
530     const std::string& GetAppRunningUniqueId() const override;
531 
532     void InitializeSubContainer(int32_t parentContainerId);
533     static void SetDialogCallback(int32_t instanceId, FrontendDialogCallback callback);
534 
535     std::shared_ptr<OHOS::AbilityRuntime::Context> GetAbilityContextByModule(
536         const std::string& bundle, const std::string& module);
537     void BuildResConfig(
538         ResourceConfiguration& resConfig, ConfigurationChange& configurationChange, const ParsedConfig& parsedConfig);
539     void UpdateConfiguration(const ParsedConfig& parsedConfig, const std::string& configuration);
540     void UpdateConfigurationSyncForAll(
541         const ParsedConfig& parsedConfig, const std::string& configuration);
542 
543     void NotifyConfigurationChange(
544         bool needReloadTransition, const ConfigurationChange& configurationChange = { false, false }) override;
545 
AddOnConfigurationChange(int32_t instanceId,ConfigurationChangedCallback && callback)546     void AddOnConfigurationChange(int32_t instanceId, ConfigurationChangedCallback &&callback)
547     {
548         configurationChangedCallbacks_.emplace(instanceId, std::move(callback));
549     }
550 
RemoveOnConfigurationChange(int32_t instanceId)551     void RemoveOnConfigurationChange(int32_t instanceId)
552     {
553         configurationChangedCallbacks_.erase(instanceId_);
554     }
555 
556     void HotReload() override;
557 
IsUseStageModel()558     bool IsUseStageModel() const override
559     {
560         return useStageModel_;
561     }
562 
GetCardFrontendMap(std::unordered_map<int64_t,WeakPtr<Frontend>> & cardFrontendMap)563     void GetCardFrontendMap(std::unordered_map<int64_t, WeakPtr<Frontend>>& cardFrontendMap) const override
564     {
565         cardFrontendMap = cardFrontendMap_;
566     }
567 
568     void SetToken(sptr<IRemoteObject>& token);
569     sptr<IRemoteObject> GetToken();
570     void SetParentToken(sptr<IRemoteObject>& token);
571     sptr<IRemoteObject> GetParentToken();
572     uint32_t GetParentWindowType() const;
573     uint32_t GetWindowType() const;
574 
GetWebHapPath()575     std::string GetWebHapPath() const override
576     {
577         return webHapPath_;
578     }
579 
580     NG::SafeAreaInsets GetViewSafeAreaByType(OHOS::Rosen::AvoidAreaType type);
581 
582     NG::SafeAreaInsets GetKeyboardSafeArea() override;
583 
584     Rosen::AvoidArea GetAvoidAreaByType(Rosen::AvoidAreaType type);
585 
586     // ArkTSCard
587     void UpdateFormData(const std::string& data);
588     void UpdateFormSharedImage(const std::map<std::string, sptr<OHOS::AppExecFwk::FormAshmem>>& imageDataMap);
589     void UpdateResource();
590 
591     void GetNamesOfSharedImage(std::vector<std::string>& picNameArray);
592     void UpdateSharedImage(std::vector<std::string>& picNameArray, std::vector<int32_t>& byteLenArray,
593         std::vector<int32_t>& fileDescriptorArray);
594     void GetImageDataFromAshmem(
595         const std::string& picName, Ashmem& ashmem, const RefPtr<PipelineBase>& pipelineContext, int len);
596 
597     bool IsLauncherContainer() override;
598     bool IsScenceBoardWindow() override;
599     bool IsUIExtensionWindow() override;
600     bool IsSceneBoardEnabled() override;
601     bool IsMainWindow() const override;
602     bool IsSubWindow() const override;
603     bool IsDialogWindow() const override;
604     bool IsSystemWindow() const override;
605     bool IsHostMainWindow() const override;
606     bool IsHostSubWindow() const override;
607     bool IsHostDialogWindow() const override;
608     bool IsHostSystemWindow() const override;
609     bool IsHostScenceBoardWindow() const override;
610     uint32_t GetParentMainWindowId(uint32_t currentWindowId) const override;
611 
612     void SetCurPointerEvent(const std::shared_ptr<MMI::PointerEvent>& currentEvent);
613     bool GetCurPointerEventInfo(DragPointerEvent& dragPointerEvent, StopDragCallback&& stopDragCallback) override;
614 
615     bool GetCurPointerEventSourceType(int32_t& sourceType) override;
616 
617     bool RequestAutoFill(const RefPtr<NG::FrameNode>& node, AceAutoFillType autoFillType,
618         bool isNewPassWord, bool& isPopup, uint32_t& autoFillSessionId, bool isNative = true) override;
619     bool IsNeedToCreatePopupWindow(const AceAutoFillType& autoFillType) override;
620     bool RequestAutoSave(const RefPtr<NG::FrameNode>& node, const std::function<void()>& onFinish,
621         const std::function<void()>& onUIExtNodeBindingCompleted, bool isNative = true,
622         int32_t instanceId = -1) override;
623     std::shared_ptr<NavigationController> GetNavigationController(const std::string& navigationId) override;
624     void OverwritePageNodeInfo(const RefPtr<NG::FrameNode>& frameNode, AbilityBase::ViewData& viewData);
625     HintToTypeWrap PlaceHolderToType(const std::string& onePlaceHolder) override;
626 
627     void SearchElementInfoByAccessibilityIdNG(
628         int64_t elementId, int32_t mode, int64_t baseParent,
629         std::list<Accessibility::AccessibilityElementInfo>& output);
630 
631     void SearchElementInfosByTextNG(
632         int64_t elementId, const std::string& text, int64_t baseParent,
633         std::list<Accessibility::AccessibilityElementInfo>& output);
634 
635     void FindFocusedElementInfoNG(
636         int64_t elementId, int32_t focusType, int64_t baseParent,
637         Accessibility::AccessibilityElementInfo& output);
638 
639     void FocusMoveSearchNG(
640         int64_t elementId, int32_t direction, int64_t baseParent,
641         Accessibility::AccessibilityElementInfo& output);
642 
643     bool NotifyExecuteAction(
644         int64_t elementId, const std::map<std::string, std::string>& actionArguments,
645         int32_t action, int64_t offset);
646 
647     void HandleAccessibilityHoverEvent(float pointX, float pointY, int32_t sourceType,
648         int32_t eventType, int64_t timeMs);
649 
650     void TerminateUIExtension() override;
651 
SetUIExtensionSubWindow(bool isUIExtensionSubWindow)652     void SetUIExtensionSubWindow(bool isUIExtensionSubWindow)
653     {
654         isUIExtensionSubWindow_ = isUIExtensionSubWindow;
655     }
656 
IsUIExtensionSubWindow()657     bool IsUIExtensionSubWindow()
658     {
659         return isUIExtensionSubWindow_;
660     }
661 
SetUIExtensionAbilityProcess(bool isUIExtensionAbilityProcess)662     void SetUIExtensionAbilityProcess(bool isUIExtensionAbilityProcess)
663     {
664         isUIExtensionAbilityProcess_ = isUIExtensionAbilityProcess;
665     }
666 
IsUIExtensionAbilityProcess()667     bool IsUIExtensionAbilityProcess()
668     {
669         return isUIExtensionAbilityProcess_;
670     }
671 
SetUIExtensionAbilityHost(bool isUIExtensionAbilityHost)672     void SetUIExtensionAbilityHost(bool isUIExtensionAbilityHost)
673     {
674         isUIExtensionAbilityHost_ = isUIExtensionAbilityHost;
675     }
676 
IsUIExtensionAbilityHost()677     bool IsUIExtensionAbilityHost()
678     {
679         return isUIExtensionAbilityHost_;
680     }
681 
RecordResAdapter(const std::string & key)682     void RecordResAdapter(const std::string& key)
683     {
684         resAdapterRecord_.emplace(key);
685     }
686 
687     std::vector<Ace::RectF> GetOverlayNodePositions();
688 
689     void RegisterOverlayNodePositionsUpdateCallback(
690         const std::function<void(std::vector<Ace::RectF>)>&& callback);
691 
692     OHOS::Rosen::WMError RegisterAvoidAreaChangeListener(sptr<OHOS::Rosen::IAvoidAreaChangedListener>& listener);
693     OHOS::Rosen::WMError UnregisterAvoidAreaChangeListener(sptr<OHOS::Rosen::IAvoidAreaChangedListener>& listener);
694 
695     bool NeedFullUpdate(uint32_t limitKey);
696     void NotifyDensityUpdate(double density);
697     void NotifyDirectionUpdate();
698 
SetRegisterComponents(const std::vector<std::string> & registerComponents)699     void SetRegisterComponents(const std::vector<std::string>& registerComponents)
700     {
701         registerComponents_ = registerComponents;
702     }
703 
GetRegisterComponents()704     std::vector<std::string> GetRegisterComponents() override
705     {
706         return registerComponents_;
707     }
708 
GetUieParams()709     const std::vector<std::string>& GetUieParams() const
710     {
711         return paramUie_;
712     }
713 
714     void UpdateResourceOrientation(int32_t orientation);
715     void UpdateResourceDensity(double density);
716 
IsFreeMultiWindow()717     bool IsFreeMultiWindow() const override
718     {
719         CHECK_NULL_RETURN(uiWindow_, false);
720         return uiWindow_->GetFreeMultiWindowModeEnabledState();
721     }
722     void FireUIExtensionEventCallback(uint32_t eventId);
723     void FireAccessibilityEventCallback(uint32_t eventId, int64_t parameter);
724 
SetTouchEventsPassThroughMode(bool isTouchEventsPassThrough)725     void SetTouchEventsPassThroughMode(bool isTouchEventsPassThrough)
726     {
727         isTouchEventsPassThrough_ = isTouchEventsPassThrough;
728     }
729 
730 
SetSingleHandTransform(const SingleHandTransform & singleHandTransform)731     void SetSingleHandTransform(const SingleHandTransform& singleHandTransform)
732     {
733         singleHandTransform_ = singleHandTransform;
734     }
735 
GetSingleHandTransform()736     const SingleHandTransform& GetSingleHandTransform() const
737     {
738         return singleHandTransform_;
739     }
740 
741 private:
742     virtual bool MaybeRelease() override;
743     void InitializeFrontend();
744     void InitializeCallback();
745     void InitializeTask(std::shared_ptr<TaskWrapper> taskWrapper = nullptr);
746     void InitWindowCallback();
747     bool IsFontFileExistInPath(std::string path);
748     std::string GetFontFamilyName(std::string path);
749     bool endsWith(std::string str, std::string suffix);
750 
751     void AttachView(std::shared_ptr<Window> window, const RefPtr<AceView>& view, double density, float width,
752         float height, uint32_t windowId, UIEnvCallback callback = nullptr);
753     void SetUIWindowInner(sptr<OHOS::Rosen::Window> uiWindow);
754     sptr<OHOS::Rosen::Window> GetUIWindowInner() const;
755     std::weak_ptr<OHOS::AppExecFwk::Ability> GetAbilityInner() const;
756     std::weak_ptr<OHOS::AbilityRuntime::Context> GetRuntimeContextInner() const;
757 
758     void RegisterStopDragCallback(int32_t pointerId, StopDragCallback&& stopDragCallback);
759     void SetFontScaleAndWeightScale(const ParsedConfig& parsedConfig, ConfigurationChange& configurationChange);
760     void ReleaseResourceAdapter();
761     void FillAutoFillViewData(const RefPtr<NG::FrameNode> &node, RefPtr<ViewDataWrap> &viewDataWrap);
762 
763     void NotifyConfigToSubContainers(const ParsedConfig& parsedConfig, const std::string& configuration);
764 
765     void RegisterUIExtDataConsumer();
766     void UnRegisterUIExtDataConsumer();
767     void DispatchUIExtDataConsume(
768         NG::UIContentBusinessCode code, AAFwk::Want&& data, std::optional<AAFwk::Want>& reply);
769     void RegisterUIExtDataSendToHost();
770     bool FireUIExtDataSendToHost(NG::UIContentBusinessCode code, AAFwk::Want&& data, NG::BusinessDataSendType type);
771     bool FireUIExtDataSendToHostReply(NG::UIContentBusinessCode code, AAFwk::Want&& data, AAFwk::Want& reply);
772 
773     int32_t instanceId_ = 0;
774     RefPtr<AceView> aceView_;
775     RefPtr<TaskExecutor> taskExecutor_;
776     RefPtr<AssetManager> assetManager_;
777     RefPtr<PlatformResRegister> resRegister_;
778     RefPtr<PipelineBase> pipelineContext_;
779     RefPtr<Frontend> frontend_;
780     std::unordered_map<int64_t, WeakPtr<Frontend>> cardFrontendMap_;
781     std::unordered_map<int64_t, WeakPtr<PipelineBase>> cardPipelineMap_;
782 
783     FrontendType type_ = FrontendType::JS;
784     std::unique_ptr<PlatformEventCallback> platformEventCallback_;
785     WindowModal windowModal_ { WindowModal::NORMAL };
786     ColorScheme colorScheme_ { ColorScheme::FIRST_VALUE };
787     ResourceInfo resourceInfo_;
788     std::weak_ptr<OHOS::AppExecFwk::Ability> aceAbility_;
789     std::weak_ptr<OHOS::AbilityRuntime::Context> runtimeContext_;
790     std::weak_ptr<OHOS::AppExecFwk::AbilityInfo> abilityInfo_;
791     void* sharedRuntime_ = nullptr;
792     std::string pageProfile_;
793     int32_t pageId_ = 0;
794     bool useCurrentEventRunner_ = false;
795     sptr<OHOS::Rosen::Window> uiWindow_ = nullptr;
796     std::string windowName_;
797     uint32_t windowId_ = OHOS::Rosen::INVALID_WINDOW_ID;
798     float windowScale_ = 1.0f;
799     sptr<IRemoteObject> token_;
800     sptr<IRemoteObject> parentToken_;
801 
802     bool isSubContainer_ = false;
803     bool isFormRender_ = false;
804     int32_t parentId_ = 0;
805     bool useStageModel_ = false;
806     bool isUIExtensionSubWindow_ = false;
807     bool isUIExtensionAbilityProcess_ = false;
808     bool isUIExtensionAbilityHost_ = false;
809     bool isUseCustomBg_ = false;
810 
811     DeviceOrientation orientation_ = DeviceOrientation::ORIENTATION_UNDEFINED;
812 
813     // for other AceContainer subscribe configuration from host AceContaier
814     // key is instanceId, value is callback function
815     std::unordered_map<int32_t, ConfigurationChangedCallback> configurationChangedCallbacks_;
816     std::vector<std::string> registerComponents_;
817 
818     std::unordered_set<std::string> resAdapterRecord_;
819 
820     mutable std::mutex frontendMutex_;
821     mutable std::mutex pipelineMutex_;
822     mutable std::mutex destructMutex_;
823     mutable std::mutex viewMutex_;
824 
825     mutable std::mutex cardFrontMutex_;
826     mutable std::mutex cardPipelineMutex_;
827     mutable std::mutex cardTokensMutex_;
828 
829     std::string webHapPath_;
830 
831     bool installationFree_ = false;
832     SharePanelCallback sharePanelCallback_ = nullptr;
833 
834     std::atomic_flag isDumping_ = ATOMIC_FLAG_INIT;
835 
836     std::string uniqueId_;
837 
838     // For custom drag event
839     std::mutex pointerEventMutex_;
840     std::shared_ptr<MMI::PointerEvent> currentPointerEvent_;
841     std::unordered_map<int32_t, std::list<StopDragCallback>> stopDragCallbackMap_;
842     std::map<int32_t, std::shared_ptr<MMI::PointerEvent>> currentEvents_;
843     ACE_DISALLOW_COPY_AND_MOVE(AceContainer);
844     // for Ui Extension dump param get
845     std::vector<std::string> paramUie_;
846     std::optional<bool> isTouchEventsPassThrough_;
847 
848     // for single hand mode
849     SingleHandTransform singleHandTransform_;
850 };
851 
852 } // namespace OHOS::Ace::Platform
853 
854 #endif // FOUNDATION_ACE_ADAPTER_OHOS_CPP_ACE_CONTAINER_H
855