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