• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
107     void BeforeCreateLayoutWrapper() override;
108 
UpdateOnDisappear(std::function<void ()> && onDisappear)109     void UpdateOnDisappear(std::function<void()>&& onDisappear) {
110         onDisappear_ = std::move(onDisappear);
111         isExecuteOnDisappear_ = false;
112     }
113 
OnDisappear()114     void OnDisappear() {
115         if (onDisappear_) {
116             isExecuteOnDisappear_ = true;
117             onDisappear_();
118         }
119     }
120 
UpdateOnWillDisappear(std::function<void ()> && onWillDisappear)121     void UpdateOnWillDisappear(std::function<void()>&& onWillDisappear)
122     {
123         onWillDisappear_ = std::move(onWillDisappear);
124     }
125 
126     void OnWillDisappear();
127 
UpdateOnAppear(std::function<void ()> && onAppear)128     void UpdateOnAppear(std::function<void()>&& onAppear)
129     {
130         onAppear_ = std::move(onAppear);
131     }
132 
OnAppear()133     void OnAppear()
134     {
135         if (onAppear_) {
136             onAppear_();
137         }
138     }
139 
GetFocusPattern()140     FocusPattern GetFocusPattern() const override
141     {
142         return { FocusType::SCOPE, true };
143     }
144 
GetRouteOfFirstScope()145     std::list<int32_t> GetRouteOfFirstScope() override
146     {
147         return { 0 };
148     }
149 
IsExecuteOnDisappear()150     bool IsExecuteOnDisappear() const
151     {
152         return isExecuteOnDisappear_;
153     }
154 
IsUIExtension()155     bool IsUIExtension() const
156     {
157         return isUIExtension_;
158     }
159 
SetProhibitedRemoveByRouter(bool prohibitedRemoveByRouter)160     void SetProhibitedRemoveByRouter(bool prohibitedRemoveByRouter)
161     {
162         prohibitedRemoveByRouter_ = prohibitedRemoveByRouter;
163     }
164 
IsProhibitedRemoveByRouter()165     bool IsProhibitedRemoveByRouter() const
166     {
167         return prohibitedRemoveByRouter_;
168     }
169 
SetProhibitedRemoveByNavigation(bool prohibitedRemoveByNavigation)170     void SetProhibitedRemoveByNavigation(bool prohibitedRemoveByNavigation)
171     {
172         prohibitedRemoveByNavigation_ = prohibitedRemoveByNavigation;
173     }
174 
IsProhibitedRemoveByNavigation()175     bool IsProhibitedRemoveByNavigation() const
176     {
177         return prohibitedRemoveByNavigation_;
178     }
179 
AvoidKeyboard()180     bool AvoidKeyboard() const override
181     {
182         // If UIExtensionComponent uses ModalPage, ModalPage will avoid KeyBoard.
183         return isUIExtension_;
184     }
185 
UpdateUIExtensionMode(bool isUIExtension)186     void UpdateUIExtensionMode(bool isUIExtension)
187     {
188         isUIExtension_ = isUIExtension;
189     }
190 
AvoidBottom()191     bool AvoidBottom() const override
192     {
193         // If UIExtensionComponent uses ModalPage, ModalPage will not avoid bottom.
194         return !isUIExtension_;
195     }
196 
197     void RegisterModalBgColorResFunc(const RefPtr<NG::FrameNode>& modalNode,
198         NG::ModalStyle& modalStyle);
199 
TriggerAutoSaveWhenInvisible()200     bool TriggerAutoSaveWhenInvisible() override
201     {
202         return true;
203     }
204 
SetEnableSafeArea(bool enableSafeArea)205     void SetEnableSafeArea(bool enableSafeArea)
206     {
207         enableSafeArea_ = enableSafeArea;
208     }
209 
GetEnableSafeArea()210     bool GetEnableSafeArea() const
211     {
212         return enableSafeArea_;
213     }
214 
IsEnableChildrenMatchParent()215     bool IsEnableChildrenMatchParent() override
216     {
217         return true;
218     }
219 
220 private:
221     void OnAttachToFrameNode() override;
222     bool isUIExtension_ = false;
223     bool prohibitedRemoveByRouter_ = false;
224     bool prohibitedRemoveByNavigation_ = true;
225     int32_t targetId_ = -1;
226     ModalTransition type_ = ModalTransition::DEFAULT;
227     bool hasTransitionEffect_ = false;
228     std::function<void(const int32_t& info)> onWillDismiss_;
229     std::function<void(const std::string&)> callback_;
230     std::function<void()> onDisappear_;
231     std::function<void()> onWillDisappear_;
232     std::function<void()> onAppear_;
233     bool isExecuteOnDisappear_ = false;
234     bool enableSafeArea_ = false;
235 
236     ACE_DISALLOW_COPY_AND_MOVE(ModalPresentationPattern);
237 };
238 } // namespace OHOS::Ace::NG
239 
240 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_OVERLAY_MODAL_PRESENTATION_PATTERN_H
241