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 #include "core/interfaces/native/node/node_timepicker_modifier.h"
16
17 #include "bridge/common/utils/utils.h"
18 #include "core/components_ng/pattern/tabs/tabs_model.h"
19 #include "core/interfaces/native/node/node_textpicker_modifier.h"
20 #include "core/pipeline_ng/pipeline_context.h"
21
22 namespace OHOS::Ace::NG {
23 namespace {
24 constexpr uint32_t DEFAULT_BG_COLOR = 0xFF007DFF;
25 const int32_t ERROR_INT_CODE = -1;
26 constexpr int32_t POS_0 = 0;
27 constexpr int32_t POS_1 = 1;
28 constexpr int32_t POS_2 = 2;
29 constexpr int NUM_3 = 3;
30 const char DEFAULT_DELIMITER = '|';
31 const std::vector<OHOS::Ace::FontStyle> FONT_STYLES = { OHOS::Ace::FontStyle::NORMAL, OHOS::Ace::FontStyle::ITALIC };
32 std::string g_strValue;
33
SetTimepickerSelected(ArkUINodeHandle node,ArkUI_Uint32 hour,ArkUI_Uint32 minute)34 void SetTimepickerSelected(ArkUINodeHandle node, ArkUI_Uint32 hour, ArkUI_Uint32 minute)
35 {
36 auto* frameNode = reinterpret_cast<FrameNode*>(node);
37 CHECK_NULL_VOID(frameNode);
38 TimePickerModelNG::SetSelectedTime(frameNode, PickerTime(hour, minute, 0));
39 }
40
ResetTimepickerSelected(ArkUINodeHandle node)41 void ResetTimepickerSelected(ArkUINodeHandle node)
42 {
43 auto* frameNode = reinterpret_cast<FrameNode*>(node);
44 CHECK_NULL_VOID(frameNode);
45 time_t now = time(nullptr);
46 auto currentTm = localtime(&now);
47 CHECK_NULL_VOID(currentTm);
48 PickerTime pickerTime(currentTm->tm_hour, currentTm->tm_min, 0);
49
50 TimePickerModelNG::SetSelectedTime(frameNode, pickerTime);
51 }
52
SetTimepickerStart(ArkUINodeHandle node,ArkUI_Uint32 hour,ArkUI_Uint32 minute)53 void SetTimepickerStart(ArkUINodeHandle node, ArkUI_Uint32 hour, ArkUI_Uint32 minute)
54 {
55 auto* frameNode = reinterpret_cast<FrameNode*>(node);
56 CHECK_NULL_VOID(frameNode);
57 TimePickerModelNG::SetStartTime(frameNode, PickerTime(hour, minute, 0));
58 }
59
ResetTimepickerStart(ArkUINodeHandle node)60 void ResetTimepickerStart(ArkUINodeHandle node)
61 {
62 auto* frameNode = reinterpret_cast<FrameNode*>(node);
63 CHECK_NULL_VOID(frameNode);
64 PickerTime pickerTime(0, 0, 0);
65
66 TimePickerModelNG::SetStartTime(frameNode, pickerTime);
67 }
68
SetTimepickerEnd(ArkUINodeHandle node,ArkUI_Uint32 hour,ArkUI_Uint32 minute)69 void SetTimepickerEnd(ArkUINodeHandle node, ArkUI_Uint32 hour, ArkUI_Uint32 minute)
70 {
71 auto* frameNode = reinterpret_cast<FrameNode*>(node);
72 CHECK_NULL_VOID(frameNode);
73 TimePickerModelNG::SetEndTime(frameNode, PickerTime(hour, minute, 0));
74 }
75
ResetTimepickerEnd(ArkUINodeHandle node)76 void ResetTimepickerEnd(ArkUINodeHandle node)
77 {
78 auto* frameNode = reinterpret_cast<FrameNode*>(node);
79 CHECK_NULL_VOID(frameNode);
80 PickerTime defaultEndTime = PickerTime(23, 59, 59);
81
82 TimePickerModelNG::SetEndTime(frameNode, defaultEndTime);
83 }
84
SetTimepickerBackgroundColor(ArkUINodeHandle node,uint32_t color)85 void SetTimepickerBackgroundColor(ArkUINodeHandle node, uint32_t color)
86 {
87 auto* frameNode = reinterpret_cast<FrameNode*>(node);
88 CHECK_NULL_VOID(frameNode);
89 TimePickerModelNG::SetBackgroundColor(frameNode, Color(color));
90 }
91
ResetTimepickerBackgroundColor(ArkUINodeHandle node)92 void ResetTimepickerBackgroundColor(ArkUINodeHandle node)
93 {
94 auto* frameNode = reinterpret_cast<FrameNode*>(node);
95 CHECK_NULL_VOID(frameNode);
96 TimePickerModelNG::SetBackgroundColor(frameNode, Color(DEFAULT_BG_COLOR));
97 }
98
SetTimepickerTextStyle(ArkUINodeHandle node,uint32_t color,const char * fontInfo,int32_t style)99 void SetTimepickerTextStyle(ArkUINodeHandle node, uint32_t color, const char* fontInfo, int32_t style)
100 {
101 auto* frameNode = reinterpret_cast<FrameNode*>(node);
102 CHECK_NULL_VOID(frameNode);
103 auto pipeline = frameNode->GetContext();
104 CHECK_NULL_VOID(pipeline);
105 auto themeManager = pipeline->GetThemeManager();
106 CHECK_NULL_VOID(themeManager);
107 auto theme = themeManager->GetTheme<PickerTheme>();
108 CHECK_NULL_VOID(theme);
109
110 NG::PickerTextStyle textStyle;
111 std::vector<std::string> res;
112 std::string fontValues = std::string(fontInfo);
113 StringUtils::StringSplitter(fontValues, DEFAULT_DELIMITER, res);
114 if (res.size() != NUM_3) {
115 return;
116 }
117 textStyle.fontSize = StringUtils::StringToCalcDimension(res[POS_0], false, DimensionUnit::FP);
118 if (style >= 0 && style < static_cast<int32_t>(FONT_STYLES.size())) {
119 textStyle.fontStyle = FONT_STYLES[style];
120 } else {
121 textStyle.fontStyle = FONT_STYLES[0];
122 }
123 textStyle.fontFamily = Framework::ConvertStrToFontFamilies(res[POS_2]);
124 textStyle.fontWeight = StringUtils::StringToFontWeight(res[POS_1]);
125 textStyle.textColor = Color(color);
126 TimePickerModelNG::SetNormalTextStyle(frameNode, theme, textStyle);
127 }
128
ResetTimepickerTextStyle(ArkUINodeHandle node)129 void ResetTimepickerTextStyle(ArkUINodeHandle node)
130 {
131 auto* frameNode = reinterpret_cast<FrameNode*>(node);
132 CHECK_NULL_VOID(frameNode);
133
134 NG::PickerTextStyle pickerTextStyle;
135 auto context = frameNode->GetContext();
136 CHECK_NULL_VOID(context);
137 auto themeManager = context->GetThemeManager();
138 CHECK_NULL_VOID(themeManager);
139 auto pickerTheme = themeManager->GetTheme<PickerTheme>();
140 TimePickerModelNG::SetNormalTextStyle(frameNode, pickerTheme, pickerTextStyle);
141 }
142
SetTimepickerSelectedTextStyle(ArkUINodeHandle node,uint32_t color,const char * fontInfo,int32_t style)143 void SetTimepickerSelectedTextStyle(ArkUINodeHandle node, uint32_t color, const char* fontInfo, int32_t style)
144 {
145 auto* frameNode = reinterpret_cast<FrameNode*>(node);
146 CHECK_NULL_VOID(frameNode);
147 auto pipeline = frameNode->GetContext();
148 CHECK_NULL_VOID(pipeline);
149 auto themeManager = pipeline->GetThemeManager();
150 CHECK_NULL_VOID(themeManager);
151 auto theme = themeManager->GetTheme<PickerTheme>();
152 CHECK_NULL_VOID(theme);
153 NG::PickerTextStyle textStyle;
154 std::vector<std::string> res;
155 std::string fontValues = std::string(fontInfo);
156 StringUtils::StringSplitter(fontValues, DEFAULT_DELIMITER, res);
157 if (res.size() != NUM_3) {
158 return;
159 }
160 textStyle.fontSize = StringUtils::StringToCalcDimension(res[POS_0], false, DimensionUnit::FP);
161 if (style >= 0 && style < static_cast<int32_t>(FONT_STYLES.size())) {
162 textStyle.fontStyle = FONT_STYLES[style];
163 } else {
164 textStyle.fontStyle = FONT_STYLES[0];
165 }
166 textStyle.fontFamily = Framework::ConvertStrToFontFamilies(res[POS_2]);
167 textStyle.fontWeight = StringUtils::StringToFontWeight(res[POS_1]);
168 textStyle.textColor = Color(color);
169 TimePickerModelNG::SetSelectedTextStyle(frameNode, theme, textStyle);
170 }
171
ResetTimepickerSelectedTextStyle(ArkUINodeHandle node)172 void ResetTimepickerSelectedTextStyle(ArkUINodeHandle node)
173 {
174 auto* frameNode = reinterpret_cast<FrameNode*>(node);
175 CHECK_NULL_VOID(frameNode);
176
177 NG::PickerTextStyle pickerTextStyle;
178 auto context = frameNode->GetContext();
179 CHECK_NULL_VOID(context);
180 auto themeManager = context->GetThemeManager();
181 CHECK_NULL_VOID(themeManager);
182 auto pickerTheme = themeManager->GetTheme<PickerTheme>();
183 TimePickerModelNG::SetSelectedTextStyle(frameNode, pickerTheme, pickerTextStyle);
184 }
185
SetTimepickerDisappearTextStyle(ArkUINodeHandle node,uint32_t color,const char * fontInfo,int32_t style)186 void SetTimepickerDisappearTextStyle(ArkUINodeHandle node, uint32_t color, const char* fontInfo, int32_t style)
187 {
188 auto* frameNode = reinterpret_cast<FrameNode*>(node);
189 CHECK_NULL_VOID(frameNode);
190 auto pipeline = frameNode->GetContext();
191 CHECK_NULL_VOID(pipeline);
192 auto themeManager = pipeline->GetThemeManager();
193 CHECK_NULL_VOID(themeManager);
194 auto theme = themeManager->GetTheme<PickerTheme>();
195 CHECK_NULL_VOID(theme);
196
197 NG::PickerTextStyle textStyle;
198 std::vector<std::string> res;
199 std::string fontValues = std::string(fontInfo);
200 StringUtils::StringSplitter(fontValues, DEFAULT_DELIMITER, res);
201 if (res.size() != NUM_3) {
202 return;
203 }
204 textStyle.fontSize = StringUtils::StringToCalcDimension(res[POS_0], false, DimensionUnit::FP);
205 if (style >= 0 && style < static_cast<int32_t>(FONT_STYLES.size())) {
206 textStyle.fontStyle = FONT_STYLES[style];
207 } else {
208 textStyle.fontStyle = FONT_STYLES[0];
209 }
210 textStyle.fontFamily = Framework::ConvertStrToFontFamilies(res[POS_2]);
211 textStyle.fontWeight = StringUtils::StringToFontWeight(res[POS_1]);
212 textStyle.textColor = Color(color);
213 TimePickerModelNG::SetDisappearTextStyle(frameNode, theme, textStyle);
214 }
215
ResetTimepickerDisappearTextStyle(ArkUINodeHandle node)216 void ResetTimepickerDisappearTextStyle(ArkUINodeHandle node)
217 {
218 auto* frameNode = reinterpret_cast<FrameNode*>(node);
219 CHECK_NULL_VOID(frameNode);
220
221 NG::PickerTextStyle pickerTextStyle;
222 auto context = frameNode->GetContext();
223 CHECK_NULL_VOID(context);
224 auto themeManager = context->GetThemeManager();
225 CHECK_NULL_VOID(themeManager);
226 auto pickerTheme = themeManager->GetTheme<PickerTheme>();
227
228 TimePickerModelNG::SetDisappearTextStyle(frameNode, pickerTheme, pickerTextStyle);
229 }
230
SetTimepickerUseMilitaryTime(ArkUINodeHandle node,int isUseMilitaryTime)231 void SetTimepickerUseMilitaryTime(ArkUINodeHandle node, int isUseMilitaryTime)
232 {
233 auto* frameNode = reinterpret_cast<FrameNode*>(node);
234 CHECK_NULL_VOID(frameNode);
235 TimePickerModelNG::SetHour24(frameNode, isUseMilitaryTime);
236 }
237
ResetTimepickerUseMilitaryTime(ArkUINodeHandle node)238 void ResetTimepickerUseMilitaryTime(ArkUINodeHandle node)
239 {
240 auto* frameNode = reinterpret_cast<FrameNode*>(node);
241 CHECK_NULL_VOID(frameNode);
242 TimePickerModelNG::SetHour24(frameNode, false);
243 }
244
SetTimepickerLoop(ArkUINodeHandle node,int isLoop)245 void SetTimepickerLoop(ArkUINodeHandle node, int isLoop)
246 {
247 auto* frameNode = reinterpret_cast<FrameNode*>(node);
248 CHECK_NULL_VOID(frameNode);
249 TimePickerModelNG::SetWheelModeEnabled(frameNode, isLoop);
250 }
251
ResetTimepickerLoop(ArkUINodeHandle node)252 void ResetTimepickerLoop(ArkUINodeHandle node)
253 {
254 auto* frameNode = reinterpret_cast<FrameNode*>(node);
255 CHECK_NULL_VOID(frameNode);
256 TimePickerModelNG::SetWheelModeEnabled(frameNode, true);
257 }
258
SetTimepickerDateTimeOptions(ArkUINodeHandle node,ArkUI_Int32 hourType,ArkUI_Int32 minuteType,ArkUI_Int32 secondType)259 void SetTimepickerDateTimeOptions(
260 ArkUINodeHandle node, ArkUI_Int32 hourType, ArkUI_Int32 minuteType, ArkUI_Int32 secondType)
261 {
262 auto* frameNode = reinterpret_cast<FrameNode*>(node);
263 CHECK_NULL_VOID(frameNode);
264 ZeroPrefixType hour = static_cast<ZeroPrefixType>(hourType);
265 ZeroPrefixType minute = static_cast<ZeroPrefixType>(minuteType);
266 ZeroPrefixType second = static_cast<ZeroPrefixType>(secondType);
267 TimePickerModelNG::SetDateTimeOptions(frameNode, hour, minute, second);
268 }
269
ResetTimepickerDateTimeOptions(ArkUINodeHandle node)270 void ResetTimepickerDateTimeOptions(ArkUINodeHandle node)
271 {
272 auto* frameNode = reinterpret_cast<FrameNode*>(node);
273 CHECK_NULL_VOID(frameNode);
274 ZeroPrefixType hourType = ZeroPrefixType::AUTO;
275 ZeroPrefixType minuteType = ZeroPrefixType::AUTO;
276 ZeroPrefixType secondType = ZeroPrefixType::AUTO;
277 TimePickerModelNG::SetDateTimeOptions(frameNode, hourType, minuteType, secondType);
278 }
279
SetTimepickerEnableHapticFeedback(ArkUINodeHandle node,int enableHapticFeedback)280 void SetTimepickerEnableHapticFeedback(ArkUINodeHandle node, int enableHapticFeedback)
281 {
282 auto* frameNode = reinterpret_cast<FrameNode*>(node);
283 CHECK_NULL_VOID(frameNode);
284 TimePickerModelNG::SetIsEnableHapticFeedback(frameNode, enableHapticFeedback);
285 }
286
ResetTimepickerEnableHapticFeedback(ArkUINodeHandle node)287 void ResetTimepickerEnableHapticFeedback(ArkUINodeHandle node)
288 {
289 auto* frameNode = reinterpret_cast<FrameNode*>(node);
290 CHECK_NULL_VOID(frameNode);
291 TimePickerModelNG::SetIsEnableHapticFeedback(frameNode, true);
292 }
293
GetTimepickerSelectedTextStyle(ArkUINodeHandle node)294 ArkUI_CharPtr GetTimepickerSelectedTextStyle(ArkUINodeHandle node)
295 {
296 auto* frameNode = reinterpret_cast<FrameNode*>(node);
297 CHECK_NULL_RETURN(frameNode, "");
298 PickerTextStyle pickerTextStyle = TimePickerModelNG::getSelectedTextStyle(frameNode);
299 std::vector<std::string> fontFamilies = pickerTextStyle.fontFamily.value_or(std::vector<std::string>());
300 std::string families;
301 if (fontFamilies.size() == 0) {
302 fontFamilies.emplace_back("HarmonyOS Sans");
303 }
304 //set index start
305 int index = 0;
306 for (auto& family : fontFamilies) {
307 families += family;
308 if (index != static_cast<int>(fontFamilies.size()) - 1) {
309 families += ",";
310 }
311 index++;
312 }
313 g_strValue = pickerTextStyle.textColor->ColorToString() + ";";
314 g_strValue = g_strValue + std::to_string(static_cast<int>(pickerTextStyle.fontSize->ConvertToFp())) + ";";
315 g_strValue = g_strValue + StringUtils::ToString(pickerTextStyle.fontWeight.value_or(FontWeight::W100)) + ";";
316 g_strValue = g_strValue + families + ";";
317 g_strValue =
318 g_strValue + StringUtils::ToStringNDK(pickerTextStyle.fontStyle.value_or(OHOS::Ace::FontStyle::NORMAL));
319 return g_strValue.c_str();
320 }
321
GetTimepickerTextStyle(ArkUINodeHandle node)322 ArkUI_CharPtr GetTimepickerTextStyle(ArkUINodeHandle node)
323 {
324 auto* frameNode = reinterpret_cast<FrameNode*>(node);
325 CHECK_NULL_RETURN(frameNode, "");
326 PickerTextStyle pickerTextStyle = TimePickerModelNG::getNormalTextStyle(frameNode);
327 std::vector<std::string> fontFamilies = pickerTextStyle.fontFamily.value_or(std::vector<std::string>());
328 std::string families;
329 if (fontFamilies.size() == 0) {
330 fontFamilies.emplace_back("HarmonyOS Sans");
331 }
332 //set index start
333 int index = 0;
334 for (auto& family : fontFamilies) {
335 families += family;
336 if (index != static_cast<int>(fontFamilies.size()) - 1) {
337 families += ",";
338 }
339 index++;
340 }
341 g_strValue = pickerTextStyle.textColor->ColorToString() + ";";
342 g_strValue = g_strValue + std::to_string(static_cast<int>(pickerTextStyle.fontSize->ConvertToFp())) + ";";
343 g_strValue = g_strValue + StringUtils::ToString(pickerTextStyle.fontWeight.value_or(FontWeight::W100)) + ";";
344 g_strValue = g_strValue + families + ";";
345 g_strValue =
346 g_strValue + StringUtils::ToStringNDK(pickerTextStyle.fontStyle.value_or(OHOS::Ace::FontStyle::NORMAL));
347 return g_strValue.c_str();
348 }
349
GetTimepickerDisappearTextStyle(ArkUINodeHandle node)350 ArkUI_CharPtr GetTimepickerDisappearTextStyle(ArkUINodeHandle node)
351 {
352 auto* frameNode = reinterpret_cast<FrameNode*>(node);
353 CHECK_NULL_RETURN(frameNode, "");
354 PickerTextStyle pickerTextStyle = TimePickerModelNG::getDisappearTextStyle(frameNode);
355 std::vector<std::string> fontFamilies = pickerTextStyle.fontFamily.value_or(std::vector<std::string>());
356 std::string families;
357 if (fontFamilies.size() == 0) {
358 fontFamilies.emplace_back("HarmonyOS Sans");
359 }
360 //set index start
361 int index = 0;
362 for (auto& family : fontFamilies) {
363 families += family;
364 if (index != static_cast<int>(fontFamilies.size()) - 1) {
365 families += ",";
366 }
367 index++;
368 }
369 g_strValue = pickerTextStyle.textColor->ColorToString() + ";";
370 g_strValue = g_strValue + std::to_string(static_cast<int>(pickerTextStyle.fontSize->ConvertToFp())) + ";";
371 g_strValue = g_strValue + StringUtils::ToString(pickerTextStyle.fontWeight.value_or(FontWeight::W100)) + ";";
372 g_strValue = g_strValue + families + ";";
373 g_strValue =
374 g_strValue + StringUtils::ToStringNDK(pickerTextStyle.fontStyle.value_or(OHOS::Ace::FontStyle::NORMAL));
375 return g_strValue.c_str();
376 }
377
GetTimepickerSelected(ArkUINodeHandle node)378 ArkUI_CharPtr GetTimepickerSelected(ArkUINodeHandle node)
379 {
380 auto* frameNode = reinterpret_cast<FrameNode*>(node);
381 CHECK_NULL_RETURN(frameNode, "");
382 PickerTime pickerTime = TimePickerModelNG::getTimepickerSelected(frameNode);
383 g_strValue = std::to_string(static_cast<uint32_t>(pickerTime.GetHour())) + ",";
384 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(pickerTime.GetMinute())) + ",";
385 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(pickerTime.GetSecond()));
386 return g_strValue.c_str();
387 }
388
GetTimepickerStart(ArkUINodeHandle node)389 ArkUI_CharPtr GetTimepickerStart(ArkUINodeHandle node)
390 {
391 auto* frameNode = reinterpret_cast<FrameNode*>(node);
392 CHECK_NULL_RETURN(frameNode, "");
393 PickerTime pickerTime = TimePickerModelNG::getTimepickerStart(frameNode);
394 g_strValue = std::to_string(static_cast<uint32_t>(pickerTime.GetHour())) + ":";
395 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(pickerTime.GetMinute())) + ":";
396 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(pickerTime.GetSecond()));
397 return g_strValue.c_str();
398 }
399
GetTimepickerEnd(ArkUINodeHandle node)400 ArkUI_CharPtr GetTimepickerEnd(ArkUINodeHandle node)
401 {
402 auto* frameNode = reinterpret_cast<FrameNode*>(node);
403 CHECK_NULL_RETURN(frameNode, "");
404 PickerTime pickerTime = TimePickerModelNG::getTimepickerEnd(frameNode);
405 g_strValue = std::to_string(static_cast<uint32_t>(pickerTime.GetHour())) + ":";
406 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(pickerTime.GetMinute())) + ":";
407 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(pickerTime.GetSecond()));
408 return g_strValue.c_str();
409 }
410
GetTimepickerBackgroundColor(ArkUINodeHandle node)411 ArkUI_Uint32 GetTimepickerBackgroundColor(ArkUINodeHandle node)
412 {
413 auto* frameNode = reinterpret_cast<FrameNode*>(node);
414 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
415 return TimePickerModelNG::getTimepickerBackgroundColor(frameNode);
416 }
417
GetTimepickerUseMilitaryTime(ArkUINodeHandle node)418 ArkUI_Int32 GetTimepickerUseMilitaryTime(ArkUINodeHandle node)
419 {
420 auto* frameNode = reinterpret_cast<FrameNode*>(node);
421 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
422 return TimePickerModelNG::getTimepickerUseMilitaryTime(frameNode);
423 }
424
SetTimepickerEnableCascade(ArkUINodeHandle node,int isEnableCascade)425 void SetTimepickerEnableCascade(ArkUINodeHandle node, int isEnableCascade)
426 {
427 auto* frameNode = reinterpret_cast<FrameNode*>(node);
428 CHECK_NULL_VOID(frameNode);
429 TimePickerModelNG::SetEnableCascade(frameNode, isEnableCascade);
430 }
431
ResetTimepickerEnableCascade(ArkUINodeHandle node)432 void ResetTimepickerEnableCascade(ArkUINodeHandle node)
433 {
434 auto* frameNode = reinterpret_cast<FrameNode*>(node);
435 CHECK_NULL_VOID(frameNode);
436 TimePickerModelNG::SetEnableCascade(frameNode, false);
437 }
438
GetTimepickerEnableCascade(ArkUINodeHandle node)439 ArkUI_Int32 GetTimepickerEnableCascade(ArkUINodeHandle node)
440 {
441 auto* frameNode = reinterpret_cast<FrameNode*>(node);
442 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
443 return TimePickerModelNG::getTimepickerEnableCascade(frameNode);
444 }
445
SetTimePickerDigitalCrownSensitivity(ArkUINodeHandle node,int32_t CrownSensitivity)446 void SetTimePickerDigitalCrownSensitivity(ArkUINodeHandle node, int32_t CrownSensitivity)
447 {
448 auto* frameNode = reinterpret_cast<FrameNode*>(node);
449 CHECK_NULL_VOID(frameNode);
450 TimePickerModelNG::SetDigitalCrownSensitivity(frameNode, CrownSensitivity);
451 }
452
ResetTimePickerDigitalCrownSensitivity(ArkUINodeHandle node)453 void ResetTimePickerDigitalCrownSensitivity(ArkUINodeHandle node)
454 {
455 auto* frameNode = reinterpret_cast<FrameNode*>(node);
456 CHECK_NULL_VOID(frameNode);
457 TimePickerModelNG::SetDigitalCrownSensitivity(frameNode, DEFAULT_CROWNSENSITIVITY);
458 }
459
SetTimepickerOnChangeExt(ArkUINodeHandle node,void * callback)460 void SetTimepickerOnChangeExt(ArkUINodeHandle node, void* callback)
461 {
462 auto* frameNode = reinterpret_cast<FrameNode*>(node);
463 CHECK_NULL_VOID(frameNode);
464 auto onChange = reinterpret_cast<std::function<void(const BaseEventInfo*)>*>(callback);
465 TimePickerModelNG::SetOnChange(frameNode, std::move(*onChange));
466 }
467
ResetTimepickerOnChange(ArkUINodeHandle node)468 void ResetTimepickerOnChange(ArkUINodeHandle node)
469 {
470 auto* frameNode = reinterpret_cast<FrameNode*>(node);
471 CHECK_NULL_VOID(frameNode);
472 TimePickerModelNG::SetOnChange(frameNode, nullptr);
473 }
474 } // namespace
475
476 namespace NodeModifier {
GetTimepickerModifier()477 const ArkUITimepickerModifier* GetTimepickerModifier()
478 {
479 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
480 static const ArkUITimepickerModifier modifier = {
481 .getTimepickerSelected = GetTimepickerSelected,
482 .setTimepickerSelected = SetTimepickerSelected,
483 .resetTimepickerSelected = ResetTimepickerSelected,
484 .getTimepickerStart = GetTimepickerStart,
485 .setTimepickerStart = SetTimepickerStart,
486 .resetTimepickerStart = ResetTimepickerStart,
487 .getTimepickerEnd = GetTimepickerEnd,
488 .setTimepickerEnd = SetTimepickerEnd,
489 .resetTimepickerEnd = ResetTimepickerEnd,
490 .getTimepickerBackgroundColor = GetTimepickerBackgroundColor,
491 .setTimepickerBackgroundColor = SetTimepickerBackgroundColor,
492 .getTimepickerDisappearTextStyle = GetTimepickerDisappearTextStyle,
493 .setTimepickerDisappearTextStyle = SetTimepickerDisappearTextStyle,
494 .getTimepickerTextStyle = GetTimepickerTextStyle,
495 .setTimepickerTextStyle = SetTimepickerTextStyle,
496 .getTimepickerSelectedTextStyle = GetTimepickerSelectedTextStyle,
497 .setTimepickerSelectedTextStyle = SetTimepickerSelectedTextStyle,
498 .resetTimepickerDisappearTextStyle = ResetTimepickerDisappearTextStyle,
499 .resetTimepickerTextStyle = ResetTimepickerTextStyle,
500 .resetTimepickerSelectedTextStyle = ResetTimepickerSelectedTextStyle,
501 .resetTimepickerBackgroundColor = ResetTimepickerBackgroundColor,
502 .getTimepickerUseMilitaryTime = GetTimepickerUseMilitaryTime,
503 .setTimepickerUseMilitaryTime = SetTimepickerUseMilitaryTime,
504 .resetTimepickerUseMilitaryTime = ResetTimepickerUseMilitaryTime,
505 .setTimepickerLoop = SetTimepickerLoop,
506 .resetTimepickerLoop = ResetTimepickerLoop,
507 .setTimepickerDateTimeOptions = SetTimepickerDateTimeOptions,
508 .resetTimepickerDateTimeOptions = ResetTimepickerDateTimeOptions,
509 .setTimepickerEnableHapticFeedback = SetTimepickerEnableHapticFeedback,
510 .resetTimepickerEnableHapticFeedback = ResetTimepickerEnableHapticFeedback,
511 .getTimepickerEnableCascade = GetTimepickerEnableCascade,
512 .setTimepickerEnableCascade = SetTimepickerEnableCascade,
513 .resetTimepickerEnableCascade = ResetTimepickerEnableCascade,
514 .setTimePickerDigitalCrownSensitivity = SetTimePickerDigitalCrownSensitivity,
515 .resetTimePickerDigitalCrownSensitivity = ResetTimePickerDigitalCrownSensitivity,
516 .setTimepickerOnChange = SetTimepickerOnChangeExt,
517 .resetTimepickerOnChange = ResetTimepickerOnChange,
518 };
519 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
520
521 return &modifier;
522 }
523
GetCJUITimepickerModifier()524 const CJUITimepickerModifier* GetCJUITimepickerModifier()
525 {
526 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
527 static const CJUITimepickerModifier modifier = {
528 .getTimepickerSelected = GetTimepickerSelected,
529 .setTimepickerSelected = SetTimepickerSelected,
530 .resetTimepickerSelected = ResetTimepickerSelected,
531 .getTimepickerStart = GetTimepickerStart,
532 .setTimepickerStart = SetTimepickerStart,
533 .resetTimepickerStart = ResetTimepickerStart,
534 .getTimepickerEnd = GetTimepickerEnd,
535 .setTimepickerEnd = SetTimepickerEnd,
536 .resetTimepickerEnd = ResetTimepickerEnd,
537 .getTimepickerBackgroundColor = GetTimepickerBackgroundColor,
538 .setTimepickerBackgroundColor = SetTimepickerBackgroundColor,
539 .getTimepickerDisappearTextStyle = GetTimepickerDisappearTextStyle,
540 .setTimepickerDisappearTextStyle = SetTimepickerDisappearTextStyle,
541 .getTimepickerTextStyle = GetTimepickerTextStyle,
542 .setTimepickerTextStyle = SetTimepickerTextStyle,
543 .getTimepickerSelectedTextStyle = GetTimepickerSelectedTextStyle,
544 .setTimepickerSelectedTextStyle = SetTimepickerSelectedTextStyle,
545 .resetTimepickerDisappearTextStyle = ResetTimepickerDisappearTextStyle,
546 .resetTimepickerTextStyle = ResetTimepickerTextStyle,
547 .resetTimepickerSelectedTextStyle = ResetTimepickerSelectedTextStyle,
548 .resetTimepickerBackgroundColor = ResetTimepickerBackgroundColor,
549 .getTimepickerUseMilitaryTime = GetTimepickerUseMilitaryTime,
550 .setTimepickerUseMilitaryTime = SetTimepickerUseMilitaryTime,
551 .resetTimepickerUseMilitaryTime = ResetTimepickerUseMilitaryTime,
552 .setTimepickerLoop = SetTimepickerLoop,
553 .resetTimepickerLoop = ResetTimepickerLoop,
554 .setTimepickerDateTimeOptions = SetTimepickerDateTimeOptions,
555 .resetTimepickerDateTimeOptions = ResetTimepickerDateTimeOptions,
556 };
557 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
558
559 return &modifier;
560 }
561
SetTimePickerOnChange(ArkUINodeHandle node,void * extraParam)562 void SetTimePickerOnChange(ArkUINodeHandle node, void* extraParam)
563 {
564 auto* frameNode = reinterpret_cast<FrameNode*>(node);
565 CHECK_NULL_VOID(frameNode);
566 auto onChange = [extraParam](const BaseEventInfo* info) {
567 ArkUINodeEvent event;
568 event.kind = COMPONENT_ASYNC_EVENT;
569 event.componentAsyncEvent.subKind = ON_TIME_PICKER_CHANGE;
570 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
571 const auto* eventInfo = TypeInfoHelper::DynamicCast<DatePickerChangeEvent>(info);
572 std::unique_ptr<JsonValue> argsPtr = JsonUtil::ParseJsonString(eventInfo->GetSelectedStr());
573 if (!argsPtr) {
574 event.componentAsyncEvent.data[0].i32 = 0;
575 event.componentAsyncEvent.data[1].i32 = 0;
576 } else {
577 auto hour = argsPtr->GetValue("hour");
578 auto minute = argsPtr->GetValue("minute");
579 if (hour && hour->IsNumber()) {
580 event.componentAsyncEvent.data[0].i32 = hour->GetInt();
581 }
582 if (minute && minute->IsNumber()) {
583 event.componentAsyncEvent.data[1].i32 = minute->GetInt();
584 }
585 }
586 SendArkUISyncEvent(&event);
587 };
588 TimePickerModelNG::SetOnChange(frameNode, std::move(onChange));
589 }
590 } // namespace NodeModifier
591 } // namespace OHOS::Ace::NG
592