• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2023 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_INTERFACE_INNERKITS_ACE_UI_CONTENT_H
17 #define FOUNDATION_ACE_INTERFACE_INNERKITS_ACE_UI_CONTENT_H
18 
19 #include <functional>
20 #include <map>
21 #include <memory>
22 #include <refbase.h>
23 #include <string>
24 #include <vector>
25 #include <list>
26 
27 #include "macros.h"
28 #include "modal_ui_extension_config.h"
29 #include "popup_ui_extension_config.h"
30 #include "serialized_gesture.h"
31 #include "serializeable_object.h"
32 #include "viewport_config.h"
33 #include "constants.h"
34 
35 namespace OHOS {
36 
37 namespace AbilityRuntime {
38 class Context;
39 } // namespace AbilityRuntime
40 
41 namespace AppExecFwk {
42 class Configuration;
43 class Ability;
44 class FormAshmem;
45 } // namespace AppExecFwk
46 
47 namespace Accessibility {
48 class AccessibilityElementInfo;
49 }
50 namespace Rosen {
51 class Window;
52 struct Rect;
53 enum class WindowSizeChangeReason : uint32_t;
54 enum class WindowMode : uint32_t;
55 enum class MaximizeMode : uint32_t;
56 class RSSurfaceNode;
57 class RSTransaction;
58 class Transform;
59 } // namespace Rosen
60 
61 namespace AAFwk {
62 class Want;
63 } // namespace AAFwk
64 
65 namespace MMI {
66 class PointerEvent;
67 class KeyEvent;
68 class AxisEvent;
69 } // namespace MMI
70 
71 namespace Media {
72 class PixelMap;
73 } // namespace Media
74 
75 namespace AbilityBase {
76 struct ViewData;
77 } // namespace AbilityBase
78 
79 class RefBase;
80 class Parcelable;
81 class IRemoteObject;
82 
83 } // namespace OHOS
84 
85 class NativeEngine;
86 typedef struct napi_value__* napi_value;
87 
88 namespace OHOS::Ace {
89 class ACE_FORCE_EXPORT UIContent {
90 public:
91     static std::unique_ptr<UIContent> Create(
92         OHOS::AbilityRuntime::Context* context, NativeEngine* runtime, bool isFormRender);
93     static std::unique_ptr<UIContent> Create(OHOS::AbilityRuntime::Context* context, NativeEngine* runtime);
94     static std::unique_ptr<UIContent> Create(OHOS::AppExecFwk::Ability* ability);
95     static void ShowDumpHelp(std::vector<std::string>& info);
96     static UIContent* GetUIContent(int32_t instanceId);
97     static std::string GetCurrentUIStackInfo();
98 
99     virtual ~UIContent() = default;
100 
101     // UI content life-cycles
102     virtual UIContentErrorCode Initialize(OHOS::Rosen::Window* window, const std::string& url, napi_value storage) = 0;
103     virtual UIContentErrorCode Initialize(
104         OHOS::Rosen::Window* window, const std::shared_ptr<std::vector<uint8_t>>& content, napi_value storage) = 0;
105     virtual UIContentErrorCode InitializeByName(OHOS::Rosen::Window *window, const std::string &name,
106                                                 napi_value storage) = 0;
InitializeDynamic(const std::string & hapPath,const std::string & abcPath,const std::string & entryPoint)107     virtual void InitializeDynamic(
108         const std::string& hapPath, const std::string& abcPath, const std::string& entryPoint) {};
109 
110     // UIExtensionAbility initialize for focusWindow ID
111     virtual void Initialize(
112         OHOS::Rosen::Window* window, const std::string& url, napi_value storage, uint32_t focusWindowID) = 0;
113     virtual void Foreground() = 0;
114     virtual void Background() = 0;
115     virtual void Focus() = 0;
116     virtual void UnFocus() = 0;
117     virtual void Destroy() = 0;
118     virtual void OnNewWant(const OHOS::AAFwk::Want& want) = 0;
119 
120     // distribute
121     virtual UIContentErrorCode Restore(OHOS::Rosen::Window *window, const std::string &contentInfo,
122                                        napi_value storage) = 0;
123     virtual std::string GetContentInfo() const = 0;
124     virtual void DestroyUIDirector() = 0;
125 
126     // UI content event process
127     virtual bool ProcessBackPressed() = 0;
128     virtual bool ProcessPointerEvent(const std::shared_ptr<OHOS::MMI::PointerEvent>& pointerEvent) = 0;
129     virtual bool ProcessKeyEvent(const std::shared_ptr<OHOS::MMI::KeyEvent>& keyEvent) = 0;
130     virtual bool ProcessAxisEvent(const std::shared_ptr<OHOS::MMI::AxisEvent>& axisEvent) = 0;
131     virtual bool ProcessVsyncEvent(uint64_t timeStampNanos) = 0;
132     virtual void SetIsFocusActive(bool isFocusActive) = 0;
133     virtual void UpdateConfiguration(const std::shared_ptr<OHOS::AppExecFwk::Configuration>& config) = 0;
134     virtual void UpdateViewportConfig(const ViewportConfig& config, OHOS::Rosen::WindowSizeChangeReason reason,
135         const std::shared_ptr<OHOS::Rosen::RSTransaction>& rsTransaction = nullptr) = 0;
136     virtual void UpdateWindowMode(OHOS::Rosen::WindowMode mode, bool hasDeco = true) = 0;
137     virtual void HideWindowTitleButton(bool hideSplit, bool hideMaximize, bool hideMinimize) = 0;
138     virtual void SetIgnoreViewSafeArea(bool ignoreViewSafeArea) = 0;
UpdateMaximizeMode(OHOS::Rosen::MaximizeMode mode)139     virtual void UpdateMaximizeMode(OHOS::Rosen::MaximizeMode mode) {};
ProcessFormVisibleChange(bool isVisible)140     virtual void ProcessFormVisibleChange(bool isVisible) {};
NotifyRotationAnimationEnd()141     virtual void NotifyRotationAnimationEnd() {};
142 
143     // only vaild in ContainerModalPatternEnhance
144     virtual void UpdateTitleInTargetPos(bool isShow, int32_t height) = 0;
145 
146     // Window color
147     virtual uint32_t GetBackgroundColor() = 0;
148     virtual void SetBackgroundColor(uint32_t color) = 0;
149 
150     // Judge whether window need soft keyboard or not
NeedSoftKeyboard()151     virtual bool NeedSoftKeyboard()
152     {
153         return false;
154     }
155 
SetOnWindowFocused(const std::function<void ()> & callback)156     virtual void SetOnWindowFocused(const std::function<void()>& callback) {};
157 
158     virtual void DumpInfo(const std::vector<std::string>& params, std::vector<std::string>& info) = 0;
159 
160     // Set UIContent callback for custom window animation
161     virtual void SetNextFrameLayoutCallback(std::function<void()>&& callback) = 0;
162 
163     // Receive memory level notification
164     virtual void NotifyMemoryLevel(int32_t level) = 0;
165 
166     virtual void SetAppWindowTitle(const std::string& title) = 0;
167     virtual void SetAppWindowIcon(const std::shared_ptr<Media::PixelMap>& pixelMap) = 0;
168 
169     // ArkTS Form
170     virtual void PreInitializeForm(OHOS::Rosen::Window* window, const std::string& url, napi_value storage) = 0;
171     virtual void RunFormPage() = 0;
172     virtual std::shared_ptr<Rosen::RSSurfaceNode> GetFormRootNode() = 0;
173 
174     virtual void UpdateFormData(const std::string& data) = 0;
UpdateFormSharedImage(const std::map<std::string,sptr<OHOS::AppExecFwk::FormAshmem>> & imageDataMap)175     virtual void UpdateFormSharedImage(const std::map<std::string, sptr<OHOS::AppExecFwk::FormAshmem>>& imageDataMap) {}
176 
177     virtual void SetFormWidth(const float width) = 0;
178     virtual void SetFormHeight(const float height) = 0;
179     virtual float GetFormWidth() = 0;
180     virtual float GetFormHeight() = 0;
ReloadForm(const std::string & url)181     virtual void ReloadForm(const std::string& url) {};
OnFormSurfaceChange(float width,float height)182     virtual void OnFormSurfaceChange(float width, float height) {}
SetFormBackgroundColor(const std::string & color)183     virtual void SetFormBackgroundColor(const std::string& color) {};
184 
SetActionEventHandler(std::function<void (const std::string &)> && actionCallback)185     virtual void SetActionEventHandler(std::function<void(const std::string&)>&& actionCallback) {};
SetErrorEventHandler(std::function<void (const std::string &,const std::string &)> && errorCallback)186     virtual void SetErrorEventHandler(std::function<void(const std::string&, const std::string&)>&& errorCallback) {};
SetFormLinkInfoUpdateHandler(std::function<void (const std::vector<std::string> &)> && callback)187     virtual void SetFormLinkInfoUpdateHandler(std::function<void(const std::vector<std::string>&)>&& callback) {};
188 
189 
190     // for distribute UI source
DumpUITree()191     virtual SerializeableObjectArray DumpUITree()
192     {
193         return SerializeableObjectArray();
194     };
SubscribeUpdate(const std::function<void (int32_t,SerializeableObjectArray &)> & onUpdate)195     virtual void SubscribeUpdate(const std::function<void(int32_t, SerializeableObjectArray&)>& onUpdate) {}
UnSubscribeUpdate()196     virtual void UnSubscribeUpdate() {}
ProcessSerializeableInputEvent(const SerializeableObjectArray & array)197     virtual void ProcessSerializeableInputEvent(const SerializeableObjectArray& array) {}
198     // for distribute UI sink
RestoreUITree(const SerializeableObjectArray & array)199     virtual void RestoreUITree(const SerializeableObjectArray& array) {}
UpdateUITree(const SerializeableObjectArray & array)200     virtual void UpdateUITree(const SerializeableObjectArray& array) {}
SubscribeInputEventProcess(const std::function<void (SerializeableObjectArray &)> & onEvent)201     virtual void SubscribeInputEventProcess(const std::function<void(SerializeableObjectArray&)>& onEvent) {}
UnSubscribeInputEventProcess()202     virtual void UnSubscribeInputEventProcess() {}
203 
GetResourcePaths(std::vector<std::string> & resourcesPaths,std::string & assetRootPath,std::vector<std::string> & assetBasePaths,std::string & resFolderName)204     virtual void GetResourcePaths(std::vector<std::string>& resourcesPaths, std::string& assetRootPath,
205         std::vector<std::string>& assetBasePaths, std::string& resFolderName) {};
SetResourcePaths(const std::vector<std::string> & resourcesPaths,const std::string & assetRootPath,const std::vector<std::string> & assetBasePaths)206     virtual void SetResourcePaths(const std::vector<std::string>& resourcesPaths, const std::string& assetRootPath,
207         const std::vector<std::string>& assetBasePaths) {};
208 
UpdateResource()209     virtual void UpdateResource() {}
210 
GetUINapiContext()211     virtual napi_value GetUINapiContext()
212     {
213         napi_value result = nullptr;
214         return result;
215     }
216 
217     /**
218      * @description: Create a full-window modal UIExtensionComponent.
219      * @param want Indicates the want of UIExtensionAbility.
220      * @param callbacks Indicates the UIExtensionComponent callbacks.
221      * @param config Indicates the Modal page configs.
222      * @return The return value is the ID of the session held by the UIExtensionComponent
223      * if creation is not successful, it returns 0 by default.
224      */
225     virtual int32_t CreateModalUIExtension(
226         const AAFwk::Want& want, const ModalUIExtensionCallbacks& callbacks, const ModalUIExtensionConfig& config) = 0;
227 
228     /**
229      * @description: Close the full-window modal.
230      * @param sessionId Indicates the sessionId of UIExtensionAbility.
231      * If the sessionId is 0, refuse to close
232      */
233     virtual void CloseModalUIExtension(int32_t sessionId) = 0;
234 
235     /**
236      * @description: Set parent ability token.
237      * @param token ability token.
238      */
239     virtual void SetParentToken(sptr<IRemoteObject> token);
240 
241     /**
242      * @description: Get parent ability token.
243      * @return return parent ability token.
244      */
245     virtual sptr<IRemoteObject> GetParentToken();
246 
DumpViewData(AbilityBase::ViewData & viewData)247     virtual bool DumpViewData(AbilityBase::ViewData& viewData)
248     {
249         return false;
250     }
251 
CheckNeedAutoSave()252     virtual bool CheckNeedAutoSave()
253     {
254         return false;
255     }
256 
GetInstanceId()257     virtual int32_t GetInstanceId()
258     {
259         return -1;
260     }
261 
262     /**
263      * @description: Recycle form.
264      * @return return Json string of status data of ArkTS form.
265      */
RecycleForm()266     virtual std::string RecycleForm()
267     {
268         return "";
269     }
270 
271     /**
272      * @description: Recover form.
273      * @param statusData Indicates json string of status data of ArkTS form.
274      */
RecoverForm(const std::string & statusData)275     virtual void RecoverForm(const std::string &statusData) {}
276 
SetContainerModalTitleVisible(bool customTitleSettedShow,bool floatingTitleSettedShow)277     virtual void SetContainerModalTitleVisible(bool customTitleSettedShow, bool floatingTitleSettedShow) {}
278 
SetContainerModalTitleHeight(int height)279     virtual void SetContainerModalTitleHeight(int height) {}
280 
GetContainerModalTitleHeight()281     virtual int32_t GetContainerModalTitleHeight()
282     {
283         return -1;
284     }
285 
GetContainerModalButtonsRect(Rosen::Rect & containerModal,Rosen::Rect & buttons)286     virtual bool GetContainerModalButtonsRect(Rosen::Rect& containerModal, Rosen::Rect& buttons)
287     {
288         return false;
289     }
290 
SubscribeContainerModalButtonsRectChange(std::function<void (Rosen::Rect & containerModal,Rosen::Rect & buttons)> && callback)291     virtual void SubscribeContainerModalButtonsRectChange(
292         std::function<void(Rosen::Rect& containerModal, Rosen::Rect& buttons)>&& callback) {}
293 
294 #ifndef PREVIEW
SearchElementInfoByAccessibilityId(int64_t elementId,int32_t mode,int64_t baseParent,std::list<Accessibility::AccessibilityElementInfo> & output)295     virtual void SearchElementInfoByAccessibilityId(
296         int64_t elementId, int32_t mode,
297         int64_t baseParent, std::list<Accessibility::AccessibilityElementInfo>& output) {};
298 
SearchElementInfosByText(int64_t elementId,const std::string & text,int64_t baseParent,std::list<Accessibility::AccessibilityElementInfo> & output)299     virtual void SearchElementInfosByText(
300         int64_t elementId, const std::string& text, int64_t baseParent,
301         std::list<Accessibility::AccessibilityElementInfo>& output) {};
302 
FindFocusedElementInfo(int64_t elementId,int32_t focusType,int64_t baseParent,Accessibility::AccessibilityElementInfo & output)303     virtual void FindFocusedElementInfo(
304         int64_t elementId, int32_t focusType,
305         int64_t baseParent, Accessibility::AccessibilityElementInfo& output) {};
306 
FocusMoveSearch(int64_t elementId,int32_t direction,int64_t baseParent,Accessibility::AccessibilityElementInfo & output)307     virtual void FocusMoveSearch(
308         int64_t elementId, int32_t direction,
309         int64_t baseParent, Accessibility::AccessibilityElementInfo& output) {};
310 
NotifyExecuteAction(int64_t elementId,const std::map<std::string,std::string> & actionArguments,int32_t action,int64_t offset)311     virtual bool NotifyExecuteAction(int64_t elementId, const std::map<std::string, std::string>& actionArguments,
312         int32_t action, int64_t offset)
313     {
314         return false;
315     }
316 #endif
317 
318     /**
319      * @description: Set UIContent callback after layout finish.
320      * @param callback callback func.
321      */
SetFrameLayoutFinishCallback(std::function<void ()> && callback)322     virtual void SetFrameLayoutFinishCallback(std::function<void()>&& callback) {};
323 
324     // Actually paint size of window
GetAppPaintSize(OHOS::Rosen::Rect & paintrect)325     virtual void GetAppPaintSize(OHOS::Rosen::Rect& paintrect) {};
326 
327     /**
328      * @description: Create a custom popup with UIExtensionComponent.
329      * @param want Indicates the want of UIExtensionAbility.
330      * @param callbacks Indicates the UIExtensionComponent callbacks.
331      * @param config Indicates the custom popup configs.
332      * @return The return value is the ID of the UI node which bind the pupop
333      * if creation is not successful, it returns 0 by default.
334      */
CreateCustomPopupUIExtension(const AAFwk::Want & want,const ModalUIExtensionCallbacks & callbacks,const CustomPopupUIExtensionConfig & config)335     virtual int32_t CreateCustomPopupUIExtension(
336         const AAFwk::Want& want, const ModalUIExtensionCallbacks& callbacks, const CustomPopupUIExtensionConfig& config)
337     {
338         return 0;
339     }
340 
341     /**
342      * @description: Destroy the custom popup.
343      * @param config Indicates the ID of the UI node which bind the pupop
344      */
DestroyCustomPopupUIExtension(int32_t nodeId)345     virtual void DestroyCustomPopupUIExtension(int32_t nodeId) {}
346 
GetFormSerializedGesture()347     virtual SerializedGesture GetFormSerializedGesture()
348     {
349         return SerializedGesture();
350     }
351 
ProcessPointerEventWithCallback(const std::shared_ptr<OHOS::MMI::PointerEvent> & pointerEvent,const std::function<void ()> & callback)352     virtual bool ProcessPointerEventWithCallback(
353         const std::shared_ptr<OHOS::MMI::PointerEvent>& pointerEvent, const std::function<void()>& callback)
354     {
355         return true;
356     };
357 
UpdateTransform(const OHOS::Rosen::Transform & transform)358     virtual void UpdateTransform(const OHOS::Rosen::Transform& transform) {};
359 
360     virtual void UpdateDecorVisible(bool visible, bool hasDeco = true) {};
361 };
362 
363 } // namespace OHOS::Ace
364 
365 #endif // FOUNDATION_ACE_INTERFACE_INNERKITS_ACE_UI_CONTENT_H
366