• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #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