1 /*
2 * Copyright (c) 2022-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 #include "core/components_ng/pattern/time_picker/timepicker_model_ng.h"
17
18 #include <cstdint>
19
20 #include "base/utils/utils.h"
21 #include "core/components_ng/base/frame_node.h"
22 #include "core/components_ng/base/view_stack_processor.h"
23 #include "core/components_ng/pattern/button/button_pattern.h"
24 #include "core/components_ng/pattern/stack/stack_pattern.h"
25 #include "core/components_ng/pattern/text/text_pattern.h"
26 #include "core/components_ng/pattern/time_picker/timepicker_column_pattern.h"
27 #include "core/components_ng/pattern/time_picker/timepicker_event_hub.h"
28 #include "core/components_ng/pattern/time_picker/timepicker_layout_property.h"
29 #include "core/components_ng/pattern/time_picker/timepicker_row_pattern.h"
30 #include "core/components_v2/inspector/inspector_constants.h"
31 #include "core/pipeline_ng/pipeline_context.h"
32
33 namespace OHOS::Ace::NG {
34 namespace {
35 constexpr float PICKER_MAXFONTSCALE = 1.75f;
36 constexpr int32_t BUFFER_NODE_NUMBER = 2;
37 } // namespace
CreateTimePicker(RefPtr<PickerTheme> pickerTheme,bool hasSecond)38 void TimePickerModelNG::CreateTimePicker(RefPtr<PickerTheme> pickerTheme, bool hasSecond)
39 {
40 auto* stack = ViewStackProcessor::GetInstance();
41 auto nodeId = stack->ClaimNodeId();
42 ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", V2::TIME_PICKER_ETS_TAG, nodeId);
43 auto timePickerNode = FrameNode::GetOrCreateFrameNode(
44 V2::TIME_PICKER_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<TimePickerRowPattern>(); });
45
46 CHECK_NULL_VOID(pickerTheme);
47 uint32_t showCount = pickerTheme->GetShowOptionCount() + BUFFER_NODE_NUMBER;
48 auto timePickerRowPattern = timePickerNode->GetPattern<TimePickerRowPattern>();
49 CHECK_NULL_VOID(timePickerRowPattern);
50 timePickerRowPattern->SetShowCount(showCount);
51 timePickerRowPattern->SetPickerTag(true);
52 auto hasHourNode = timePickerRowPattern->HasHourNode();
53 auto hasMinuteNode = timePickerRowPattern->HasMinuteNode();
54 auto hourId = timePickerRowPattern->GetHourId();
55 auto minuteId = timePickerRowPattern->GetMinuteId();
56
57 auto hourColumnNode = FrameNode::GetOrCreateFrameNode(
58 V2::COLUMN_ETS_TAG, hourId, []() { return AceType::MakeRefPtr<TimePickerColumnPattern>(); });
59 CHECK_NULL_VOID(hourColumnNode);
60 if (!hasHourNode) {
61 for (uint32_t index = 0; index < showCount; index++) {
62 auto textNode = FrameNode::CreateFrameNode(
63 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
64 CHECK_NULL_VOID(textNode);
65 textNode->MountToParent(hourColumnNode);
66 }
67 hourColumnNode->MarkModifyDone();
68 timePickerRowPattern->SetColumn(hourColumnNode);
69 }
70
71 auto minuteColumnNode = FrameNode::GetOrCreateFrameNode(
72 V2::COLUMN_ETS_TAG, minuteId, []() { return AceType::MakeRefPtr<TimePickerColumnPattern>(); });
73 CHECK_NULL_VOID(minuteColumnNode);
74 if (!hasMinuteNode) {
75 for (uint32_t index = 0; index < showCount; index++) {
76 auto textNode = FrameNode::CreateFrameNode(
77 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
78 CHECK_NULL_VOID(textNode);
79 textNode->MountToParent(minuteColumnNode);
80 }
81 minuteColumnNode->MarkModifyDone();
82 timePickerRowPattern->SetColumn(minuteColumnNode);
83 }
84 if (!hasHourNode) {
85 auto stackHourNode = CreateStackNode();
86 auto columnBlendNode = CreateColumnNode();
87 auto buttonYearNode = CreateButtonNode();
88 buttonYearNode->MountToParent(stackHourNode);
89 hourColumnNode->MountToParent(columnBlendNode);
90 columnBlendNode->MountToParent(stackHourNode);
91 auto layoutProperty = stackHourNode->GetLayoutProperty<LayoutProperty>();
92 layoutProperty->UpdateAlignment(Alignment::CENTER);
93 layoutProperty->UpdateLayoutWeight(1);
94 stackHourNode->MountToParent(timePickerNode);
95 }
96 if (!hasMinuteNode) {
97 auto stackMinuteNode = CreateStackNode();
98 auto columnBlendNode = CreateColumnNode();
99 auto buttonYearNode = CreateButtonNode();
100 buttonYearNode->MountToParent(stackMinuteNode);
101 minuteColumnNode->MountToParent(columnBlendNode);
102 columnBlendNode->MountToParent(stackMinuteNode);
103 auto layoutProperty = stackMinuteNode->GetLayoutProperty<LayoutProperty>();
104 layoutProperty->UpdateAlignment(Alignment::CENTER);
105 layoutProperty->UpdateLayoutWeight(1);
106 auto language = AceApplicationInfo::GetInstance().GetLanguage();
107 language == "ug" ? stackMinuteNode->MountToParent(timePickerNode, 0)
108 : stackMinuteNode->MountToParent(timePickerNode);
109 }
110 timePickerRowPattern->SetHasSecond(hasSecond);
111 stack->Push(timePickerNode);
112 }
113
CreateStackNode()114 RefPtr<FrameNode> TimePickerModelNG::CreateStackNode()
115 {
116 auto stackId = ElementRegister::GetInstance()->MakeUniqueId();
117 return FrameNode::GetOrCreateFrameNode(
118 V2::STACK_ETS_TAG, stackId, []() { return AceType::MakeRefPtr<StackPattern>(); });
119 }
120
CreateColumnNode()121 RefPtr<FrameNode> TimePickerModelNG::CreateColumnNode()
122 {
123 auto columnId = ElementRegister::GetInstance()->MakeUniqueId();
124 return FrameNode::GetOrCreateFrameNode(
125 V2::COLUMN_ETS_TAG, columnId, []() { return AceType::MakeRefPtr<LinearLayoutPattern>(true); });
126 }
127
CreateButtonNode()128 RefPtr<FrameNode> TimePickerModelNG::CreateButtonNode()
129 {
130 auto buttonId = ElementRegister::GetInstance()->MakeUniqueId();
131 return FrameNode::GetOrCreateFrameNode(
132 V2::BUTTON_ETS_TAG, buttonId, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
133 }
134
CreateFrameNode(int32_t nodeId)135 RefPtr<FrameNode> TimePickerModelNG::CreateFrameNode(int32_t nodeId)
136 {
137 ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", V2::TIME_PICKER_ETS_TAG, nodeId);
138 auto timePickerNode = FrameNode::GetOrCreateFrameNode(
139 V2::TIME_PICKER_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<TimePickerRowPattern>(); });
140
141 auto pipeline = PipelineBase::GetCurrentContextSafely();
142 CHECK_NULL_RETURN(pipeline, timePickerNode);
143 auto pickerTheme = pipeline->GetTheme<PickerTheme>();
144 CHECK_NULL_RETURN(pickerTheme, timePickerNode);
145 uint32_t showCount = pickerTheme->GetShowOptionCount() + BUFFER_NODE_NUMBER;
146 auto timePickerRowPattern = timePickerNode->GetPattern<TimePickerRowPattern>();
147 CHECK_NULL_RETURN(timePickerRowPattern, timePickerNode);
148 timePickerRowPattern->SetShowCount(showCount);
149 timePickerRowPattern->SetPickerTag(true);
150 auto hasHourNode = timePickerRowPattern->HasHourNode();
151 auto hasMinuteNode = timePickerRowPattern->HasMinuteNode();
152 auto hourId = timePickerRowPattern->GetHourId();
153 auto minuteId = timePickerRowPattern->GetMinuteId();
154 SetDefaultAttributes(timePickerNode, pickerTheme);
155
156 auto hourColumnNode = FrameNode::GetOrCreateFrameNode(
157 V2::COLUMN_ETS_TAG, hourId, []() { return AceType::MakeRefPtr<TimePickerColumnPattern>(); });
158 CHECK_NULL_RETURN(hourColumnNode, timePickerNode);
159 if (!hasHourNode) {
160 for (uint32_t index = 0; index < showCount; index++) {
161 auto textNode = FrameNode::CreateFrameNode(
162 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
163 CHECK_NULL_RETURN(textNode, timePickerNode);
164 textNode->MountToParent(hourColumnNode);
165 }
166 hourColumnNode->MarkModifyDone();
167 timePickerRowPattern->SetColumn(hourColumnNode);
168 }
169
170 auto minuteColumnNode = FrameNode::GetOrCreateFrameNode(
171 V2::COLUMN_ETS_TAG, minuteId, []() { return AceType::MakeRefPtr<TimePickerColumnPattern>(); });
172 CHECK_NULL_RETURN(minuteColumnNode, timePickerNode);
173 if (!hasMinuteNode) {
174 for (uint32_t index = 0; index < showCount; index++) {
175 auto textNode = FrameNode::CreateFrameNode(
176 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
177 CHECK_NULL_RETURN(textNode, timePickerNode);
178 textNode->MountToParent(minuteColumnNode);
179 }
180 minuteColumnNode->MarkModifyDone();
181 timePickerRowPattern->SetColumn(minuteColumnNode);
182 }
183 if (!hasHourNode) {
184 auto stackHourNode = CreateStackNode();
185 auto columnBlendNode = CreateColumnNode();
186 auto buttonYearNode = CreateButtonNode();
187 buttonYearNode->MountToParent(stackHourNode);
188 hourColumnNode->MountToParent(columnBlendNode);
189 columnBlendNode->MountToParent(stackHourNode);
190 auto layoutProperty = stackHourNode->GetLayoutProperty<LayoutProperty>();
191 layoutProperty->UpdateAlignment(Alignment::CENTER);
192 layoutProperty->UpdateLayoutWeight(1);
193 stackHourNode->MountToParent(timePickerNode);
194 }
195 if (!hasMinuteNode) {
196 auto stackMinuteNode = CreateStackNode();
197 auto columnBlendNode = CreateColumnNode();
198 auto buttonYearNode = CreateButtonNode();
199 buttonYearNode->MountToParent(stackMinuteNode);
200 minuteColumnNode->MountToParent(columnBlendNode);
201 columnBlendNode->MountToParent(stackMinuteNode);
202 auto layoutProperty = stackMinuteNode->GetLayoutProperty<LayoutProperty>();
203 layoutProperty->UpdateAlignment(Alignment::CENTER);
204 layoutProperty->UpdateLayoutWeight(1);
205 stackMinuteNode->MountToParent(timePickerNode);
206 }
207 timePickerRowPattern->SetHasSecond(false);
208 return timePickerNode;
209 }
210
SetSelectedTime(const PickerTime & value)211 void TimePickerModelNG::SetSelectedTime(const PickerTime& value)
212 {
213 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
214 CHECK_NULL_VOID(frameNode);
215 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
216 timePickerRowPattern->SetSelectedTime(value);
217 }
218
SetIsEnableHapticFeedback(bool isEnableHapticFeedback)219 void TimePickerModelNG::SetIsEnableHapticFeedback(bool isEnableHapticFeedback)
220 {
221 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
222 SetIsEnableHapticFeedback(frameNode, isEnableHapticFeedback);
223 }
224
SetHour24(bool isUseMilitaryTime)225 void TimePickerModelNG::SetHour24(bool isUseMilitaryTime)
226 {
227 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, IsUseMilitaryTime, isUseMilitaryTime);
228 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
229 CHECK_NULL_VOID(frameNode);
230 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
231 timePickerRowPattern->ClearOptionsHour();
232 timePickerRowPattern->SetHour24(isUseMilitaryTime);
233 }
234
SetDateTimeOptions(ZeroPrefixType & hourType,ZeroPrefixType & minuteType,ZeroPrefixType & secondType)235 void TimePickerModelNG::SetDateTimeOptions(ZeroPrefixType& hourType,
236 ZeroPrefixType& minuteType, ZeroPrefixType& secondType)
237 {
238 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
239 CHECK_NULL_VOID(frameNode);
240 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
241 if ((timePickerRowPattern->GetPrefixHour() != hourType) ||
242 (timePickerRowPattern->GetPrefixMinute() != minuteType) ||
243 (timePickerRowPattern->GetPrefixSecond() != secondType)) {
244 timePickerRowPattern->SetDateTimeOptionUpdate(true);
245 }
246 timePickerRowPattern->SetPrefixHour(hourType);
247 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, PrefixHour, static_cast<int32_t>(hourType));
248 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, PrefixMinute, static_cast<int32_t>(minuteType));
249 if (timePickerRowPattern->GetHasSecond()) {
250 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, PrefixSecond, static_cast<int32_t>(secondType));
251 } else {
252 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, PrefixSecond, static_cast<int32_t>(ZeroPrefixType::OFF));
253 }
254 }
255
SetWheelModeEnabled(bool wheelModeEnabled)256 void TimePickerModelNG::SetWheelModeEnabled(bool wheelModeEnabled)
257 {
258 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, Loop, wheelModeEnabled);
259 }
260
SetWheelModeEnabled(FrameNode * frameNode,bool wheelModeEnabled)261 void TimePickerModelNG::SetWheelModeEnabled(FrameNode* frameNode, bool wheelModeEnabled)
262 {
263 CHECK_NULL_VOID(frameNode);
264 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, Loop, wheelModeEnabled, frameNode);
265 }
266
SetOnChange(TimeChangeEvent && onChange)267 void TimePickerModelNG::SetOnChange(TimeChangeEvent&& onChange)
268 {
269 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
270 CHECK_NULL_VOID(frameNode);
271 auto eventHub = frameNode->GetEventHub<TimePickerEventHub>();
272 CHECK_NULL_VOID(eventHub);
273 eventHub->SetOnChange(std::move(onChange));
274 }
275
SetOnChange(FrameNode * frameNode,TimeChangeEvent && onChange)276 void TimePickerModelNG::SetOnChange(FrameNode* frameNode, TimeChangeEvent&& onChange)
277 {
278 CHECK_NULL_VOID(frameNode);
279 auto eventHub = frameNode->GetEventHub<TimePickerEventHub>();
280 CHECK_NULL_VOID(eventHub);
281 eventHub->SetOnChange(std::move(onChange));
282 }
283
SetDisappearTextStyle(const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)284 void TimePickerModelNG::SetDisappearTextStyle(const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
285 {
286 CHECK_NULL_VOID(theme);
287 auto disappearStyle = theme->GetDisappearOptionStyle();
288 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
289 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, DisappearFontSize,
290 ConvertFontScaleValue(value.fontSize.value()));
291 } else {
292 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, DisappearFontSize,
293 ConvertFontScaleValue(disappearStyle.GetFontSize()));
294 }
295 ACE_UPDATE_LAYOUT_PROPERTY(
296 TimePickerLayoutProperty, DisappearColor, value.textColor.value_or(disappearStyle.GetTextColor()));
297 ACE_UPDATE_LAYOUT_PROPERTY(
298 TimePickerLayoutProperty, DisappearWeight, value.fontWeight.value_or(disappearStyle.GetFontWeight()));
299 ACE_UPDATE_LAYOUT_PROPERTY(
300 TimePickerLayoutProperty, DisappearFontFamily, value.fontFamily.value_or(disappearStyle.GetFontFamilies()));
301 ACE_UPDATE_LAYOUT_PROPERTY(
302 TimePickerLayoutProperty, DisappearFontStyle, value.fontStyle.value_or(disappearStyle.GetFontStyle()));
303 }
304
SetNormalTextStyle(const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)305 void TimePickerModelNG::SetNormalTextStyle(const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
306 {
307 CHECK_NULL_VOID(theme);
308 auto normalStyle = theme->GetOptionStyle(false, false);
309 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
310 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, FontSize, ConvertFontScaleValue(value.fontSize.value()));
311 } else {
312 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, FontSize,
313 ConvertFontScaleValue(normalStyle.GetFontSize()));
314 }
315 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, Color, value.textColor.value_or(normalStyle.GetTextColor()));
316 ACE_UPDATE_LAYOUT_PROPERTY(
317 TimePickerLayoutProperty, Weight, value.fontWeight.value_or(normalStyle.GetFontWeight()));
318 ACE_UPDATE_LAYOUT_PROPERTY(
319 TimePickerLayoutProperty, FontFamily, value.fontFamily.value_or(normalStyle.GetFontFamilies()));
320 ACE_UPDATE_LAYOUT_PROPERTY(
321 TimePickerLayoutProperty, FontStyle, value.fontStyle.value_or(normalStyle.GetFontStyle()));
322 }
323
SetSelectedTextStyle(const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)324 void TimePickerModelNG::SetSelectedTextStyle(const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
325 {
326 CHECK_NULL_VOID(theme);
327 auto selectedStyle = theme->GetOptionStyle(true, false);
328 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
329 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, SelectedFontSize,
330 ConvertFontScaleValue(value.fontSize.value()));
331 } else {
332 ACE_UPDATE_LAYOUT_PROPERTY(TimePickerLayoutProperty, SelectedFontSize,
333 ConvertFontScaleValue(selectedStyle.GetFontSize()));
334 }
335 ACE_UPDATE_LAYOUT_PROPERTY(
336 TimePickerLayoutProperty, SelectedColor, value.textColor.value_or(selectedStyle.GetTextColor()));
337 ACE_UPDATE_LAYOUT_PROPERTY(
338 TimePickerLayoutProperty, SelectedWeight, value.fontWeight.value_or(selectedStyle.GetFontWeight()));
339 ACE_UPDATE_LAYOUT_PROPERTY(
340 TimePickerLayoutProperty, SelectedFontFamily, value.fontFamily.value_or(selectedStyle.GetFontFamilies()));
341 ACE_UPDATE_LAYOUT_PROPERTY(
342 TimePickerLayoutProperty, SelectedFontStyle, value.fontStyle.value_or(selectedStyle.GetFontStyle()));
343 }
344
HasUserDefinedDisappearFontFamily(bool isUserDefined)345 void TimePickerModelNG::HasUserDefinedDisappearFontFamily(bool isUserDefined)
346 {
347 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
348 CHECK_NULL_VOID(frameNode);
349 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
350 CHECK_NULL_VOID(timePickerRowPattern);
351 timePickerRowPattern->HasUserDefinedDisappearFontFamily(isUserDefined);
352 }
353
HasUserDefinedNormalFontFamily(bool isUserDefined)354 void TimePickerModelNG::HasUserDefinedNormalFontFamily(bool isUserDefined)
355 {
356 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
357 CHECK_NULL_VOID(frameNode);
358 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
359 CHECK_NULL_VOID(timePickerRowPattern);
360 timePickerRowPattern->HasUserDefinedNormalFontFamily(isUserDefined);
361 }
362
HasUserDefinedSelectedFontFamily(bool isUserDefined)363 void TimePickerModelNG::HasUserDefinedSelectedFontFamily(bool isUserDefined)
364 {
365 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
366 CHECK_NULL_VOID(frameNode);
367 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
368 CHECK_NULL_VOID(timePickerRowPattern);
369 timePickerRowPattern->HasUserDefinedSelectedFontFamily(isUserDefined);
370 }
371
SetBackgroundColor(const Color & color)372 void TimePickerModelNG::SetBackgroundColor(const Color& color)
373 {
374 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
375 CHECK_NULL_VOID(frameNode);
376 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
377 CHECK_NULL_VOID(timePickerRowPattern);
378 timePickerRowPattern->SetBackgroundColor(color);
379 }
380
SetChangeEvent(TimeChangeEvent && onChange)381 void TimePickerModelNG::SetChangeEvent(TimeChangeEvent&& onChange)
382 {
383 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
384 CHECK_NULL_VOID(frameNode);
385 auto eventHub = frameNode->GetEventHub<TimePickerEventHub>();
386 CHECK_NULL_VOID(eventHub);
387 eventHub->SetChangeEvent(std::move(onChange));
388 }
389
SetTimePickerDialogShow(PickerDialogInfo & pickerDialog,NG::TimePickerSettingData & settingData,std::function<void ()> && onCancel,std::function<void (const std::string &)> && onAccept,std::function<void (const std::string &)> && onChange,TimePickerDialogEvent & timePickerDialogEvent,const std::vector<ButtonInfo> & buttonInfos)390 void TimePickerDialogModelNG::SetTimePickerDialogShow(PickerDialogInfo& pickerDialog,
391 NG::TimePickerSettingData& settingData, std::function<void()>&& onCancel,
392 std::function<void(const std::string&)>&& onAccept, std::function<void(const std::string&)>&& onChange,
393 TimePickerDialogEvent& timePickerDialogEvent, const std::vector<ButtonInfo>& buttonInfos)
394 {
395 auto container = Container::Current();
396 if (!container) {
397 return;
398 }
399 auto pipelineContext = AccessibilityManager::DynamicCast<NG::PipelineContext>(container->GetPipelineContext());
400 if (!pipelineContext) {
401 return;
402 }
403 auto executor = pipelineContext->GetTaskExecutor();
404 if (!executor) {
405 return;
406 }
407 auto pipeline = PipelineBase::GetCurrentContext();
408 CHECK_NULL_VOID(pipeline);
409 auto theme = pipeline->GetTheme<DialogTheme>();
410 CHECK_NULL_VOID(theme);
411 std::map<std::string, NG::DialogEvent> dialogEvent;
412 dialogEvent["changeId"] = onChange;
413 dialogEvent["acceptId"] = onAccept;
414 std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent;
415 auto func = [onCancel](const GestureEvent& /* info */) {
416 if (onCancel) {
417 onCancel();
418 }
419 };
420 dialogCancelEvent["cancelId"] = func;
421 std::map<std::string, NG::DialogCancelEvent> dialogLifeCycleEvent;
422 dialogLifeCycleEvent["didAppearId"] = timePickerDialogEvent.onDidAppear;
423 dialogLifeCycleEvent["didDisappearId"] = timePickerDialogEvent.onDidDisappear;
424 dialogLifeCycleEvent["willAppearId"] = timePickerDialogEvent.onWillAppear;
425 dialogLifeCycleEvent["willDisappearId"] = timePickerDialogEvent.onWillDisappear;
426 DialogProperties properties;
427 if (Container::LessThanAPIVersion(PlatformVersion::VERSION_ELEVEN)) {
428 properties.alignment = theme->GetAlignment();
429 }
430 if (pickerDialog.alignment.has_value()) {
431 properties.alignment = pickerDialog.alignment.value();
432 }
433
434 if (pickerDialog.backgroundColor.has_value()) {
435 properties.backgroundColor = pickerDialog.backgroundColor.value();
436 }
437 if (pickerDialog.backgroundBlurStyle.has_value()) {
438 properties.backgroundBlurStyle = pickerDialog.backgroundBlurStyle.value();
439 }
440 if (pickerDialog.shadow.has_value()) {
441 properties.shadow = pickerDialog.shadow.value();
442 }
443 properties.customStyle = false;
444 if (Container::LessThanAPIVersion(PlatformVersion::VERSION_ELEVEN)) {
445 properties.offset = DimensionOffset(Offset(0, -theme->GetMarginBottom().ConvertToPx()));
446 }
447 if (pickerDialog.offset.has_value()) {
448 properties.offset = pickerDialog.offset.value();
449 }
450
451 properties.maskRect = pickerDialog.maskRect;
452 properties.enableHoverMode = pickerDialog.enableHoverMode;
453 if (pickerDialog.hoverModeArea.has_value()) {
454 properties.hoverModeArea = pickerDialog.hoverModeArea.value();
455 }
456
457 std::map<std::string, PickerTime> timePickerProperty;
458 if (pickerDialog.isSelectedTime == true) {
459 timePickerProperty["selected"] = pickerDialog.pickerTime;
460 }
461 auto context = AccessibilityManager::DynamicCast<NG::PipelineContext>(pipelineContext);
462 auto overlayManager = context ? context->GetOverlayManager() : nullptr;
463 executor->PostTask(
464 [properties, settingData, timePickerProperty, dialogEvent, dialogCancelEvent, dialogLifeCycleEvent, buttonInfos,
465 weak = WeakPtr<NG::OverlayManager>(overlayManager)] {
466 auto overlayManager = weak.Upgrade();
467 CHECK_NULL_VOID(overlayManager);
468 overlayManager->ShowTimeDialog(properties, settingData, timePickerProperty, dialogEvent, dialogCancelEvent,
469 dialogLifeCycleEvent, buttonInfos);
470 },
471 TaskExecutor::TaskType::UI, "ArkUITimePickerShowTimeDialog");
472 }
473
SetSelectedTime(FrameNode * frameNode,const PickerTime & value)474 void TimePickerModelNG::SetSelectedTime(FrameNode* frameNode, const PickerTime& value)
475 {
476 CHECK_NULL_VOID(frameNode);
477 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
478 timePickerRowPattern->SetSelectedTime(value);
479 }
480
SetDisappearTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)481 void TimePickerModelNG::SetDisappearTextStyle(
482 FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
483 {
484 CHECK_NULL_VOID(theme);
485 auto disappearStyle = theme->GetDisappearOptionStyle();
486 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
487 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
488 TimePickerLayoutProperty, DisappearFontSize,
489 ConvertFontScaleValue(value.fontSize.value()), frameNode);
490 } else {
491 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
492 TimePickerLayoutProperty, DisappearFontSize,
493 ConvertFontScaleValue(disappearStyle.GetFontSize()), frameNode);
494 }
495 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
496 TimePickerLayoutProperty, DisappearColor,
497 value.textColor.value_or(disappearStyle.GetTextColor()), frameNode);
498 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
499 TimePickerLayoutProperty, DisappearWeight,
500 value.fontWeight.value_or(disappearStyle.GetFontWeight()), frameNode);
501 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
502 TimePickerLayoutProperty, DisappearFontFamily,
503 value.fontFamily.value_or(disappearStyle.GetFontFamilies()), frameNode);
504 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
505 TimePickerLayoutProperty, DisappearFontStyle,
506 value.fontStyle.value_or(disappearStyle.GetFontStyle()), frameNode);
507 }
SetNormalTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)508 void TimePickerModelNG::SetNormalTextStyle(
509 FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
510 {
511 CHECK_NULL_VOID(theme);
512 auto normalStyle = theme->GetOptionStyle(false, false);
513 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
514 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, FontSize,
515 ConvertFontScaleValue(value.fontSize.value()), frameNode);
516 } else {
517 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, FontSize,
518 ConvertFontScaleValue(normalStyle.GetFontSize()), frameNode);
519 }
520 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
521 TimePickerLayoutProperty, Color, value.textColor.value_or(normalStyle.GetTextColor()), frameNode);
522 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
523 TimePickerLayoutProperty, Weight, value.fontWeight.value_or(normalStyle.GetFontWeight()), frameNode);
524 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
525 TimePickerLayoutProperty, FontFamily, value.fontFamily.value_or(normalStyle.GetFontFamilies()), frameNode);
526 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
527 TimePickerLayoutProperty, FontStyle, value.fontStyle.value_or(normalStyle.GetFontStyle()), frameNode);
528 }
SetSelectedTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)529 void TimePickerModelNG::SetSelectedTextStyle(
530 FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
531 {
532 CHECK_NULL_VOID(theme);
533 auto selectedStyle = theme->GetOptionStyle(true, false);
534 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
535 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
536 TimePickerLayoutProperty, SelectedFontSize,
537 ConvertFontScaleValue(value.fontSize.value()), frameNode);
538 } else {
539 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
540 TimePickerLayoutProperty, SelectedFontSize,
541 ConvertFontScaleValue(selectedStyle.GetFontSize()), frameNode);
542 }
543 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
544 TimePickerLayoutProperty, SelectedColor,
545 value.textColor.value_or(selectedStyle.GetTextColor()), frameNode);
546 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
547 TimePickerLayoutProperty, SelectedWeight,
548 value.fontWeight.value_or(selectedStyle.GetFontWeight()), frameNode);
549 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
550 TimePickerLayoutProperty, SelectedFontFamily,
551 value.fontFamily.value_or(selectedStyle.GetFontFamilies()), frameNode);
552 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
553 TimePickerLayoutProperty, SelectedFontStyle, value.fontStyle.value_or(selectedStyle.GetFontStyle()), frameNode);
554 }
555
SetDefaultAttributes(RefPtr<FrameNode> & frameNode,const RefPtr<PickerTheme> & pickerTheme)556 void TimePickerModelNG::SetDefaultAttributes(RefPtr<FrameNode>& frameNode, const RefPtr<PickerTheme>& pickerTheme)
557 {
558 auto selectedStyle = pickerTheme->GetOptionStyle(true, false);
559 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, SelectedFontSize,
560 ConvertFontScaleValue(selectedStyle.GetFontSize()), frameNode);
561 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, SelectedColor, selectedStyle.GetTextColor(), frameNode);
562 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, SelectedWeight, selectedStyle.GetFontWeight(), frameNode);
563 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
564 TimePickerLayoutProperty, SelectedFontFamily, selectedStyle.GetFontFamilies(), frameNode);
565 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
566 TimePickerLayoutProperty, SelectedFontStyle, selectedStyle.GetFontStyle(), frameNode);
567
568 auto disappearStyle = pickerTheme->GetDisappearOptionStyle();
569 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
570 TimePickerLayoutProperty, DisappearFontSize,
571 ConvertFontScaleValue(disappearStyle.GetFontSize()), frameNode);
572 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
573 TimePickerLayoutProperty, DisappearColor, disappearStyle.GetTextColor(), frameNode);
574 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
575 TimePickerLayoutProperty, DisappearWeight, disappearStyle.GetFontWeight(), frameNode);
576 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
577 TimePickerLayoutProperty, DisappearFontFamily, disappearStyle.GetFontFamilies(), frameNode);
578 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
579 TimePickerLayoutProperty, DisappearFontStyle, disappearStyle.GetFontStyle(), frameNode);
580
581 auto normalStyle = pickerTheme->GetOptionStyle(false, false);
582 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, FontSize,
583 ConvertFontScaleValue(normalStyle.GetFontSize()), frameNode);
584 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, Color, normalStyle.GetTextColor(), frameNode);
585 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, Weight, normalStyle.GetFontWeight(), frameNode);
586 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, FontFamily, normalStyle.GetFontFamilies(), frameNode);
587 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, FontStyle, normalStyle.GetFontStyle(), frameNode);
588 }
589
SetBackgroundColor(FrameNode * frameNode,const Color & color)590 void TimePickerModelNG::SetBackgroundColor(FrameNode* frameNode, const Color& color)
591 {
592 CHECK_NULL_VOID(frameNode);
593 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
594 CHECK_NULL_VOID(timePickerRowPattern);
595 timePickerRowPattern->SetBackgroundColor(color);
596 }
597
SetIsEnableHapticFeedback(FrameNode * frameNode,bool isEnableHapticFeedback)598 void TimePickerModelNG::SetIsEnableHapticFeedback(FrameNode* frameNode, bool isEnableHapticFeedback)
599 {
600 CHECK_NULL_VOID(frameNode);
601 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
602 CHECK_NULL_VOID(timePickerRowPattern);
603 timePickerRowPattern->SetIsEnableHaptic(isEnableHapticFeedback);
604 }
605
SetHour24(FrameNode * frameNode,bool isUseMilitaryTime)606 void TimePickerModelNG::SetHour24(FrameNode* frameNode, bool isUseMilitaryTime)
607 {
608 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, IsUseMilitaryTime, isUseMilitaryTime, frameNode);
609 CHECK_NULL_VOID(frameNode);
610 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
611 timePickerRowPattern->ClearOptionsHour();
612 timePickerRowPattern->SetHour24(isUseMilitaryTime);
613 }
614
SetDateTimeOptions(FrameNode * frameNode,ZeroPrefixType & hourType,ZeroPrefixType & minuteType,ZeroPrefixType & secondType)615 void TimePickerModelNG::SetDateTimeOptions(FrameNode* frameNode, ZeroPrefixType& hourType,
616 ZeroPrefixType& minuteType, ZeroPrefixType& secondType)
617 {
618 CHECK_NULL_VOID(frameNode);
619 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
620 timePickerRowPattern->SetPrefixHour(hourType);
621 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, PrefixHour, static_cast<int32_t>(hourType), frameNode);
622 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, PrefixMinute,
623 static_cast<int32_t>(minuteType), frameNode);
624 if (timePickerRowPattern->GetHasSecond()) {
625 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, PrefixSecond,
626 static_cast<int32_t>(secondType), frameNode);
627 } else {
628 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TimePickerLayoutProperty, PrefixSecond,
629 static_cast<int32_t>(ZeroPrefixType::OFF), frameNode);
630 }
631 }
632
getDisappearTextStyle(FrameNode * frameNode)633 PickerTextStyle TimePickerModelNG::getDisappearTextStyle(FrameNode* frameNode)
634 {
635 PickerTextStyle pickerTextStyle;
636 CHECK_NULL_RETURN(frameNode, pickerTextStyle);
637 auto context = frameNode->GetContext();
638 CHECK_NULL_RETURN(context, pickerTextStyle);
639 auto theme = context->GetTheme<PickerTheme>();
640 CHECK_NULL_RETURN(theme, pickerTextStyle);
641 auto style = theme->GetDisappearOptionStyle();
642 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
643 TimePickerLayoutProperty, DisappearFontSize, pickerTextStyle.fontSize, frameNode,
644 ConvertFontScaleValue(style.GetFontSize()));
645 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
646 TimePickerLayoutProperty, DisappearColor, pickerTextStyle.textColor, frameNode, style.GetTextColor());
647 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
648 TimePickerLayoutProperty, DisappearWeight, pickerTextStyle.fontWeight, frameNode, style.GetFontWeight());
649 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TimePickerLayoutProperty, DisappearFontFamily,
650 pickerTextStyle.fontFamily, frameNode, style.GetFontFamilies());
651 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TimePickerLayoutProperty, DisappearFontStyle,
652 pickerTextStyle.fontStyle, frameNode, style.GetFontStyle());
653 return pickerTextStyle;
654 }
655
getNormalTextStyle(FrameNode * frameNode)656 PickerTextStyle TimePickerModelNG::getNormalTextStyle(FrameNode* frameNode)
657 {
658 PickerTextStyle pickerTextStyle;
659 CHECK_NULL_RETURN(frameNode, pickerTextStyle);
660 auto context = frameNode->GetContext();
661 CHECK_NULL_RETURN(context, pickerTextStyle);
662 auto theme = context->GetTheme<PickerTheme>();
663 CHECK_NULL_RETURN(theme, pickerTextStyle);
664 auto style = theme->GetOptionStyle(false, false);
665 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
666 TimePickerLayoutProperty, FontSize, pickerTextStyle.fontSize, frameNode,
667 ConvertFontScaleValue(style.GetFontSize()));
668 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
669 TimePickerLayoutProperty, Color, pickerTextStyle.textColor, frameNode, style.GetTextColor());
670 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
671 TimePickerLayoutProperty, Weight, pickerTextStyle.fontWeight, frameNode, style.GetFontWeight());
672 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TimePickerLayoutProperty, FontFamily,
673 pickerTextStyle.fontFamily, frameNode, style.GetFontFamilies());
674 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TimePickerLayoutProperty, FontStyle,
675 pickerTextStyle.fontStyle, frameNode, style.GetFontStyle());
676 return pickerTextStyle;
677 }
678
getSelectedTextStyle(FrameNode * frameNode)679 PickerTextStyle TimePickerModelNG::getSelectedTextStyle(FrameNode* frameNode)
680 {
681 PickerTextStyle pickerTextStyle;
682 CHECK_NULL_RETURN(frameNode, pickerTextStyle);
683 auto context = frameNode->GetContext();
684 CHECK_NULL_RETURN(context, pickerTextStyle);
685 auto theme = context->GetTheme<PickerTheme>();
686 CHECK_NULL_RETURN(theme, pickerTextStyle);
687 auto style = theme->GetOptionStyle(true, false);
688 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
689 TimePickerLayoutProperty, SelectedFontSize, pickerTextStyle.fontSize, frameNode,
690 ConvertFontScaleValue(style.GetFontSize()));
691 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
692 TimePickerLayoutProperty, SelectedColor, pickerTextStyle.textColor, frameNode, style.GetTextColor());
693 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
694 TimePickerLayoutProperty, SelectedWeight, pickerTextStyle.fontWeight, frameNode, style.GetFontWeight());
695 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TimePickerLayoutProperty, SelectedFontFamily,
696 pickerTextStyle.fontFamily, frameNode, style.GetFontFamilies());
697 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TimePickerLayoutProperty, SelectedFontStyle,
698 pickerTextStyle.fontStyle, frameNode, style.GetFontStyle());
699 return pickerTextStyle;
700 }
701
getTimepickerSelected(FrameNode * frameNode)702 PickerTime TimePickerModelNG::getTimepickerSelected(FrameNode* frameNode)
703 {
704 PickerTime pickerTime;
705 CHECK_NULL_RETURN(frameNode, pickerTime);
706 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
707 return timePickerRowPattern->GetSelectedTime();
708 }
709
getTimepickerBackgroundColor(FrameNode * frameNode)710 uint32_t TimePickerModelNG::getTimepickerBackgroundColor(FrameNode* frameNode)
711 {
712 CHECK_NULL_RETURN(frameNode, 0);
713 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
714 CHECK_NULL_RETURN(timePickerRowPattern, 0);
715 return timePickerRowPattern->GetBackgroundColor().GetValue();
716 }
717
getEnableHapticFeedback(FrameNode * frameNode)718 int32_t TimePickerModelNG::getEnableHapticFeedback(FrameNode* frameNode)
719 {
720 CHECK_NULL_RETURN(frameNode, static_cast<uint32_t>(true));
721 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
722 CHECK_NULL_RETURN(timePickerRowPattern, static_cast<uint32_t>(true));
723 return static_cast<uint32_t>(timePickerRowPattern->GetIsEnableHaptic());
724 }
725
getTimepickerUseMilitaryTime(FrameNode * frameNode)726 int32_t TimePickerModelNG::getTimepickerUseMilitaryTime(FrameNode* frameNode)
727 {
728 CHECK_NULL_RETURN(frameNode, 0);
729 return frameNode->GetLayoutProperty<TimePickerLayoutProperty>()->GetIsUseMilitaryTimeValue(false);
730 }
731
ConvertFontScaleValue(const Dimension & fontSizeValue)732 const Dimension TimePickerModelNG::ConvertFontScaleValue(const Dimension& fontSizeValue)
733 {
734 auto pipeline = PipelineContext::GetCurrentContext();
735 CHECK_NULL_RETURN(pipeline, fontSizeValue);
736
737 float fontScaleValue = pipeline->GetFontScale();
738 if (fontScaleValue == 0) {
739 return fontSizeValue;
740 }
741
742 if (GreatOrEqualCustomPrecision(fontScaleValue, PICKER_MAXFONTSCALE)) {
743 if (fontSizeValue.Unit() != DimensionUnit::VP) {
744 return Dimension(fontSizeValue / fontScaleValue);
745 }
746 }
747 return fontSizeValue;
748 }
749
HasUserDefinedOpacity()750 void TimePickerModelNG::HasUserDefinedOpacity()
751 {
752 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
753 CHECK_NULL_VOID(frameNode);
754 auto timePickerRowPattern = frameNode->GetPattern<TimePickerRowPattern>();
755 CHECK_NULL_VOID(timePickerRowPattern);
756 auto renderContext = frameNode->GetRenderContext();
757 CHECK_NULL_VOID(renderContext);
758 timePickerRowPattern->SetUserDefinedOpacity(renderContext->GetOpacityValue(1.0));
759 }
760 } // namespace OHOS::Ace::NG
761