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_DELEGATE_DECLARATIVE_H 17 #define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_DELEGATE_DECLARATIVE_H 18 19 #include <mutex> 20 21 #include "frameworks/base/memory/ace_type.h" 22 #include "frameworks/base/utils/noncopyable.h" 23 #include "frameworks/base/utils/measure_util.h" 24 #include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" 25 #include "frameworks/bridge/declarative_frontend/ng/page_router_manager.h" 26 #include "frameworks/bridge/declarative_frontend/ng/frontend_delegate_declarative_ng.h" 27 28 namespace OHOS::Ace::Framework { 29 // This is the primary class by which the CardFrontend delegates 30 31 using LoadCardCallback = std::function<bool(const std::string&, int64_t cardId, const std::string&)>; 32 using UpdateCardDataCallback = std::function<void(const std::string&)>; 33 34 class ACE_EXPORT CardFrontendDelegateDeclarative : public FrontendDelegateDeclarativeNG { 35 DECLARE_ACE_TYPE(CardFrontendDelegateDeclarative, FrontendDelegateDeclarativeNG); 36 37 public: CardFrontendDelegateDeclarative(const RefPtr<TaskExecutor> & taskExecutor)38 explicit CardFrontendDelegateDeclarative(const RefPtr<TaskExecutor>& taskExecutor) 39 : FrontendDelegateDeclarativeNG(taskExecutor) 40 {} 41 ~CardFrontendDelegateDeclarative() override; 42 43 UIContentErrorCode RunCard( 44 const std::string& url, const std::string& params, const std::string& profile, int64_t cardId); 45 46 void FireCardEvent(const EventMarker& eventMarker, const std::string& params = ""); 47 48 void FireCardAction(const std::string& action); 49 SetLoadCardCallBack(const LoadCardCallback & loadCallback)50 void SetLoadCardCallBack(const LoadCardCallback& loadCallback) 51 { 52 auto pageRouterManager = GetPageRouterManager(); 53 CHECK_NULL_VOID(pageRouterManager); 54 pageRouterManager->SetLoadCardCallback(loadCallback); 55 } 56 UpdatePageData(const std::string & dataList)57 void UpdatePageData(const std::string& dataList) 58 { 59 std::lock_guard<std::mutex> lock(mutex_); 60 if (updateCardData_) { 61 updateCardData_(dataList); 62 } else { 63 cardData_ = dataList; 64 } 65 } 66 SetUpdateCardDataCallback(UpdateCardDataCallback && callback)67 void SetUpdateCardDataCallback(UpdateCardDataCallback&& callback) 68 { 69 std::lock_guard<std::mutex> lock(mutex_); 70 updateCardData_ = std::move(callback); 71 } 72 UpdatePageDataImmediately()73 void UpdatePageDataImmediately() 74 { 75 std::lock_guard<std::mutex> lock(mutex_); 76 if (!cardData_.empty() && updateCardData_) { 77 updateCardData_(cardData_); 78 } 79 } 80 81 double MeasureText(MeasureContext context) override; 82 83 ACE_DISALLOW_COPY_AND_MOVE(CardFrontendDelegateDeclarative); 84 85 private: 86 UpdateCardDataCallback updateCardData_; 87 std::string cardData_; 88 mutable std::mutex mutex_; 89 }; 90 } // namespace OHOS::Ace::Framework 91 92 #endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_DELEGATE_DECLARATIVE_H 93