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