1 /* 2 * Copyright (c) 2022 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_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_DECLARATIVE_H 17 #define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_DECLARATIVE_H 18 19 #include <memory> 20 21 #include "base/memory/ace_type.h" 22 #include "core/common/ace_page.h" 23 #include "core/common/frontend.h" 24 #include "frameworks/bridge/card_frontend/card_frontend.h" 25 #include "frameworks/bridge/card_frontend/card_frontend_delegate_declarative.h" 26 #include "frameworks/bridge/card_frontend/js_card_parser.h" 27 #include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" 28 #include "frameworks/bridge/common/manifest/manifest_parser.h" 29 #include "frameworks/bridge/common/utils/page_id_pool.h" 30 #include "frameworks/bridge/declarative_frontend/declarative_frontend.h" 31 #include "frameworks/bridge/declarative_frontend/ng/declarative_frontend_ng.h" 32 #include "frameworks/bridge/declarative_frontend/ng/page_router_manager.h" 33 #include "frameworks/bridge/js_frontend/frontend_delegate_impl.h" 34 35 namespace OHOS::Ace { 36 37 class ACE_EXPORT CardFrontendDeclarative : public CardFrontend { 38 DECLARE_ACE_TYPE(CardFrontendDeclarative, CardFrontend); 39 40 public: 41 CardFrontendDeclarative() = default; 42 ~CardFrontendDeclarative() override; 43 44 // Card 45 void OnPageLoaded(const RefPtr<Framework::JsAcePage>& page) override; 46 void HandleSurfaceChanged(int32_t width, int32_t height) override; 47 void UpdatePageData(const std::string& dataList) override; 48 void OnMediaFeatureUpdate() override; 49 50 // Frontend 51 bool Initialize(FrontendType type, const RefPtr<TaskExecutor>& taskExecutor) override; 52 void Destroy() override; 53 void AttachPipelineContext(const RefPtr<PipelineBase>& context) override; 54 void SetAssetManager(const RefPtr<AssetManager>& assetManager) override; OnShow()55 void OnShow() override 56 { 57 foregroundFrontend_ = true; 58 if (delegate_) { 59 delegate_->OnPageShow(); 60 } 61 } OnHide()62 void OnHide() override 63 { 64 foregroundFrontend_ = false; 65 if (delegate_) { 66 delegate_->OnPageHide(); 67 } 68 } 69 70 UIContentErrorCode RunPage(const std::string& url, const std::string& params) override; 71 72 void OnSurfaceChanged(int32_t width, int32_t height) override; 73 void UpdateData(const std::string& dataList) override; 74 void SetColorMode(ColorMode colorMode) override; 75 void RebuildAllPages() override; 76 77 // eTSCard only 78 RefPtr<NG::PageRouterManager> GetPageRouterManager() const; 79 SetLoadCardCallBack(WeakPtr<PipelineBase> outSidePipelineContext)80 void SetLoadCardCallBack(WeakPtr<PipelineBase> outSidePipelineContext) override 81 { 82 const auto& loadCallback = [outSidePipelineContext]( 83 const std::string& url, int64_t cardId, const std::string& entryPoint) -> bool { 84 auto context = outSidePipelineContext.Upgrade(); 85 if (!context) { 86 return false; 87 } 88 #ifdef NG_BUILD 89 auto outSidefrontend = AceType::DynamicCast<DeclarativeFrontendNG>(context->GetFrontend()); 90 #else 91 auto outSidefrontend = AceType::DynamicCast<DeclarativeFrontend>(context->GetFrontend()); 92 #endif 93 if (!outSidefrontend) { 94 return false; 95 } 96 97 // Use the same js engine with host pipeline 98 auto jsEngine = outSidefrontend->GetJsEngine(); 99 if (!jsEngine) { 100 return false; 101 } 102 103 return jsEngine->LoadCard(url, cardId, entryPoint); 104 }; 105 delegate_->SetLoadCardCallBack(loadCallback); 106 } 107 GetDelegate()108 RefPtr<Framework::CardFrontendDelegateDeclarative> GetDelegate() 109 { 110 return delegate_; 111 } 112 113 private: 114 void InitializeDelegate(const RefPtr<TaskExecutor>& taskExecutor); 115 RefPtr<Framework::CardFrontendDelegateDeclarative> delegate_; 116 }; 117 118 class CardEventHandlerDeclarative : public AceEventHandler { 119 public: CardEventHandlerDeclarative(const RefPtr<Framework::CardFrontendDelegateDeclarative> & delegate)120 explicit CardEventHandlerDeclarative(const RefPtr<Framework::CardFrontendDelegateDeclarative>& delegate) 121 : delegate_(delegate) 122 { 123 ACE_DCHECK(delegate_); 124 } 125 126 ~CardEventHandlerDeclarative() override = default; 127 HandleAsyncEvent(const EventMarker & eventMarker)128 void HandleAsyncEvent(const EventMarker& eventMarker) override 129 { 130 delegate_->FireCardEvent(eventMarker); 131 } 132 HandleAsyncEvent(const EventMarker & eventMarker,int32_t param)133 void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override {} 134 HandleAsyncEvent(const EventMarker & eventMarker,const BaseEventInfo & info)135 void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override 136 { 137 delegate_->FireCardEvent(eventMarker); 138 } 139 HandleAsyncEvent(const EventMarker & eventMarker,const KeyEvent & info)140 void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info) override {} 141 HandleAsyncEvent(const EventMarker & eventMarker,const std::string & param)142 void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override 143 { 144 delegate_->FireCardEvent(eventMarker, param); 145 } 146 HandleSyncEvent(const EventMarker & eventMarker,bool & result)147 void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override {} 148 HandleSyncEvent(const EventMarker & eventMarker,const BaseEventInfo & info,bool & result)149 void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override {} 150 HandleSyncEvent(const EventMarker & eventMarker,const KeyEvent & info,bool & result)151 void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result) override {} 152 HandleSyncEvent(const EventMarker & eventMarker,const std::string & param,std::string & result)153 void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override {} 154 HandleSyncEvent(const EventMarker & eventMarker,const std::string & componentId,const int32_t nodeId,const bool isDestroy)155 void HandleSyncEvent(const EventMarker& eventMarker, const std::string& componentId, const int32_t nodeId, 156 const bool isDestroy) override 157 {} 158 159 private: 160 RefPtr<Framework::CardFrontendDelegateDeclarative> delegate_; 161 }; 162 } // namespace OHOS::Ace 163 164 #endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_DECLARATIVE_H 165