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_FRAMEWORKS_CORE_COMMON_CONTAINER_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CONTAINER_H
18
19 #include <atomic>
20 #include <functional>
21 #include <mutex>
22 #include <unordered_map>
23
24 #include "interfaces/inner_api/ace/ace_forward_compatibility.h"
25 #include "interfaces/inner_api/ace/constants.h"
26 #include "interfaces/inner_api/ace/navigation_controller.h"
27
28 #include "base/memory/ace_type.h"
29 #include "base/view_data/hint_to_type_wrap.h"
30 #include "base/resource/asset_manager.h"
31 #include "base/resource/shared_image_manager.h"
32 #include "base/subwindow/subwindow_manager.h"
33 #include "base/thread/task_executor.h"
34 #include "base/utils/macros.h"
35 #include "base/utils/noncopyable.h"
36 #include "base/utils/system_properties.h"
37 #include "base/utils/utils.h"
38 #include "core/common/ace_application_info.h"
39 #include "core/common/container_consts.h"
40 #include "core/common/display_info.h"
41 #include "core/common/display_info_utils.h"
42 #include "core/common/frontend.h"
43 #include "core/common/page_url_checker.h"
44 #include "core/common/platform_res_register.h"
45 #include "core/common/resource/resource_configuration.h"
46 #include "core/common/settings.h"
47 #include "core/common/window.h"
48 #include "core/components/common/layout/constants.h"
49 #include "core/components_ng/base/distributed_ui.h"
50 #include "core/components_ng/pattern/app_bar/app_bar_view.h"
51 #include "core/components_ng/pattern/navigation/navigation_route.h"
52 #include "core/components_ng/pattern/navigator/navigator_event_hub.h"
53 #include "core/event/pointer_event.h"
54 #include "core/pipeline/pipeline_base.h"
55
56 namespace OHOS::Ace {
57
58 using PageTask = std::function<void()>;
59 using TouchEventCallback = std::function<void(const TouchEvent&, const std::function<void()>&,
60 const RefPtr<NG::FrameNode>&)>;
61 using KeyEventCallback = std::function<bool(const KeyEvent&)>;
62 using MouseEventCallback = std::function<void(const MouseEvent&, const std::function<void()>&,
63 const RefPtr<NG::FrameNode>&)>;
64 using AxisEventCallback = std::function<void(const AxisEvent&, const std::function<void()>&,
65 const RefPtr<NG::FrameNode>&)>;
66 using RotationEventCallBack = std::function<bool(const RotationEvent&)>;
67 using CardViewPositionCallBack = std::function<void(int id, float offsetX, float offsetY)>;
68 using DragEventCallBack = std::function<void(const PointerEvent&, const DragEventAction&,
69 const RefPtr<NG::FrameNode>&)>;
70 using StopDragCallback = std::function<void()>;
71
72 class ACE_FORCE_EXPORT Container : public virtual AceType {
73 DECLARE_ACE_TYPE(Container, AceType);
74
75 public:
76 Container() = default;
77 ~Container() override = default;
78
79 virtual void Initialize() = 0;
80
81 virtual void Destroy() = 0;
82
IsKeyboard()83 virtual bool IsKeyboard()
84 {
85 return false;
86 }
87
DestroyView()88 virtual void DestroyView() {}
UpdatePopupUIExtension(const RefPtr<NG::FrameNode>& node, uint32_t autoFillSessionId, bool isNative = true)89 virtual bool UpdatePopupUIExtension(const RefPtr<NG::FrameNode>& node,
90 uint32_t autoFillSessionId, bool isNative = true)
91 {
92 return false;
93 }
94
ClosePopupUIExtension(uint32_t autoFillSessionId)95 virtual bool ClosePopupUIExtension(uint32_t autoFillSessionId)
96 {
97 return false;
98 }
99
PlaceHolderToType(const std::string& onePlaceHolder)100 virtual HintToTypeWrap PlaceHolderToType(const std::string& onePlaceHolder)
101 {
102 HintToTypeWrap hintToTypeWrap;
103 return hintToTypeWrap;
104 }
105
106 // Get the instance id of this container
107 virtual int32_t GetInstanceId() const = 0;
108
109 // Get the ability name of this container
110 virtual std::string GetHostClassName() const = 0;
111
112 // Get the frontend of container
113 virtual RefPtr<Frontend> GetFrontend() const = 0;
114
115 // Get task executor.
116 virtual RefPtr<TaskExecutor> GetTaskExecutor() const = 0;
117
118 // Get assert manager.
119 virtual RefPtr<AssetManager> GetAssetManager() const = 0;
120
121 // Get platform resource register.
122 virtual RefPtr<PlatformResRegister> GetPlatformResRegister() const = 0;
123
124 // Get the pipelineContext of container.
125 virtual RefPtr<PipelineBase> GetPipelineContext() const = 0;
126
127 // Dump container.
128 virtual bool Dump(const std::vector<std::string>& params, std::vector<std::string>& info);
129
130 // Get the width/height of the view
131 virtual int32_t GetViewWidth() const = 0;
132 virtual int32_t GetViewHeight() const = 0;
133 virtual int32_t GetViewPosX() const = 0;
134 virtual int32_t GetViewPosY() const = 0;
135
136 virtual uint32_t GetWindowId() const = 0;
SetWindowId(uint32_t windowId)137 virtual void SetWindowId(uint32_t windowId) {}
WindowIsShow() const138 virtual bool WindowIsShow() const
139 {
140 return false;
141 }
142
143 virtual RefPtr<AceView> GetAceView() const = 0;
144
145 virtual void* GetView() const = 0;
146
147 // Trigger garbage collection
TriggerGarbageCollection()148 virtual void TriggerGarbageCollection() {}
149
DumpHeapSnapshot(bool isPrivate)150 virtual void DumpHeapSnapshot(bool isPrivate) {}
151
DestroyHeapProfiler()152 virtual void DestroyHeapProfiler() {}
153
ForceFullGC()154 virtual void ForceFullGC() {}
155
NotifyFontNodes()156 virtual void NotifyFontNodes() {}
157
NotifyAppStorage(const std::string& key, const std::string& value)158 virtual void NotifyAppStorage(const std::string& key, const std::string& value) {}
159
SetCardFrontend(WeakPtr<Frontend> frontend, int64_t cardId)160 virtual void SetCardFrontend(WeakPtr<Frontend> frontend, int64_t cardId) {}
161
GetCardFrontend(int64_t cardId) const162 virtual WeakPtr<Frontend> GetCardFrontend(int64_t cardId) const
163 {
164 return nullptr;
165 }
166
SetCardPipeline(WeakPtr<PipelineBase>, int64_t cardId)167 virtual void SetCardPipeline(WeakPtr<PipelineBase>, int64_t cardId) {}
168
GetCardPipeline(int64_t cardId) const169 virtual WeakPtr<PipelineBase> GetCardPipeline(int64_t cardId) const
170 {
171 return nullptr;
172 }
173
174 // Get MultiModal ptr.
GetMutilModalPtr() const175 virtual uintptr_t GetMutilModalPtr() const
176 {
177 return 0;
178 }
179
ProcessScreenOnEvents()180 virtual void ProcessScreenOnEvents() {}
181
ProcessScreenOffEvents()182 virtual void ProcessScreenOffEvents() {}
183
SetOrientation(Orientation orientation)184 virtual void SetOrientation(Orientation orientation) {}
185
GetOrientation()186 virtual Orientation GetOrientation()
187 {
188 return Orientation::UNSPECIFIED;
189 }
190
191 virtual RefPtr<DisplayInfo> GetDisplayInfo();
192
193 virtual void InitIsFoldable();
194
195 virtual bool IsFoldable();
196
197 virtual FoldStatus GetCurrentFoldStatus();
198
GetKeyboardSafeArea()199 virtual NG::SafeAreaInsets GetKeyboardSafeArea()
200 {
201 return {};
202 }
203
GetSessionAvoidAreaByType(uint32_t safeAreaType)204 virtual Rect GetSessionAvoidAreaByType(uint32_t safeAreaType)
205 {
206 return {};
207 }
208
GetHapPath() const209 virtual std::string GetHapPath() const
210 {
211 return {};
212 }
213
GetWebHapPath() const214 virtual std::string GetWebHapPath() const
215 {
216 return {};
217 }
218
SetCreateTime(std::chrono::time_point<std::chrono::high_resolution_clock> time)219 void SetCreateTime(std::chrono::time_point<std::chrono::high_resolution_clock> time)
220 {
221 createTime_ = time;
222 }
223
IsFirstUpdate() const224 bool IsFirstUpdate() const
225 {
226 return firstUpdateData_;
227 }
228
AlreadyFirstUpdate()229 void AlreadyFirstUpdate()
230 {
231 firstUpdateData_ = false;
232 }
233
SetBundleName(const std::string& bundleName)234 void SetBundleName(const std::string& bundleName)
235 {
236 bundleName_ = bundleName;
237 }
238
GetBundleName() const239 const std::string& GetBundleName() const
240 {
241 return bundleName_;
242 }
243
SetModuleName(const std::string& moduleName)244 void SetModuleName(const std::string& moduleName)
245 {
246 moduleName_ = moduleName;
247 }
248
GetModuleName() const249 std::string GetModuleName() const
250 {
251 return moduleName_;
252 }
253
IsMainWindow() const254 virtual bool IsMainWindow() const { return false; }
IsSubWindow() const255 virtual bool IsSubWindow() const { return false; }
IsDialogWindow() const256 virtual bool IsDialogWindow() const { return false; }
IsSystemWindow() const257 virtual bool IsSystemWindow() const { return false; }
IsHostMainWindow() const258 virtual bool IsHostMainWindow() const { return false; }
IsHostSubWindow() const259 virtual bool IsHostSubWindow() const { return false; }
IsHostDialogWindow() const260 virtual bool IsHostDialogWindow() const { return false; }
IsHostSystemWindow() const261 virtual bool IsHostSystemWindow() const { return false; }
IsHostSceneBoardWindow() const262 virtual bool IsHostSceneBoardWindow() const { return false; }
IsSubContainer() const263 virtual bool IsSubContainer() const { return false; }
IsFormRender() const264 virtual bool IsFormRender() const { return false; }
GetParentMainWindowId(uint32_t currentWindowId) const265 virtual uint32_t GetParentMainWindowId(uint32_t currentWindowId) const
266 {
267 return 0;
268 }
269
SetIsFormRender(bool isFormRender)270 virtual void SetIsFormRender(bool isFormRender) {};
271
GetCardHapPath() const272 const std::string& GetCardHapPath() const
273 {
274 return cardHapPath_;
275 }
276
277 bool UpdateState(const Frontend::State& state);
278
GetSettings()279 Settings& GetSettings()
280 {
281 return settings_;
282 }
283
SetBundlePath(const std::string& path)284 void SetBundlePath(const std::string& path)
285 {
286 bundlePath_ = path;
287 }
288
GetBundlePath() const289 const std::string& GetBundlePath() const
290 {
291 return bundlePath_;
292 }
293
SetFilesDataPath(const std::string& path)294 void SetFilesDataPath(const std::string& path)
295 {
296 filesDataPath_ = path;
297 }
298
GetFilesDataPath() const299 const std::string& GetFilesDataPath() const
300 {
301 return filesDataPath_;
302 }
303
SetTempDir(const std::string& path)304 void SetTempDir(const std::string& path)
305 {
306 tempDir_ = path;
307 }
308
GetTempDir() const309 const std::string& GetTempDir() const
310 {
311 return tempDir_;
312 }
313
SetViewFirstUpdating(std::chrono::time_point<std::chrono::high_resolution_clock> time)314 virtual void SetViewFirstUpdating(std::chrono::time_point<std::chrono::high_resolution_clock> time) {}
315
UpdateResourceConfiguration(const std::string& jsonStr)316 virtual void UpdateResourceConfiguration(const std::string& jsonStr) {}
317
318 static int32_t SafelyId();
319 static int32_t CurrentId();
320 static int32_t CurrentIdSafely();
321 static int32_t CurrentIdSafelyWithCheck();
322 static RefPtr<Container> Current();
323 static RefPtr<Container> CurrentSafely();
324 static RefPtr<Container> CurrentSafelyWithCheck();
325 static RefPtr<Container> GetContainer(int32_t containerId);
326 static RefPtr<Container> GetActive();
327 static RefPtr<Container> GetDefault();
328 static RefPtr<Container> GetFoucsed();
329 static RefPtr<TaskExecutor> CurrentTaskExecutor();
330 static RefPtr<TaskExecutor> CurrentTaskExecutorSafely();
331 static RefPtr<TaskExecutor> CurrentTaskExecutorSafelyWithCheck();
332 static void UpdateCurrent(int32_t id);
333
SetUseNewPipeline()334 void SetUseNewPipeline()
335 {
336 useNewPipeline_ = true;
337 }
338
SetUsePartialUpdate()339 void SetUsePartialUpdate()
340 {
341 usePartialUpdate_ = true;
342 }
343
IsUseNewPipeline() const344 bool IsUseNewPipeline() const
345 {
346 return useNewPipeline_;
347 }
348
IsCurrentUseNewPipeline()349 static bool IsCurrentUseNewPipeline()
350 {
351 auto container = Current();
352 return container ? container->useNewPipeline_ : AceForwardCompatibility::IsUseNG();
353 }
354
355 // SetCurrentUsePartialUpdate is called when initial render on a page
356 // starts, see zyz_view_register loadDocument() implementation
IsCurrentUsePartialUpdate()357 static bool IsCurrentUsePartialUpdate()
358 {
359 auto container = Current();
360 return container ? container->usePartialUpdate_ : false;
361 }
362
SetCurrentUsePartialUpdate(bool useIt = false)363 static void SetCurrentUsePartialUpdate(bool useIt = false)
364 {
365 auto container = Current();
366 if (container) {
367 container->usePartialUpdate_ = useIt;
368 }
369 }
370
IsInFormContainer()371 static bool IsInFormContainer() {
372 auto container = Current();
373 return container ? container->isFRSCardContainer_ : false;
374 }
375
IsInSubContainer()376 static bool IsInSubContainer()
377 {
378 auto container = Current();
379 return container ? container->IsSubContainer() : false;
380 }
381
GetWindow() const382 Window* GetWindow() const
383 {
384 auto context = GetPipelineContext();
385 return context ? context->GetWindow() : nullptr;
386 }
387
IsUseStageModel() const388 virtual bool IsUseStageModel() const
389 {
390 return false;
391 }
392
GetCardFrontendMap(std::unordered_map<int64_t, WeakPtr<Frontend>>& cardFrontendMap) const393 virtual void GetCardFrontendMap(std::unordered_map<int64_t, WeakPtr<Frontend>>& cardFrontendMap) const {}
394
SetSharedRuntime(void* runtime)395 virtual void SetSharedRuntime(void* runtime) {}
GetSharedRuntime()396 virtual void* GetSharedRuntime()
397 {
398 return nullptr;
399 }
400
IsFRSCardContainer() const401 bool IsFRSCardContainer() const
402 {
403 return isFRSCardContainer_;
404 }
405
SetIsFRSCardContainer(bool isFRSCardContainer)406 void SetIsFRSCardContainer(bool isFRSCardContainer)
407 {
408 isFRSCardContainer_ = isFRSCardContainer;
409 }
410
IsDynamicRender() const411 bool IsDynamicRender() const
412 {
413 return isDynamicRender_;
414 }
415
SetIsDynamicRender(bool isDynamicRender)416 void SetIsDynamicRender(bool isDynamicRender)
417 {
418 isDynamicRender_ = isDynamicRender;
419 }
420
GetRegisterComponents()421 virtual std::vector<std::string> GetRegisterComponents() { return {}; };
422
SetPageUrlChecker(const RefPtr<PageUrlChecker>& pageUrlChecker)423 void SetPageUrlChecker(const RefPtr<PageUrlChecker>& pageUrlChecker)
424 {
425 pageUrlChecker_ = pageUrlChecker;
426 }
427
GetPageUrlChecker()428 const RefPtr<PageUrlChecker>& GetPageUrlChecker()
429 {
430 return pageUrlChecker_;
431 }
432
SetNavigationRoute(const RefPtr<NG::NavigationRoute>& navigationRoute)433 void SetNavigationRoute(const RefPtr<NG::NavigationRoute>& navigationRoute)
434 {
435 navigationRoute_ = navigationRoute;
436 }
437
GetNavigationRoute() const438 RefPtr<NG::NavigationRoute> GetNavigationRoute() const
439 {
440 return navigationRoute_;
441 }
442
IsDialogContainer() const443 virtual bool IsDialogContainer() const
444 {
445 return false;
446 }
447
SetWindowScale(float windowScale)448 virtual void SetWindowScale(float windowScale) {}
449
GetWindowScale() const450 virtual float GetWindowScale() const
451 {
452 return 1.0f;
453 }
454
NotifyConfigurationChange(bool, const ConfigurationChange& configurationChange = { false, false })455 virtual void NotifyConfigurationChange(bool, const ConfigurationChange& configurationChange = { false, false }) {}
HotReload()456 virtual void HotReload() {}
457
SetIsModule(bool isModule)458 void SetIsModule(bool isModule)
459 {
460 isModule_ = isModule;
461 }
462
IsModule() const463 bool IsModule() const
464 {
465 return isModule_;
466 }
467
SetDistributedUI(std::shared_ptr<NG::DistributedUI>& distributedUI)468 void SetDistributedUI(std::shared_ptr<NG::DistributedUI>& distributedUI)
469 {
470 distributedUI_ = distributedUI;
471 }
472
GetDistributedUI()473 std::shared_ptr<NG::DistributedUI>& GetDistributedUI()
474 {
475 return distributedUI_;
476 }
477
IsLauncherContainer()478 virtual bool IsLauncherContainer()
479 {
480 return false;
481 }
482
IsScenceBoardWindow()483 virtual bool IsScenceBoardWindow()
484 {
485 return false;
486 }
487
IsUIExtensionWindow()488 virtual bool IsUIExtensionWindow()
489 {
490 return false;
491 }
492
IsSceneBoardEnabled()493 virtual bool IsSceneBoardEnabled()
494 {
495 return false;
496 }
497
GetCurPointerEventInfo( int32_t& pointerId, int32_t& globalX, int32_t& globalY, int32_t& sourceType, int32_t& sourceTool, StopDragCallback&& stopDragCallback)498 virtual bool GetCurPointerEventInfo(
499 int32_t& pointerId, int32_t& globalX, int32_t& globalY, int32_t& sourceType,
500 int32_t& sourceTool, StopDragCallback&& stopDragCallback)
501 {
502 return false;
503 }
504
GetCurPointerEventSourceType(int32_t& sourceType)505 virtual bool GetCurPointerEventSourceType(int32_t& sourceType)
506 {
507 return false;
508 }
509
RequestAutoFill(const RefPtr<NG::FrameNode>& node, AceAutoFillType autoFillType, bool isNewPassWord, bool& isPopup, uint32_t& autoFillSessionId, bool isNative = true)510 virtual bool RequestAutoFill(const RefPtr<NG::FrameNode>& node, AceAutoFillType autoFillType,
511 bool isNewPassWord, bool& isPopup, uint32_t& autoFillSessionId, bool isNative = true)
512 {
513 return false;
514 }
515
IsNeedToCreatePopupWindow(const AceAutoFillType& autoFillType)516 virtual bool IsNeedToCreatePopupWindow(const AceAutoFillType& autoFillType)
517 {
518 return false;
519 }
520
RequestAutoSave(const RefPtr<NG::FrameNode>& node, const std::function<void()>& onFinish = nullptr, const std::function<void()>& onUIExtNodeBindingCompleted = nullptr, bool isNative = true, int32_t instanceId = -1)521 virtual bool RequestAutoSave(const RefPtr<NG::FrameNode>& node, const std::function<void()>& onFinish = nullptr,
522 const std::function<void()>& onUIExtNodeBindingCompleted = nullptr, bool isNative = true,
523 int32_t instanceId = -1)
524 {
525 return false;
526 }
527
528
GetNavigationController(const std::string& navigationId)529 virtual std::shared_ptr<NavigationController> GetNavigationController(const std::string& navigationId)
530 {
531 return nullptr;
532 }
533
LessThanAPIVersion(PlatformVersion version)534 static bool LessThanAPIVersion(PlatformVersion version)
535 {
536 return PipelineBase::GetCurrentContext() &&
537 PipelineBase::GetCurrentContext()->GetMinPlatformVersion() < static_cast<int32_t>(version);
538 }
539
GreatOrEqualAPIVersion(PlatformVersion version)540 static bool GreatOrEqualAPIVersion(PlatformVersion version)
541 {
542 return PipelineBase::GetCurrentContext() &&
543 PipelineBase::GetCurrentContext()->GetMinPlatformVersion() >= static_cast<int32_t>(version);
544 }
545
LessThanAPITargetVersion(PlatformVersion version)546 static bool LessThanAPITargetVersion(PlatformVersion version)
547 {
548 auto container = Current();
549 CHECK_NULL_RETURN(container, false);
550 auto apiTargetVersion = container->GetApiTargetVersion();
551 return apiTargetVersion < static_cast<int32_t>(version);
552 }
553
GreatOrEqualAPITargetVersion(PlatformVersion version)554 static bool GreatOrEqualAPITargetVersion(PlatformVersion version)
555 {
556 auto container = Current();
557 if (!container) {
558 auto apiTargetVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion() % 1000;
559 return apiTargetVersion >= static_cast<int32_t>(version);
560 }
561 auto apiTargetVersion = container->GetApiTargetVersion();
562 return apiTargetVersion >= static_cast<int32_t>(version);
563 }
564
SetAppBar(const RefPtr<NG::AppBarView>& appBar)565 void SetAppBar(const RefPtr<NG::AppBarView>& appBar)
566 {
567 appBar_ = appBar;
568 }
569
GetAppBar() const570 RefPtr<NG::AppBarView> GetAppBar() const
571 {
572 return appBar_;
573 }
574
TerminateUIExtension()575 virtual void TerminateUIExtension() {}
576
577 template<ContainerType type>
578 static int32_t GenerateId();
579 static void SetFontScale(int32_t instanceId, float fontScale);
580 static void SetFontWeightScale(int32_t instanceId, float fontScale);
581
GetApiTargetVersion() const582 int32_t GetApiTargetVersion() const
583 {
584 return apiTargetVersion_;
585 }
586
SetApiTargetVersion(int32_t apiTargetVersion)587 void SetApiTargetVersion(int32_t apiTargetVersion)
588 {
589 apiTargetVersion_ = apiTargetVersion % 1000;
590 }
591
GetUIContentType() const592 UIContentType GetUIContentType() const
593 {
594 return uIContentType_;
595 }
596
SetUIContentType(UIContentType uIContentType)597 void SetUIContentType(UIContentType uIContentType)
598 {
599 uIContentType_ = uIContentType;
600 }
601
602 void DestroyToastSubwindow(int32_t instanceId);
603
CheckAndSetFontFamily()604 virtual void CheckAndSetFontFamily() {};
605
IsFreeMultiWindow() const606 virtual bool IsFreeMultiWindow() const
607 {
608 return false;
609 }
610
GetUIExtensionHostWindowRect(int32_t instanceId)611 virtual Rect GetUIExtensionHostWindowRect(int32_t instanceId)
612 {
613 return Rect();
614 }
615 protected:
616 bool IsFontFileExistInPath(const std::string& path);
617 std::string GetFontFamilyName(std::string path);
618 bool endsWith(std::string str, std::string suffix);
619
620 private:
621 static bool IsIdAvailable(int32_t id);
622
623 protected:
624 std::chrono::time_point<std::chrono::high_resolution_clock> createTime_;
625 bool firstUpdateData_ = true;
626 std::string cardHapPath_;
627 bool useNewPipeline_ = false;
628 std::mutex stateMutex_;
629 Frontend::State state_ = Frontend::State::UNDEFINE;
630 bool isFRSCardContainer_ = false;
631 bool isDynamicRender_ = false;
632
633 private:
634 std::string bundleName_;
635 std::string moduleName_;
636 std::string bundlePath_;
637 std::string filesDataPath_;
638 std::string tempDir_;
639 bool usePartialUpdate_ = false;
640 Settings settings_;
641 RefPtr<PageUrlChecker> pageUrlChecker_;
642 RefPtr<NG::NavigationRoute> navigationRoute_;
643 bool isModule_ = false;
644 std::shared_ptr<NG::DistributedUI> distributedUI_;
645 RefPtr<NG::AppBarView> appBar_;
646 int32_t apiTargetVersion_ = 0;
647 // Define the type of UI Content, for example, Security UIExtension.
648 UIContentType uIContentType_ = UIContentType::UNDEFINED;
649 ACE_DISALLOW_COPY_AND_MOVE(Container);
650 };
651
652 template<ContainerType type>
GenerateId()653 int32_t Container::GenerateId()
654 {
655 static std::atomic<int32_t> gInstanceId;
656 int32_t id;
657 do {
658 id = type * CONTAINER_ID_DIVIDE_SIZE + gInstanceId.fetch_add(1) % CONTAINER_ID_DIVIDE_SIZE;
659 } while (!IsIdAvailable(id));
660 return id;
661 }
662
663 template<>
664 int32_t Container::GenerateId<PLUGIN_SUBCONTAINER>();
665
666 } // namespace OHOS::Ace
667
668 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CONTAINER_H
669