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_BRIDGE_CJ_FRONTEND_CJ_FRONTEDN_COMMON_H 17 #define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CJ_FRONTEND_CJ_FRONTEDN_COMMON_H 18 19 #include <memory> 20 21 #include "base/memory/ace_type.h" 22 #include "base/utils/measure_util.h" 23 #include "bridge/common/manifest/manifest_parser.h" 24 #include "bridge/common/utils/pipeline_context_holder.h" 25 #include "bridge/cj_frontend/interfaces/cj_ffi/cj_collection_ffi.h" 26 #include "bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h" 27 #include "core/components_ng/pattern/overlay/overlay_manager.h" 28 #include "cj_page_router_abstract.h" 29 #include "core/common/frontend.h" 30 31 #if defined(PREVIEW) 32 #include "adapter/preview/osal/response_data.h" 33 #endif 34 35 namespace OHOS::Ace { 36 37 class ACE_EXPORT CJFrontendAbstract : public Frontend { 38 DECLARE_ACE_TYPE(CJFrontendAbstract, Frontend) 39 public: 40 // page lifecycle 41 bool OnBackPressed() override; 42 void OnShow() override; 43 void OnHide() override; 44 45 protected: 46 virtual void InternalInitialize() = 0; 47 48 public: 49 ~CJFrontendAbstract() override; 50 bool Initialize(FrontendType type, const RefPtr<TaskExecutor>& taskExecutor) override; 51 void Destroy() override; 52 void FlushReload() override; 53 bool LoadAppLibrary(); 54 55 void AttachPipelineContext(const RefPtr<PipelineBase>& context) override; 56 void SetAssetManager(const RefPtr<AssetManager>& assetManager) override; 57 UIContentErrorCode RunPage(const std::string& url, const std::string& params) override; 58 void ReplacePage(const std::string& url, const std::string& params) override; 59 void PushPage(const std::string& url, const std::string& params) override; 60 void Back(const std::string& uri, const std::string& params); 61 void CallRouterBack() override; 62 GetParams()63 std::string GetParams() const 64 { 65 return pageRouterManager_->GetParams(); 66 } 67 GetAccessibilityManager()68 RefPtr<AccessibilityManager> GetAccessibilityManager() const override { return accessibilityManager_; } GetWindowConfig()69 WindowConfig& GetWindowConfig() override { return manifestParser_->GetWindowConfig(); } IsForeground()70 bool IsForeground() override { return foregroundFrontend_; } GetPageRouterManager()71 RefPtr<CJPageRouterAbstract> GetPageRouterManager() const { return pageRouterManager_; } SetStageModel(bool isStageModel)72 void SetStageModel(bool isStageModel) { isStageModel_ = isStageModel; } IsStageModel()73 bool IsStageModel() const { return isStageModel_; } SetRuntimeContext(std::weak_ptr<void> context)74 void SetRuntimeContext(std::weak_ptr<void> context) { runtimeContext_ = context; } GetRuntimeContext()75 std::weak_ptr<void> GetRuntimeContext() const { return runtimeContext_; } SetAceAbility(std::weak_ptr<void> aceAbility)76 void SetAceAbility(std::weak_ptr<void> aceAbility) { aceAbility_ = aceAbility; } GetAceAbility()77 std::weak_ptr<void> GetAceAbility() const { return aceAbility_; } GetPipelineContext()78 const RefPtr<PipelineBase>& GetPipelineContext() 79 { 80 return pipelineContextHolder_.Get(); 81 } 82 83 // ---------------- 84 // Measure 85 // ---------------- 86 double MeasureText(const MeasureContext& context); 87 Size MeasureTextSize(const MeasureContext& context); 88 89 // ---------------- 90 // promptAction 91 // ---------------- 92 void ShowToast(const std::string& message, int32_t duration, const std::string& bottom, 93 const NG::ToastShowMode& showMode = NG::ToastShowMode::DEFAULT); 94 95 void OpenCustomDialog(const PromptDialogAttr &dialogAttr, std::function<void(int32_t)> &&callback); 96 97 void CloseCustomDialog(int32_t id); 98 99 // todo: support new params 100 void ShowDialog(const std::string& title, const std::string& message, const std::vector<ButtonInfo>& buttons, 101 std::function<void(int32_t, int32_t)>&& callback, const std::set<std::string>& callbacks); 102 void ShowDialogInner(DialogProperties& dialogProperties, std::function<void(int32_t, int32_t)>&& callback, 103 const std::set<std::string>& callbacks); 104 105 void ShowActionMenu(const std::string& title, const std::vector<ButtonInfo>& button, 106 std::function<void(int32_t, int32_t)>&& callback); 107 void ShowActionMenuInner(DialogProperties& dialogProperties, const std::vector<ButtonInfo>& button, 108 std::function<void(int32_t, int32_t)>&& callback); 109 110 // ---------------- 111 // Font 112 // ---------------- 113 void RegisterFont(const std::string& familyName, const std::string& familySrc, const std::string& bundleName = "", 114 const std::string& moduleName = ""); 115 116 VectorStringHandle GetSystemFontList(); 117 NativeOptionFontInfo GetSystemFont(const std::string& fontName); 118 119 #if defined(PREVIEW) 120 void TransferJsResponseDataPreview(int32_t callbackId, int32_t code, ResponseData responseData) const; 121 #endif 122 123 protected: 124 friend class CJPageRouterAbstract; 125 126 void InternalRunPage(const std::string& url, const std::string& params); 127 128 // internal properties 129 RefPtr<AccessibilityManager> accessibilityManager_; 130 Framework::PipelineContextHolder pipelineContextHolder_; 131 RefPtr<CJPageRouterAbstract> pageRouterManager_; 132 RefPtr<AssetManager> assetManager_; 133 RefPtr<Framework::ManifestParser> manifestParser_; 134 std::weak_ptr<void> runtimeContext_; 135 std::weak_ptr<void> aceAbility_; 136 137 bool foregroundFrontend_ = false; 138 bool isStageModel_ = false; 139 std::string pageProfile_; 140 141 public: 142 // implement later DumpFrontend()143 void DumpFrontend() const override {} GetPagePath()144 std::string GetPagePath() const override { return ""; } TriggerGarbageCollection()145 void TriggerGarbageCollection() override {} DumpHeapSnapshot(bool isPrivate)146 void DumpHeapSnapshot(bool isPrivate) override {} OnSurfaceChanged(int32_t width,int32_t height)147 void OnSurfaceChanged(int32_t width, int32_t height) override {}; SetColorMode(ColorMode colorMode)148 void SetColorMode(ColorMode colorMode) override {}; 149 void RebuildAllPages() override; 150 151 void NavigatePage(uint8_t type, const PageTarget& target, const std::string& params) override; 152 153 // discarded methods AddPage(const RefPtr<AcePage> & page)154 void AddPage(const RefPtr<AcePage>& page) override {} GetRouterSize()155 int32_t GetRouterSize() const override 156 { 157 return pageRouterManager_->GetStackSize(); 158 } GetPage(int32_t pageId)159 RefPtr<AcePage> GetPage(int32_t pageId) const override { return nullptr; } SendCallbackMessage(const std::string & callbackId,const std::string & data)160 void SendCallbackMessage(const std::string& callbackId, const std::string& data) const override {} SetJsMessageDispatcher(const RefPtr<JsMessageDispatcher> & dispatcher)161 void SetJsMessageDispatcher(const RefPtr<JsMessageDispatcher>& dispatcher) const override {} TransferComponentResponseData(int32_t callbackId,int32_t code,std::vector<uint8_t> && data)162 void TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector<uint8_t>&& data) const override {} TransferJsResponseData(int32_t callbackId,int32_t code,std::vector<uint8_t> && data)163 void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector<uint8_t>&& data) const override {} TransferJsPluginGetError(int32_t callbackId,int32_t errorCode,std::string && errorMessage)164 void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override {} TransferJsEventData(int32_t callbackId,int32_t code,std::vector<uint8_t> && data)165 void TransferJsEventData(int32_t callbackId, int32_t code, std::vector<uint8_t>&& data) const override {} LoadPluginJsCode(std::string && jsCode)166 void LoadPluginJsCode(std::string&& jsCode) const override {} LoadPluginJsByteCode(std::vector<uint8_t> && jsCode,std::vector<int32_t> && jsCodeLen)167 void LoadPluginJsByteCode(std::vector<uint8_t>&& jsCode, std::vector<int32_t>&& jsCodeLen) const override {} UpdateState(Frontend::State state)168 void UpdateState(Frontend::State state) override {} OnConfigurationUpdated(const std::string & data)169 void OnConfigurationUpdated(const std::string& data) override {} OnSaveAbilityState(std::string & data)170 void OnSaveAbilityState(std::string& data) override {} OnRestoreAbilityState(const std::string & data)171 void OnRestoreAbilityState(const std::string& data) override {} OnNewWant(const std::string & data)172 void OnNewWant(const std::string& data) override {} OnActive()173 void OnActive() override {} OnInactive()174 void OnInactive() override {} OnStartContinuation()175 bool OnStartContinuation() override { return false; } OnCompleteContinuation(int32_t code)176 void OnCompleteContinuation(int32_t code) override {} OnSaveData(std::string & data)177 void OnSaveData(std::string& data) override {} GetPluginsUsed(std::string & data)178 void GetPluginsUsed(std::string& data) override {} OnRestoreData(const std::string & data)179 bool OnRestoreData(const std::string& data) override { return false; } OnRemoteTerminated()180 void OnRemoteTerminated() override {} OnNewRequest(const std::string & data)181 void OnNewRequest(const std::string& data) override {} OnMemoryLevel(const int32_t level)182 void OnMemoryLevel(const int32_t level) override {} NotifyAppStorage(const std::string & key,const std::string & value)183 void NotifyAppStorage(const std::string& key, const std::string& value) override {} OnLayoutCompleted(const std::string & componentId)184 void OnLayoutCompleted(const std::string& componentId) override {} OnDrawCompleted(const std::string & componentId)185 void OnDrawCompleted(const std::string& componentId) override {} GetEventHandler()186 RefPtr<AceEventHandler> GetEventHandler() override { return nullptr; }; 187 }; 188 } 189 190 #endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CJ_FRONTEND_CJ_FRONTEDN_COMMON_H 191