1 /* 2 * Copyright (c) 2023-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_CORE_COMPONENTS_NG_PATTERNS_OVERLAY_MODAL_PRESENTATION_PATTERN_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_OVERLAY_MODAL_PRESENTATION_PATTERN_H 18 19 #include "base/memory/ace_type.h" 20 #include "base/memory/referenced.h" 21 #include "core/common/autofill/auto_fill_trigger_state_holder.h" 22 #include "core/components_ng/manager/focus/focus_view.h" 23 #include "core/components_ng/pattern/overlay/modal_style.h" 24 #include "core/components_ng/pattern/overlay/popup_base_pattern.h" 25 26 namespace OHOS::Ace::NG { 27 enum class ContentCoverDismissReason { 28 BACK_PRESSED = 0, 29 TOUCH_OUTSIDE, 30 CLOSE_BUTTON, 31 }; 32 33 class ACE_EXPORT ModalPresentationPattern : public PopupBasePattern, 34 public FocusView, public AutoFillTriggerStateHolder { 35 DECLARE_ACE_TYPE(ModalPresentationPattern, PopupBasePattern, FocusView, AutoFillTriggerStateHolder); 36 37 public: ModalPresentationPattern(int32_t targetId,ModalTransition type,std::function<void (const std::string &)> && callback)38 ModalPresentationPattern(int32_t targetId, ModalTransition type, std::function<void(const std::string&)>&& callback) 39 : targetId_(targetId), type_(type), callback_(std::move(callback)) 40 {} 41 ~ModalPresentationPattern() override = default; 42 IsMeasureBoundary()43 bool IsMeasureBoundary() const override 44 { 45 return true; 46 } 47 IsAtomicNode()48 bool IsAtomicNode() const override 49 { 50 return false; 51 } 52 GetTargetId()53 int32_t GetTargetId() const override 54 { 55 return targetId_; 56 } 57 GetType()58 ModalTransition GetType() const 59 { 60 return type_; 61 } 62 SetType(ModalTransition type)63 void SetType(ModalTransition type) 64 { 65 type_ = type; 66 } 67 FireCallback(const std::string & value)68 void FireCallback(const std::string& value) 69 { 70 if (callback_) { 71 callback_(value); 72 } 73 } 74 SetHasTransitionEffect(const bool hasTransitionEffect)75 void SetHasTransitionEffect(const bool hasTransitionEffect) 76 { 77 hasTransitionEffect_ = hasTransitionEffect; 78 } 79 HasTransitionEffect()80 bool HasTransitionEffect() const 81 { 82 return hasTransitionEffect_; 83 } 84 UpdateOnWillDismiss(const std::function<void (int32_t)> && onWillDismiss)85 void UpdateOnWillDismiss(const std::function<void(int32_t)>&& onWillDismiss) //todo 86 { 87 onWillDismiss_ = std::move(onWillDismiss); 88 } 89 HasOnWillDismiss()90 bool HasOnWillDismiss() const 91 { 92 if (onWillDismiss_) { 93 return true; 94 } 95 return false; 96 } 97 CallOnWillDismiss(const int32_t reason)98 void CallOnWillDismiss(const int32_t reason) 99 { 100 if (onWillDismiss_) { 101 onWillDismiss_(reason); 102 } 103 } 104 105 void ModalInteractiveDismiss(); 106 UpdateOnDisappear(std::function<void ()> && onDisappear)107 void UpdateOnDisappear(std::function<void()>&& onDisappear) { 108 onDisappear_ = std::move(onDisappear); 109 isExecuteOnDisappear_ = false; 110 } 111 OnDisappear()112 void OnDisappear() { 113 if (onDisappear_) { 114 isExecuteOnDisappear_ = true; 115 onDisappear_(); 116 } 117 } 118 UpdateOnWillDisappear(std::function<void ()> && onWillDisappear)119 void UpdateOnWillDisappear(std::function<void()>&& onWillDisappear) 120 { 121 onWillDisappear_ = std::move(onWillDisappear); 122 } 123 124 void OnWillDisappear(); 125 UpdateOnAppear(std::function<void ()> && onAppear)126 void UpdateOnAppear(std::function<void()>&& onAppear) 127 { 128 onAppear_ = std::move(onAppear); 129 } 130 OnAppear()131 void OnAppear() 132 { 133 if (onAppear_) { 134 onAppear_(); 135 } 136 } 137 GetFocusPattern()138 FocusPattern GetFocusPattern() const override 139 { 140 return { FocusType::SCOPE, true }; 141 } 142 GetRouteOfFirstScope()143 std::list<int32_t> GetRouteOfFirstScope() override 144 { 145 return { 0 }; 146 } 147 IsExecuteOnDisappear()148 bool IsExecuteOnDisappear() const 149 { 150 return isExecuteOnDisappear_; 151 } 152 IsUIExtension()153 bool IsUIExtension() const 154 { 155 return isUIExtension_; 156 } 157 SetProhibitedRemoveByRouter(bool prohibitedRemoveByRouter)158 void SetProhibitedRemoveByRouter(bool prohibitedRemoveByRouter) 159 { 160 prohibitedRemoveByRouter_ = prohibitedRemoveByRouter; 161 } 162 IsProhibitedRemoveByRouter()163 bool IsProhibitedRemoveByRouter() const 164 { 165 return prohibitedRemoveByRouter_; 166 } 167 SetProhibitedRemoveByNavigation(bool prohibitedRemoveByNavigation)168 void SetProhibitedRemoveByNavigation(bool prohibitedRemoveByNavigation) 169 { 170 prohibitedRemoveByNavigation_ = prohibitedRemoveByNavigation; 171 } 172 IsProhibitedRemoveByNavigation()173 bool IsProhibitedRemoveByNavigation() const 174 { 175 return prohibitedRemoveByNavigation_; 176 } 177 AvoidKeyboard()178 bool AvoidKeyboard() const override 179 { 180 // If UIExtensionComponent uses ModalPage, ModalPage will avoid KeyBoard. 181 return isUIExtension_; 182 } 183 UpdateUIExtensionMode(bool isUIExtension)184 void UpdateUIExtensionMode(bool isUIExtension) 185 { 186 isUIExtension_ = isUIExtension; 187 } 188 AvoidBottom()189 bool AvoidBottom() const override 190 { 191 // If UIExtensionComponent uses ModalPage, ModalPage will not avoid bottom. 192 return !isUIExtension_; 193 } 194 TriggerAutoSaveWhenInvisible()195 bool TriggerAutoSaveWhenInvisible() override 196 { 197 return true; 198 } 199 200 private: 201 void OnAttachToFrameNode() override; 202 bool isUIExtension_ = false; 203 bool prohibitedRemoveByRouter_ = false; 204 bool prohibitedRemoveByNavigation_ = true; 205 int32_t targetId_ = -1; 206 ModalTransition type_ = ModalTransition::DEFAULT; 207 bool hasTransitionEffect_ = false; 208 std::function<void(const int32_t& info)> onWillDismiss_; 209 std::function<void(const std::string&)> callback_; 210 std::function<void()> onDisappear_; 211 std::function<void()> onWillDisappear_; 212 std::function<void()> onAppear_; 213 bool isExecuteOnDisappear_ = false; 214 215 ACE_DISALLOW_COPY_AND_MOVE(ModalPresentationPattern); 216 }; 217 } // namespace OHOS::Ace::NG 218 219 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_OVERLAY_MODAL_PRESENTATION_PATTERN_H 220