1 /* 2 * Copyright (c) 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 FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVDESTINATION_NAVDESTINATION_MODEL_H 17 #define FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVDESTINATION_NAVDESTINATION_MODEL_H 18 19 #include <mutex> 20 #include <optional> 21 22 #include "base/system_bar/system_bar_style.h" 23 #include "core/common/resource/resource_parse_utils.h" 24 #include "core/components/common/layout/constants.h" 25 #include "core/components_ng/pattern/navigation/navigation_declaration.h" 26 #include "core/components_ng/pattern/navigation/navigation_options.h" 27 #include "core/components_ng/pattern/navrouter/navdestination_context.h" 28 #include "core/components_ng/pattern/navrouter/navdestination_scrollable_processor.h" 29 #include "core/components_ng/pattern/navigation/title_bar_pattern.h" 30 31 namespace OHOS::Ace { 32 enum class NavDestinationPatternType { 33 TITLE_BAR = 0, 34 NAV_DESTINATION, 35 }; 36 class ACE_FORCE_EXPORT NavDestinationModel { 37 public: 38 static NavDestinationModel* GetInstance(); 39 virtual ~NavDestinationModel() = default; 40 41 virtual void Create() = 0; 42 virtual void Create( 43 std::function<void()>&& deepRenderFunc, RefPtr<NG::NavDestinationContext> context = nullptr) = 0; 44 virtual void SetHideTitleBar(bool hideTitleBar, bool animated = false) = 0; 45 virtual void SetHideBackButton(bool hideBackButton) = 0; 46 virtual void SetTitle(const std::string& title, bool hasSubTitle) = 0; SetTitlebarOptions(NG::NavigationTitlebarOptions && opt)47 virtual void SetTitlebarOptions(NG::NavigationTitlebarOptions&& opt) {}; 48 virtual void SetBackButtonIcon(const std::function<void(WeakPtr<NG::FrameNode>)>& iconSymbol, 49 const std::string& src, const NG::ImageOption& imageOption, RefPtr<PixelMap>& pixMap, 50 const std::vector<std::string>& nameList, bool userDefinedAccessibilityText = false, 51 const std::string& backButtonAccessibilityText = "") = 0; 52 virtual void SetBackButtonIcon(const std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, 53 const RefPtr<ResourceObject>& resObj, const NG::ImageOption& imageOption, RefPtr<PixelMap>& pixMap, 54 const std::vector<std::string>& nameList, bool userDefinedAccessibilityText = false, 55 const std::string& backButtonAccessibilityText = ""); 56 virtual void SetBackButtonIconTextRes(const std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, 57 const std::string& src, const NG::ImageOption& imageOption, RefPtr<PixelMap>& pixMap, 58 const std::vector<std::string>& nameList, bool userDefinedAccessibilityText, 59 const RefPtr<ResourceObject>& resObj); 60 virtual void SetBackButtonIconSrcAndTextRes(const std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, 61 const RefPtr<ResourceObject>& backButtonResObj, const NG::ImageOption& imageOption, RefPtr<PixelMap>& pixMap, 62 const std::vector<std::string>& nameList, bool userDefinedAccessibilityText, 63 const RefPtr<ResourceObject>& backButtonTextResObj); 64 virtual void UpdateBackButtonIcon(const std::vector<std::string>& nameList, 65 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& backButtonIconResObj); 66 virtual void UpdateBackButtonIconText(bool userDefinedAccessibilityText, 67 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& backButtonTextResObj); 68 virtual void SetSubtitle(const std::string& subtitle) = 0; 69 virtual void SetCustomTitle(const RefPtr<AceType>& customNode) = 0; 70 virtual void SetTitleHeight(const Dimension& titleHeight, bool isValid = true) = 0; SetTitleHeight(const Dimension & height,const RefPtr<ResourceObject> & resObj)71 virtual void SetTitleHeight(const Dimension& height, const RefPtr<ResourceObject>& resObj) {} 72 virtual void UpdateTitleHeight( 73 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& resObj) = 0; 74 virtual void SetOnShown(std::function<void()>&& onShow) = 0; 75 virtual void SetOnHidden(std::function<void()>&& onHidden) = 0; 76 virtual void SetOnWillAppear(std::function<void()>&& willAppear) = 0; 77 virtual void SetOnWillShow(std::function<void()>&& willShow) = 0; 78 virtual void SetOnWillHide(std::function<void()>&& willHide) = 0; 79 virtual void SetOnWillDisAppear(std::function<void()>&& willDisAppear) = 0; 80 virtual void SetOnActive(std::function<void(int32_t)>&& onActive) = 0; 81 virtual void SetOnInactive(std::function<void(int32_t)>&& onInactive) = 0; 82 virtual void SetOnBackPressed(std::function<bool()>&& onBackPressed) = 0; 83 virtual void SetOnReady(std::function<void(RefPtr<NG::NavDestinationContext>)>&& onReady) = 0; 84 virtual void SetOnPop(std::function<void(const RefPtr<NG::NavPathInfo>&)>&& onPop) = 0; 85 virtual void SetHideToolBar(bool hideToolBar, bool animated = false) = 0; 86 virtual void SetToolbarConfiguration(std::vector<NG::BarItem>&& toolBarItems) = 0; SetToolbarConfiguration(std::vector<NG::BarItem> && toolBarItems,NG::MoreButtonOptions && opt)87 virtual void SetToolbarConfiguration(std::vector<NG::BarItem>&& toolBarItems, NG::MoreButtonOptions&& opt) {} SetHideItemText(bool isHideItemText)88 virtual void SetHideItemText(bool isHideItemText) {}; SetToolBarOptions(NG::NavigationToolbarOptions && opt)89 virtual void SetToolBarOptions(NG::NavigationToolbarOptions&& opt) {} SetToolbarMorebuttonOptions(NG::MoreButtonOptions && opt)90 virtual void SetToolbarMorebuttonOptions(NG::MoreButtonOptions&& opt) {} 91 virtual void SetCustomToolBar(const RefPtr<AceType>& customNode) = 0; 92 virtual void SetNavDestinationMode(NG::NavDestinationMode mode); SetRecoverable(bool recoverable)93 virtual void SetRecoverable(bool recoverable) {} SetMenuItems(std::vector<NG::BarItem> && menuItems)94 virtual void SetMenuItems(std::vector<NG::BarItem>&& menuItems) {}; SetMenuOptions(NG::NavigationMenuOptions && opt)95 virtual void SetMenuOptions(NG::NavigationMenuOptions&& opt) {}; 96 virtual void SetCustomMenu(const RefPtr<AceType>& customNode) = 0; 97 virtual void SetBackgroundColor( 98 const Color& color, bool isVaild = true, const RefPtr<ResourceObject>& backgroundColorResObj = nullptr) = 0; SetNavDestinationPathInfo(const std::string & moduleName,const std::string & pagePath)99 virtual void SetNavDestinationPathInfo(const std::string& moduleName, const std::string& pagePath) {}; CreateEmpty()100 virtual RefPtr<AceType> CreateEmpty() 101 { 102 return nullptr; 103 } ParseCommonTitle(bool hasSubTitle,bool hasMainTitle,const std::string & subtitle,const std::string & title)104 virtual bool ParseCommonTitle( 105 bool hasSubTitle, bool hasMainTitle, const std::string& subtitle, const std::string& title) 106 { 107 return false; 108 } 109 SetIgnoreLayoutSafeArea(const NG::IgnoreLayoutSafeAreaOpts & opts)110 virtual void SetIgnoreLayoutSafeArea(const NG::IgnoreLayoutSafeAreaOpts& opts) {}; SetSystemBarStyle(const RefPtr<SystemBarStyle> & style)111 virtual void SetSystemBarStyle(const RefPtr<SystemBarStyle>& style) {}; SetSystemTransitionType(NG::NavigationSystemTransitionType type)112 virtual void SetSystemTransitionType(NG::NavigationSystemTransitionType type) {}; SetScrollableProcessor(const std::function<RefPtr<NG::NavDestinationScrollableProcessor> ()> & creator)113 virtual void SetScrollableProcessor( 114 const std::function<RefPtr<NG::NavDestinationScrollableProcessor>()>& creator) {} UpdateBindingWithScrollable(std::function<void (const RefPtr<NG::NavDestinationScrollableProcessor> & processor)> && callback)115 virtual void UpdateBindingWithScrollable( 116 std::function<void(const RefPtr<NG::NavDestinationScrollableProcessor>& processor)>&& callback) {} SetCustomTransition(NG::NavDestinationTransitionDelegate && transitionDelegate)117 virtual void SetCustomTransition(NG::NavDestinationTransitionDelegate&& transitionDelegate) {} SetOnNewParam(NG::NavDestinationOnNewParamCallback && onNewParamCallback)118 virtual void SetOnNewParam(NG::NavDestinationOnNewParamCallback&& onNewParamCallback) {} SetPreferredOrientation(const std::optional<Orientation> & ori)119 virtual void SetPreferredOrientation(const std::optional<Orientation>& ori) {} SetEnableStatusBar(const std::optional<std::pair<bool,bool>> & statusBar)120 virtual void SetEnableStatusBar(const std::optional<std::pair<bool, bool>>& statusBar) {} SetEnableNavigationIndicator(const std::optional<bool> & navigationIndicator)121 virtual void SetEnableNavigationIndicator(const std::optional<bool>& navigationIndicator) {} ResetResObj(NavDestinationPatternType type,const std::string & key)122 virtual void ResetResObj(NavDestinationPatternType type, const std::string& key) {} ParseCommonTitle(bool hasSubTitle,bool hasMainTitle,const RefPtr<ResourceObject> & subResObj,const RefPtr<ResourceObject> & mainResObj)123 virtual bool ParseCommonTitle(bool hasSubTitle, bool hasMainTitle, const RefPtr<ResourceObject>& subResObj, 124 const RefPtr<ResourceObject>& mainResObj) {return false;}; UpdateMainTitle(const RefPtr<NG::TitleBarNode> & titleBarNode,const RefPtr<ResourceObject> & mainResObj)125 virtual void UpdateMainTitle( 126 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& mainResObj) {}; UpdateSubTitle(const RefPtr<NG::TitleBarNode> & titleBarNode,const RefPtr<ResourceObject> & subResObj)127 virtual void UpdateSubTitle( 128 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& subResObj) {}; 129 130 private: 131 static std::unique_ptr<NavDestinationModel> instance_; 132 static std::mutex mutex_; 133 }; 134 } // namespace OHOS::Ace 135 136 #endif // FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVDESTINATION_NAVDESTINATION_MODEL_H 137