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