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