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