1 /* 2 * Copyright (c) 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_COMPONENTS_NG_PATTERN_UI_EXTENSION_SECURITY_UI_EXTENSION_PATTERN_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_UI_EXTENSION_SECURITY_UI_EXTENSION_PATTERN_H 18 19 #include "core/common/dynamic_component_renderer.h" 20 #include "core/components_ng/pattern/ui_extension/accessibility_session_adapter_ui_extension.h" 21 #include "core/components_ng/pattern/ui_extension/platform_pattern.h" 22 #include "core/components_ng/pattern/ui_extension/ui_extension_hub.h" 23 #include "core/components_ng/pattern/ui_extension/ui_extension_model_ng.h" 24 25 namespace OHOS::Ace::NG { 26 class SecurityUIExtensionPattern : public PlatformPattern { 27 DECLARE_ACE_TYPE(SecurityUIExtensionPattern, PlatformPattern); 28 29 public: 30 SecurityUIExtensionPattern(); 31 ~SecurityUIExtensionPattern() override; 32 33 RefPtr<LayoutAlgorithm> CreateLayoutAlgorithm() override; 34 FocusPattern GetFocusPattern() const override; 35 RefPtr<AccessibilitySessionAdapter> GetAccessibilitySessionAdapter() override; 36 SetPlaceholderNode(const RefPtr<FrameNode> & placeholderNode)37 void SetPlaceholderNode(const RefPtr<FrameNode>& placeholderNode) 38 { 39 placeholderNode_ = placeholderNode; 40 } 41 CreateEventHub()42 RefPtr<EventHub> CreateEventHub() override 43 { 44 return MakeRefPtr<UIExtensionHub>(); 45 } 46 47 void Initialize(const NG::UIExtensionConfig& config); 48 void UnregisterResources(); 49 void UpdateWant(const RefPtr<OHOS::Ace::WantWrap>& wantWrap); 50 void UpdateWant(const AAFwk::Want& want); 51 void SetWantWrap(const RefPtr<OHOS::Ace::WantWrap>& wantWrap); 52 RefPtr<OHOS::Ace::WantWrap> GetWantWrap(); 53 void MountPlaceholderNode(); 54 void RemovePlaceholderNode(); 55 void OnConnect(); 56 void OnDisconnect(bool isAbnormal); 57 void NotifySizeChangeReason( 58 WindowSizeChangeReason type, const std::shared_ptr<Rosen::RSTransaction>& rsTransaction); 59 void NotifyForeground(); 60 void NotifyBackground(); 61 void NotifyDestroy(); 62 int32_t GetSessionId(); 63 int32_t GetNodeId(); 64 int32_t GetInstanceId(); 65 66 void OnSyncGeometryNode(const DirtySwapConfig& config) override; 67 void OnWindowShow() override; 68 void OnWindowHide() override; 69 void OnAttachToFrameNode() override; 70 void OnDetachFromFrameNode(FrameNode* frameNode) override; 71 void OnModifyDone() override; 72 void OnVisibleChange(bool visible) override; 73 void OnMountToParentDone() override; 74 void OnLanguageConfigurationUpdate() override; 75 void OnColorConfigurationUpdate() override; 76 int32_t GetUiExtensionId() override; 77 void DispatchDisplayArea(bool isForce = false); 78 void RegisterVisibleAreaChange(); 79 void DispatchOriginAvoidArea(const Rosen::AvoidArea& avoidArea, uint32_t type); 80 int64_t WrapExtensionAbilityId(int64_t extensionOffset, int64_t abilityId) override; 81 void FireOnErrorCallback( 82 int32_t code, const std::string& name, const std::string& message) override; 83 84 void FireOnRemoteReadyCallback(); 85 void FireBindModalCallback(); 86 void FireOnTerminatedCallback(int32_t code, const RefPtr<WantWrap>& wantWrap); 87 void FireOnReceiveCallback(const AAFwk::WantParams& params); 88 void SetSyncCallbacks( 89 const std::list<std::function<void(const RefPtr<NG::SecurityUIExtensionProxy>&)>>&& callbackList); 90 void FireSyncCallbacks(); 91 void SetAsyncCallbacks( 92 const std::list<std::function<void(const RefPtr<NG::SecurityUIExtensionProxy>&)>>&& callbackList); 93 void FireAsyncCallbacks(); 94 95 // Dpi 96 void SetDensityDpi(bool densityDpi); 97 bool GetDensityDpi(); 98 void DispatchFollowHostDensity(bool densityDpi); 99 void OnDpiConfigurationUpdate() override; 100 101 private: 102 bool HandleKeyEvent(const KeyEvent& event) override; 103 void HandleFocusEvent() override; 104 void HandleBlurEvent() override; 105 void DispatchFocusActiveEvent(bool isFocusActive) override; 106 void HandleTouchEvent(const TouchEventInfo& info) override; 107 void DispatchFocusState(bool focusState); 108 109 enum class AbilityState { 110 NONE = 0, 111 FOREGROUND, 112 BACKGROUND, 113 DESTRUCTION, 114 }; 115 116 const char* ToString(AbilityState state); 117 bool CheckConstraint(); 118 119 RefPtr<FrameNode> placeholderNode_ = nullptr; 120 RefPtr<OHOS::Ace::WantWrap> curWant_; 121 RefPtr<FrameNode> contentNode_; 122 RefPtr<SessionWrapper> sessionWrapper_; 123 RefPtr<AccessibilitySessionAdapterUIExtension> accessibilitySessionAdapter_; 124 AbilityState state_ = AbilityState::NONE; 125 bool isVisible_ = true; 126 bool isShowPlaceholder_ = false; 127 bool densityDpi_ = false; 128 int32_t callbackId_ = 0; 129 RectF displayArea_; 130 SessionType sessionType_ = SessionType::UI_EXTENSION_ABILITY; 131 int32_t uiExtensionId_ = 0; 132 133 std::list<std::function<void(const RefPtr<NG::SecurityUIExtensionProxy>&)>> onSyncOnCallbackList_; 134 std::list<std::function<void(const RefPtr<NG::SecurityUIExtensionProxy>&)>> onAsyncOnCallbackList_; 135 136 ACE_DISALLOW_COPY_AND_MOVE(SecurityUIExtensionPattern); 137 }; 138 } // namespace OHOS::Ace::NG 139 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_UI_EXTENSION_SECURITY_UI_EXTENSION_PATTERN_H 140