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 "arkui_rect.h" 28 #include "macros.h" 29 #include "modal_ui_extension_config.h" 30 #include "popup_ui_extension_config.h" 31 #include "serialized_gesture.h" 32 #include "serializeable_object.h" 33 #include "viewport_config.h" 34 #include "constants.h" 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 enum class AvoidAreaType : uint32_t; 60 class AvoidArea; 61 } // namespace Rosen 62 63 namespace AAFwk { 64 class Want; 65 } // namespace AAFwk 66 67 namespace MMI { 68 class PointerEvent; 69 class KeyEvent; 70 class AxisEvent; 71 } // namespace MMI 72 73 namespace Media { 74 class PixelMap; 75 } // namespace Media 76 77 namespace AbilityBase { 78 struct ViewData; 79 enum class AutoFillType; 80 } // namespace AbilityBase 81 82 class RefBase; 83 class Parcelable; 84 class IRemoteObject; 85 86 } // namespace OHOS 87 88 class NativeEngine; 89 typedef struct napi_value__* napi_value; 90 91 namespace OHOS::Ace { 92 class ACE_FORCE_EXPORT UIContent { 93 public: 94 static std::unique_ptr<UIContent> Create( 95 OHOS::AbilityRuntime::Context* context, NativeEngine* runtime, bool isFormRender); 96 static std::unique_ptr<UIContent> Create(OHOS::AbilityRuntime::Context* context, NativeEngine* runtime); 97 static std::unique_ptr<UIContent> Create(OHOS::AppExecFwk::Ability* ability); 98 static void ShowDumpHelp(std::vector<std::string>& info); 99 static UIContent* GetUIContent(int32_t instanceId); 100 static std::string GetCurrentUIStackInfo(); 101 102 virtual ~UIContent() = default; 103 104 // UI content life-cycles 105 virtual UIContentErrorCode Initialize(OHOS::Rosen::Window* window, const std::string& url, napi_value storage) = 0; 106 virtual UIContentErrorCode Initialize( 107 OHOS::Rosen::Window* window, const std::shared_ptr<std::vector<uint8_t>>& content, napi_value storage) = 0; Initialize(OHOS::Rosen::Window * window,const std::shared_ptr<std::vector<uint8_t>> & content,napi_value storage,const std::string & contentName)108 virtual UIContentErrorCode Initialize(OHOS::Rosen::Window* window, 109 const std::shared_ptr<std::vector<uint8_t>>& content, napi_value storage, const std::string& contentName) 110 { 111 return UIContentErrorCode::NO_ERRORS; 112 } 113 virtual UIContentErrorCode InitializeByName(OHOS::Rosen::Window *window, const std::string &name, 114 napi_value storage) = 0; InitializeDynamic(const std::string & hapPath,const std::string & abcPath,const std::string & entryPoint,const std::vector<std::string> & registerComponents)115 virtual void InitializeDynamic(const std::string& hapPath, const std::string& abcPath, 116 const std::string& entryPoint, const std::vector<std::string>& registerComponents) {}; 117 118 // UIExtensionAbility initialize for focusWindow ID 119 virtual void Initialize( 120 OHOS::Rosen::Window* window, const std::string& url, napi_value storage, uint32_t focusWindowID) = 0; 121 virtual void Foreground() = 0; 122 virtual void Background() = 0; 123 virtual void Focus() = 0; 124 virtual void UnFocus() = 0; 125 virtual void Destroy() = 0; 126 virtual void OnNewWant(const OHOS::AAFwk::Want& want) = 0; 127 128 // distribute 129 virtual UIContentErrorCode Restore(OHOS::Rosen::Window *window, const std::string &contentInfo, 130 napi_value storage) = 0; 131 virtual std::string GetContentInfo() const = 0; 132 virtual void DestroyUIDirector() = 0; 133 134 // UI content event process 135 virtual bool ProcessBackPressed() = 0; 136 virtual bool ProcessPointerEvent(const std::shared_ptr<OHOS::MMI::PointerEvent>& pointerEvent) = 0; 137 virtual bool ProcessKeyEvent(const std::shared_ptr<OHOS::MMI::KeyEvent>& keyEvent, bool isPreIme = false) = 0; 138 virtual bool ProcessAxisEvent(const std::shared_ptr<OHOS::MMI::AxisEvent>& axisEvent) = 0; 139 virtual bool ProcessVsyncEvent(uint64_t timeStampNanos) = 0; 140 virtual void SetIsFocusActive(bool isFocusActive) = 0; 141 virtual void UpdateConfiguration(const std::shared_ptr<OHOS::AppExecFwk::Configuration>& config) = 0; 142 virtual void UpdateViewportConfig(const ViewportConfig& config, OHOS::Rosen::WindowSizeChangeReason reason, 143 const std::shared_ptr<OHOS::Rosen::RSTransaction>& rsTransaction = nullptr, 144 const std::map<OHOS::Rosen::AvoidAreaType, OHOS::Rosen::AvoidArea>& avoidAreas = {}) {}; 145 virtual void UpdateWindowMode(OHOS::Rosen::WindowMode mode, bool hasDeco = true) = 0; 146 virtual void HideWindowTitleButton(bool hideSplit, bool hideMaximize, bool hideMinimize) = 0; 147 virtual void SetIgnoreViewSafeArea(bool ignoreViewSafeArea) = 0; UpdateMaximizeMode(OHOS::Rosen::MaximizeMode mode)148 virtual void UpdateMaximizeMode(OHOS::Rosen::MaximizeMode mode) {}; ProcessFormVisibleChange(bool isVisible)149 virtual void ProcessFormVisibleChange(bool isVisible) {}; NotifyRotationAnimationEnd()150 virtual void NotifyRotationAnimationEnd() {}; 151 152 // only vaild in ContainerModalPatternEnhance 153 virtual void UpdateTitleInTargetPos(bool isShow, int32_t height) = 0; 154 155 // Window color 156 virtual uint32_t GetBackgroundColor() = 0; 157 virtual void SetBackgroundColor(uint32_t color) = 0; SetUIContentType(UIContentType uIContentType)158 virtual void SetUIContentType(UIContentType uIContentType) {}; 159 160 // Judge whether window need soft keyboard or not NeedSoftKeyboard()161 virtual bool NeedSoftKeyboard() 162 { 163 return false; 164 } 165 ChangeSensitiveNodes(bool isSensitive)166 virtual void ChangeSensitiveNodes(bool isSensitive) {} 167 SetOnWindowFocused(const std::function<void ()> & callback)168 virtual void SetOnWindowFocused(const std::function<void()>& callback) {}; 169 170 virtual void DumpInfo(const std::vector<std::string>& params, std::vector<std::string>& info) = 0; 171 172 // Set UIContent callback for custom window animation 173 virtual void SetNextFrameLayoutCallback(std::function<void()>&& callback) = 0; 174 175 // Receive memory level notification 176 virtual void NotifyMemoryLevel(int32_t level) = 0; 177 178 virtual void SetAppWindowTitle(const std::string& title) = 0; 179 virtual void SetAppWindowIcon(const std::shared_ptr<Media::PixelMap>& pixelMap) = 0; 180 181 // ArkTS Form 182 virtual void PreInitializeForm(OHOS::Rosen::Window* window, const std::string& url, napi_value storage) = 0; 183 virtual void RunFormPage() = 0; 184 virtual std::shared_ptr<Rosen::RSSurfaceNode> GetFormRootNode() = 0; 185 186 virtual void UpdateFormData(const std::string& data) = 0; UpdateFormSharedImage(const std::map<std::string,sptr<OHOS::AppExecFwk::FormAshmem>> & imageDataMap)187 virtual void UpdateFormSharedImage(const std::map<std::string, sptr<OHOS::AppExecFwk::FormAshmem>>& imageDataMap) {} 188 189 virtual void SetFormWidth(const float width) = 0; 190 virtual void SetFormHeight(const float height) = 0; 191 virtual float GetFormWidth() = 0; 192 virtual float GetFormHeight() = 0; ReloadForm(const std::string & url)193 virtual void ReloadForm(const std::string& url) {}; OnFormSurfaceChange(float width,float height)194 virtual void OnFormSurfaceChange(float width, float height) {} SetFormBackgroundColor(const std::string & color)195 virtual void SetFormBackgroundColor(const std::string& color) {}; SetFontScaleFollowSystem(const bool fontScaleFollowSystem)196 virtual void SetFontScaleFollowSystem(const bool fontScaleFollowSystem) {}; SetFormRenderingMode(int8_t renderMode)197 virtual void SetFormRenderingMode(int8_t renderMode) {}; 198 SetActionEventHandler(std::function<void (const std::string &)> && actionCallback)199 virtual void SetActionEventHandler(std::function<void(const std::string&)>&& actionCallback) {}; SetErrorEventHandler(std::function<void (const std::string &,const std::string &)> && errorCallback)200 virtual void SetErrorEventHandler(std::function<void(const std::string&, const std::string&)>&& errorCallback) {}; SetFormLinkInfoUpdateHandler(std::function<void (const std::vector<std::string> &)> && callback)201 virtual void SetFormLinkInfoUpdateHandler(std::function<void(const std::vector<std::string>&)>&& callback) {}; RegisterAccessibilityChildTree(uint32_t parentWindowId,int32_t parentTreeId,int64_t parentElementId)202 virtual void RegisterAccessibilityChildTree( 203 uint32_t parentWindowId, int32_t parentTreeId, int64_t parentElementId) {}; SetAccessibilityGetParentRectHandler(std::function<void (int32_t &,int32_t &)> && callback)204 virtual void SetAccessibilityGetParentRectHandler(std::function<void(int32_t&, int32_t&)>&& callback) {}; DeregisterAccessibilityChildTree()205 virtual void DeregisterAccessibilityChildTree() {}; AccessibilityDumpChildInfo(const std::vector<std::string> & params,std::vector<std::string> & info)206 virtual void AccessibilityDumpChildInfo(const std::vector<std::string>& params, std::vector<std::string>& info) {}; 207 208 // for distribute UI source DumpUITree()209 virtual SerializeableObjectArray DumpUITree() 210 { 211 return SerializeableObjectArray(); 212 }; SubscribeUpdate(const std::function<void (int32_t,SerializeableObjectArray &)> & onUpdate)213 virtual void SubscribeUpdate(const std::function<void(int32_t, SerializeableObjectArray&)>& onUpdate) {} UnSubscribeUpdate()214 virtual void UnSubscribeUpdate() {} ProcessSerializeableInputEvent(const SerializeableObjectArray & array)215 virtual void ProcessSerializeableInputEvent(const SerializeableObjectArray& array) {} 216 // for distribute UI sink RestoreUITree(const SerializeableObjectArray & array)217 virtual void RestoreUITree(const SerializeableObjectArray& array) {} UpdateUITree(const SerializeableObjectArray & array)218 virtual void UpdateUITree(const SerializeableObjectArray& array) {} SubscribeInputEventProcess(const std::function<void (SerializeableObjectArray &)> & onEvent)219 virtual void SubscribeInputEventProcess(const std::function<void(SerializeableObjectArray&)>& onEvent) {} UnSubscribeInputEventProcess()220 virtual void UnSubscribeInputEventProcess() {} 221 GetResourcePaths(std::vector<std::string> & resourcesPaths,std::string & assetRootPath,std::vector<std::string> & assetBasePaths,std::string & resFolderName)222 virtual void GetResourcePaths(std::vector<std::string>& resourcesPaths, std::string& assetRootPath, 223 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)224 virtual void SetResourcePaths(const std::vector<std::string>& resourcesPaths, const std::string& assetRootPath, 225 const std::vector<std::string>& assetBasePaths) {}; 226 UpdateResource()227 virtual void UpdateResource() {} 228 GetUINapiContext()229 virtual napi_value GetUINapiContext() 230 { 231 napi_value result = nullptr; 232 return result; 233 } 234 235 /** 236 * @description: Create a full-window modal UIExtensionComponent. 237 * @param want Indicates the want of UIExtensionAbility. 238 * @param callbacks Indicates the UIExtensionComponent callbacks. 239 * @param config Indicates the Modal page configs. 240 * @return The return value is the ID of the session held by the UIExtensionComponent 241 * if creation is not successful, it returns 0 by default. 242 */ 243 virtual int32_t CreateModalUIExtension( 244 const AAFwk::Want& want, const ModalUIExtensionCallbacks& callbacks, const ModalUIExtensionConfig& config) = 0; 245 246 /** 247 * @description: Close the full-window modal. 248 * @param sessionId Indicates the sessionId of UIExtensionAbility. 249 * If the sessionId is 0, refuse to close 250 */ 251 virtual void CloseModalUIExtension(int32_t sessionId) = 0; 252 253 /** 254 * @description: Set parent ability token. 255 * @param token ability token. 256 */ 257 virtual void SetParentToken(sptr<IRemoteObject> token); 258 259 /** 260 * @description: Get parent ability token. 261 * @return return parent ability token. 262 */ 263 virtual sptr<IRemoteObject> GetParentToken(); 264 DumpViewData(AbilityBase::ViewData & viewData,AbilityBase::AutoFillType & type)265 virtual bool DumpViewData(AbilityBase::ViewData& viewData, AbilityBase::AutoFillType& type) 266 { 267 return false; 268 } 269 CheckNeedAutoSave()270 virtual bool CheckNeedAutoSave() 271 { 272 return false; 273 } 274 GetInstanceId()275 virtual int32_t GetInstanceId() 276 { 277 return -1; 278 } 279 280 /** 281 * @description: Recycle form. 282 * @return return Json string of status data of ArkTS form. 283 */ RecycleForm()284 virtual std::string RecycleForm() 285 { 286 return ""; 287 } 288 289 /** 290 * @description: Recover form. 291 * @param statusData Indicates json string of status data of ArkTS form. 292 */ RecoverForm(const std::string & statusData)293 virtual void RecoverForm(const std::string &statusData) {} 294 SetContainerModalTitleVisible(bool customTitleSettedShow,bool floatingTitleSettedShow)295 virtual void SetContainerModalTitleVisible(bool customTitleSettedShow, bool floatingTitleSettedShow) {} 296 SetContainerModalTitleHeight(int height)297 virtual void SetContainerModalTitleHeight(int height) {} 298 GetContainerModalTitleHeight()299 virtual int32_t GetContainerModalTitleHeight() 300 { 301 return -1; 302 } 303 GetContainerModalButtonsRect(Rosen::Rect & containerModal,Rosen::Rect & buttons)304 virtual bool GetContainerModalButtonsRect(Rosen::Rect& containerModal, Rosen::Rect& buttons) 305 { 306 return false; 307 } 308 SubscribeContainerModalButtonsRectChange(std::function<void (Rosen::Rect & containerModal,Rosen::Rect & buttons)> && callback)309 virtual void SubscribeContainerModalButtonsRectChange( 310 std::function<void(Rosen::Rect& containerModal, Rosen::Rect& buttons)>&& callback) {} 311 SetUIExtensionSubWindow(bool isUIExtensionSubWindow)312 virtual void SetUIExtensionSubWindow(bool isUIExtensionSubWindow) {} 313 IsUIExtensionSubWindow()314 virtual bool IsUIExtensionSubWindow() 315 { 316 return false; 317 } 318 SetUIExtensionAbilityProcess(bool isUIExtensionAbilityProcess)319 virtual void SetUIExtensionAbilityProcess(bool isUIExtensionAbilityProcess) {} 320 IsUIExtensionAbilityProcess()321 virtual bool IsUIExtensionAbilityProcess() 322 { 323 return false; 324 } 325 SetUIExtensionAbilityHost(bool isUIExtensionAbilityHost)326 virtual void SetUIExtensionAbilityHost(bool isUIExtensionAbilityHost) {} 327 IsUIExtensionAbilityHost()328 virtual bool IsUIExtensionAbilityHost() 329 { 330 return false; 331 } 332 333 #ifndef PREVIEW SearchElementInfoByAccessibilityId(int64_t elementId,int32_t mode,int64_t baseParent,std::list<Accessibility::AccessibilityElementInfo> & output)334 virtual void SearchElementInfoByAccessibilityId( 335 int64_t elementId, int32_t mode, 336 int64_t baseParent, std::list<Accessibility::AccessibilityElementInfo>& output) {}; 337 SearchElementInfosByText(int64_t elementId,const std::string & text,int64_t baseParent,std::list<Accessibility::AccessibilityElementInfo> & output)338 virtual void SearchElementInfosByText( 339 int64_t elementId, const std::string& text, int64_t baseParent, 340 std::list<Accessibility::AccessibilityElementInfo>& output) {}; 341 FindFocusedElementInfo(int64_t elementId,int32_t focusType,int64_t baseParent,Accessibility::AccessibilityElementInfo & output)342 virtual void FindFocusedElementInfo( 343 int64_t elementId, int32_t focusType, 344 int64_t baseParent, Accessibility::AccessibilityElementInfo& output) {}; 345 FocusMoveSearch(int64_t elementId,int32_t direction,int64_t baseParent,Accessibility::AccessibilityElementInfo & output)346 virtual void FocusMoveSearch( 347 int64_t elementId, int32_t direction, 348 int64_t baseParent, Accessibility::AccessibilityElementInfo& output) {}; 349 NotifyExecuteAction(int64_t elementId,const std::map<std::string,std::string> & actionArguments,int32_t action,int64_t offset)350 virtual bool NotifyExecuteAction(int64_t elementId, const std::map<std::string, std::string>& actionArguments, 351 int32_t action, int64_t offset) 352 { 353 return false; 354 } 355 HandleAccessibilityHoverEvent(float pointX,float pointY,int32_t sourceType,int32_t eventType,int64_t timeMs)356 virtual void HandleAccessibilityHoverEvent(float pointX, float pointY, int32_t sourceType, 357 int32_t eventType, int64_t timeMs) {} 358 #endif 359 360 /** 361 * @description: Set UIContent callback after layout finish. 362 * @param callback callback func. 363 */ SetFrameLayoutFinishCallback(std::function<void ()> && callback)364 virtual void SetFrameLayoutFinishCallback(std::function<void()>&& callback) {}; 365 366 /** 367 * @description: Set UIContent callback after lastest layout finish. 368 * @param callback callback func. 369 */ SetLatestFrameLayoutFinishCallback(std::function<void ()> && callback)370 virtual void SetLatestFrameLayoutFinishCallback(std::function<void()>&& callback) {}; 371 372 // Current paintSize of window GetAppPaintSize(OHOS::Rosen::Rect & paintrect)373 virtual void GetAppPaintSize(OHOS::Rosen::Rect& paintrect) {}; 374 375 // Get paintSize of window by calculating GetWindowPaintSize(OHOS::Rosen::Rect & paintrect)376 virtual void GetWindowPaintSize(OHOS::Rosen::Rect& paintrect) {}; 377 378 /** 379 * @description: Create a custom popup with UIExtensionComponent. 380 * @param want Indicates the want of UIExtensionAbility. 381 * @param callbacks Indicates the UIExtensionComponent callbacks. 382 * @param config Indicates the custom popup configs. 383 * @return The return value is the ID of the UI node which bind the pupop 384 * if creation is not successful, it returns 0 by default. 385 */ CreateCustomPopupUIExtension(const AAFwk::Want & want,const ModalUIExtensionCallbacks & callbacks,const CustomPopupUIExtensionConfig & config)386 virtual int32_t CreateCustomPopupUIExtension( 387 const AAFwk::Want& want, const ModalUIExtensionCallbacks& callbacks, const CustomPopupUIExtensionConfig& config) 388 { 389 return 0; 390 } 391 392 /** 393 * @description: Destroy the custom popup. 394 * @param config Indicates the ID of the UI node which bind the pupop 395 */ DestroyCustomPopupUIExtension(int32_t nodeId)396 virtual void DestroyCustomPopupUIExtension(int32_t nodeId) {} 397 398 /** 399 * @description: Update the custom popup. 400 * @param config Indicates the custom popup configs. 401 */ UpdateCustomPopupUIExtension(const CustomPopupUIExtensionConfig & config)402 virtual void UpdateCustomPopupUIExtension(const CustomPopupUIExtensionConfig& config) {} 403 GetFormSerializedGesture()404 virtual SerializedGesture GetFormSerializedGesture() 405 { 406 return SerializedGesture(); 407 } 408 ProcessPointerEventWithCallback(const std::shared_ptr<OHOS::MMI::PointerEvent> & pointerEvent,const std::function<void ()> & callback)409 virtual bool ProcessPointerEventWithCallback( 410 const std::shared_ptr<OHOS::MMI::PointerEvent>& pointerEvent, const std::function<void()>& callback) 411 { 412 return true; 413 }; 414 UpdateTransform(const OHOS::Rosen::Transform & transform)415 virtual void UpdateTransform(const OHOS::Rosen::Transform& transform) {}; 416 417 virtual void UpdateDecorVisible(bool visible, bool hasDeco = true) {}; 418 GetOverlayNodePositions()419 virtual std::vector<Ace::RectF> GetOverlayNodePositions() const 420 { 421 return {}; 422 }; 423 RegisterOverlayNodePositionsUpdateCallback(const std::function<void (std::vector<Ace::RectF>)> & callback)424 virtual void RegisterOverlayNodePositionsUpdateCallback( 425 const std::function<void(std::vector<Ace::RectF>)>& callback) const {}; 426 SetContentNodeGrayScale(float grayscale)427 virtual void SetContentNodeGrayScale(float grayscale) {}; 428 SetStatusBarItemColor(uint32_t color)429 virtual void SetStatusBarItemColor(uint32_t color) {}; 430 PreLayout()431 virtual void PreLayout() {}; 432 SetForceSplitEnable(bool isForceSplit,const std::string & homePage)433 virtual void SetForceSplitEnable(bool isForceSplit, const std::string& homePage) {}; 434 GetRemoteObj()435 virtual sptr<IRemoteObject> GetRemoteObj() 436 { 437 return {}; 438 } 439 }; 440 441 } // namespace OHOS::Ace 442 443 #endif // FOUNDATION_ACE_INTERFACE_INNERKITS_ACE_UI_CONTENT_H 444