• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "core/interfaces/native/node/node_date_picker_modifier.h"
17 
18 #include "bridge/common/utils/utils.h"
19 #include "core/components_ng/pattern/picker/datepicker_model_ng.h"
20 #include "core/pipeline_ng/pipeline_context.h"
21 
22 namespace OHOS::Ace::NG {
23 namespace {
24 constexpr int32_t POS_0 = 0;
25 constexpr int32_t POS_1 = 1;
26 constexpr int32_t POS_2 = 2;
27 constexpr int YEAR_1900 = 1900;
28 constexpr int YEAR_1970 = 1970;
29 const char DEFAULT_DELIMITER = '|';
30 const int32_t ERROR_INT_CODE = -1;
31 std::string g_strValue;
32 const std::vector<OHOS::Ace::FontStyle> FONT_STYLES = { OHOS::Ace::FontStyle::NORMAL, OHOS::Ace::FontStyle::ITALIC };
33 
GetSelectedTextStyle(ArkUINodeHandle node)34 ArkUI_CharPtr GetSelectedTextStyle(ArkUINodeHandle node)
35 {
36     auto* frameNode = reinterpret_cast<FrameNode*>(node);
37     CHECK_NULL_RETURN(frameNode, "");
38     PickerTextStyle pickerTextStyle = DatePickerModelNG::getSelectedTextStyle(frameNode);
39     std::vector<std::string> fontFamilies = pickerTextStyle.fontFamily.value_or(std::vector<std::string>());
40     if (fontFamilies.size() == 0) {
41         fontFamilies.emplace_back("HarmonyOS Sans");
42     }
43     std::string families;
44     //set index start
45     int index = 0;
46     for (auto& family : fontFamilies) {
47         families += family;
48         if (index != static_cast<int>(fontFamilies.size()) - 1) {
49             families += ",";
50         }
51         index++;
52     }
53     g_strValue = pickerTextStyle.textColor->ColorToString() + ";";
54     g_strValue = g_strValue + std::to_string(static_cast<int>(pickerTextStyle.fontSize->ConvertToFp())) + ";";
55     g_strValue =
56         g_strValue + StringUtils::ToString(pickerTextStyle.fontWeight.value_or(FontWeight::W100)) + ";";
57     g_strValue = g_strValue + families + ";";
58     g_strValue = g_strValue + StringUtils::ToStringNDK(pickerTextStyle.fontStyle.value_or(FontStyle::NORMAL));
59     return g_strValue.c_str();
60 }
61 
SetSelectedTextStyle(ArkUINodeHandle node,const char * fontInfo,uint32_t color,int32_t style)62 void SetSelectedTextStyle(ArkUINodeHandle node, const char* fontInfo, uint32_t color, int32_t style)
63 {
64     auto* frameNode = reinterpret_cast<FrameNode*>(node);
65     CHECK_NULL_VOID(frameNode);
66     auto pipeline = frameNode->GetContext();
67     CHECK_NULL_VOID(pipeline);
68     auto themeManager = pipeline->GetThemeManager();
69     CHECK_NULL_VOID(themeManager);
70     auto theme = themeManager->GetTheme<PickerTheme>();
71     CHECK_NULL_VOID(theme);
72 
73     NG::PickerTextStyle textStyle;
74     std::vector<std::string> res;
75     std::string fontValues = std::string(fontInfo);
76     StringUtils::StringSplitter(fontValues, DEFAULT_DELIMITER, res);
77     textStyle.fontSize = StringUtils::StringToCalcDimension(res[POS_0], false, DimensionUnit::FP);
78     if (style >= 0 && style < static_cast<int32_t>(FONT_STYLES.size())) {
79         textStyle.fontStyle = FONT_STYLES[style];
80     } else {
81         textStyle.fontStyle = FONT_STYLES[0];
82     }
83     textStyle.fontFamily = Framework::ConvertStrToFontFamilies(res[POS_2]);
84     textStyle.fontWeight = StringUtils::StringToFontWeight(res[POS_1]);
85     textStyle.textColor = Color(color);
86     DatePickerModelNG::SetSelectedTextStyle(frameNode, theme, textStyle);
87 }
88 
ResetSelectedTextStyle(ArkUINodeHandle node)89 void ResetSelectedTextStyle(ArkUINodeHandle node)
90 {
91     auto* frameNode = reinterpret_cast<FrameNode*>(node);
92     CHECK_NULL_VOID(frameNode);
93     auto pipeline = frameNode->GetContext();
94     CHECK_NULL_VOID(pipeline);
95     auto themeManager = pipeline->GetThemeManager();
96     CHECK_NULL_VOID(themeManager);
97     auto theme = themeManager->GetTheme<PickerTheme>();
98     CHECK_NULL_VOID(theme);
99 
100     NG::PickerTextStyle textStyle;
101     auto selectedStyle = theme->GetOptionStyle(true, false);
102     textStyle.textColor = selectedStyle.GetTextColor();
103     textStyle.fontSize = selectedStyle.GetFontSize();
104     textStyle.fontWeight = selectedStyle.GetFontWeight();
105     DatePickerModelNG::SetSelectedTextStyle(frameNode, theme, textStyle);
106 }
107 
GetDatePickerTextStyle(ArkUINodeHandle node)108 ArkUI_CharPtr GetDatePickerTextStyle(ArkUINodeHandle node)
109 {
110     auto* frameNode = reinterpret_cast<FrameNode*>(node);
111     CHECK_NULL_RETURN(frameNode, "");
112     PickerTextStyle pickerTextStyle = DatePickerModelNG::getNormalTextStyle(frameNode);
113     std::vector<std::string> fontFamilies = pickerTextStyle.fontFamily.value_or(std::vector<std::string>());
114     std::string families;
115     if (fontFamilies.size() == 0) {
116         fontFamilies.emplace_back("HarmonyOS Sans");
117     }
118     //set index start
119     int index = 0;
120     for (auto& family : fontFamilies) {
121         families += family;
122         if (index != static_cast<int>(fontFamilies.size()) - 1) {
123             families += ",";
124         }
125         index++;
126     }
127     g_strValue = pickerTextStyle.textColor->ColorToString() + ";";
128     g_strValue = g_strValue + std::to_string(static_cast<int>(pickerTextStyle.fontSize->ConvertToFp())) + ";";
129     g_strValue =
130         g_strValue + StringUtils::ToString(pickerTextStyle.fontWeight.value_or(FontWeight::W100)) + ";";
131     g_strValue = g_strValue + families + ";";
132     g_strValue = g_strValue + StringUtils::ToStringNDK(pickerTextStyle.fontStyle.value_or(FontStyle::NORMAL));
133     return g_strValue.c_str();
134 }
135 
SetDatePickerTextStyle(ArkUINodeHandle node,const char * fontInfo,uint32_t color,int32_t style)136 void SetDatePickerTextStyle(ArkUINodeHandle node, const char* fontInfo, uint32_t color, int32_t style)
137 {
138     auto* frameNode = reinterpret_cast<FrameNode*>(node);
139     CHECK_NULL_VOID(frameNode);
140     auto pipeline = frameNode->GetContext();
141     CHECK_NULL_VOID(pipeline);
142     auto themeManager = pipeline->GetThemeManager();
143     CHECK_NULL_VOID(themeManager);
144     auto theme = themeManager->GetTheme<PickerTheme>();
145     CHECK_NULL_VOID(theme);
146 
147     NG::PickerTextStyle textStyle;
148     std::vector<std::string> res;
149     std::string fontValues = std::string(fontInfo);
150     StringUtils::StringSplitter(fontValues, DEFAULT_DELIMITER, res);
151 
152     textStyle.fontSize = StringUtils::StringToCalcDimension(res[POS_0], false, DimensionUnit::FP);
153     if (style >= 0 && style < static_cast<int32_t>(FONT_STYLES.size())) {
154         textStyle.fontStyle = FONT_STYLES[style];
155     } else {
156         textStyle.fontStyle = FONT_STYLES[0];
157     }
158     textStyle.fontFamily = Framework::ConvertStrToFontFamilies(res[POS_2]);
159     textStyle.fontWeight = StringUtils::StringToFontWeight(res[POS_1]);
160     textStyle.textColor = Color(color);
161     DatePickerModelNG::SetNormalTextStyle(frameNode, theme, textStyle);
162 }
163 
ResetDatePickerTextStyle(ArkUINodeHandle node)164 void ResetDatePickerTextStyle(ArkUINodeHandle node)
165 {
166     auto* frameNode = reinterpret_cast<FrameNode*>(node);
167     CHECK_NULL_VOID(frameNode);
168     auto pipeline = frameNode->GetContext();
169     CHECK_NULL_VOID(pipeline);
170     auto themeManager = pipeline->GetThemeManager();
171     CHECK_NULL_VOID(themeManager);
172     auto theme = themeManager->GetTheme<PickerTheme>();
173     CHECK_NULL_VOID(theme);
174 
175     NG::PickerTextStyle textStyle;
176     auto normalStyle = theme->GetOptionStyle(false, false);
177     textStyle.textColor = normalStyle.GetTextColor();
178     textStyle.fontSize = normalStyle.GetFontSize();
179     textStyle.fontWeight = normalStyle.GetFontWeight();
180     DatePickerModelNG::SetNormalTextStyle(frameNode, theme, textStyle);
181 }
182 
GetDisappearTextStyle(ArkUINodeHandle node)183 ArkUI_CharPtr GetDisappearTextStyle(ArkUINodeHandle node)
184 {
185     auto* frameNode = reinterpret_cast<FrameNode*>(node);
186     CHECK_NULL_RETURN(frameNode, "");
187     PickerTextStyle pickerTextStyle = DatePickerModelNG::getDisappearTextStyle(frameNode);
188     std::vector<std::string> fontFamilies = pickerTextStyle.fontFamily.value_or(std::vector<std::string>());
189     std::string families;
190     if (fontFamilies.size() == 0) {
191         fontFamilies.emplace_back("HarmonyOS Sans");
192     }
193     //set index start
194     int index = 0;
195     for (auto& family : fontFamilies) {
196         families += family;
197         if (index != static_cast<int>(fontFamilies.size()) - 1) {
198             families += ",";
199         }
200         index++;
201     }
202     g_strValue = pickerTextStyle.textColor->ColorToString() + ";";
203     g_strValue = g_strValue + std::to_string(static_cast<int>(pickerTextStyle.fontSize->ConvertToFp())) + ";";
204     g_strValue =
205         g_strValue + StringUtils::ToString(pickerTextStyle.fontWeight.value_or(FontWeight::W100)) + ";";
206     g_strValue = g_strValue + families + ";";
207     g_strValue = g_strValue + StringUtils::ToStringNDK(pickerTextStyle.fontStyle.value_or(FontStyle::NORMAL));
208     return g_strValue.c_str();
209 }
210 
SetDisappearTextStyle(ArkUINodeHandle node,const char * fontInfo,uint32_t color,int32_t style)211 void SetDisappearTextStyle(ArkUINodeHandle node, const char* fontInfo, uint32_t color, int32_t style)
212 {
213     auto* frameNode = reinterpret_cast<FrameNode*>(node);
214     CHECK_NULL_VOID(frameNode);
215     auto pipeline = frameNode->GetContext();
216     CHECK_NULL_VOID(pipeline);
217     auto themeManager = pipeline->GetThemeManager();
218     CHECK_NULL_VOID(themeManager);
219     auto theme = themeManager->GetTheme<PickerTheme>();
220     CHECK_NULL_VOID(theme);
221 
222     NG::PickerTextStyle textStyle;
223     std::vector<std::string> res;
224     std::string fontValues = std::string(fontInfo);
225     StringUtils::StringSplitter(fontValues, DEFAULT_DELIMITER, res);
226 
227     textStyle.fontSize = StringUtils::StringToCalcDimension(res[POS_0], false, DimensionUnit::FP);
228     if (style >= 0 && style < static_cast<int32_t>(FONT_STYLES.size())) {
229         textStyle.fontStyle = FONT_STYLES[style];
230     } else {
231         textStyle.fontStyle = FONT_STYLES[0];
232     }
233     textStyle.fontFamily = Framework::ConvertStrToFontFamilies(res[POS_2]);
234     textStyle.fontWeight = StringUtils::StringToFontWeight(res[POS_1]);
235     textStyle.textColor = Color(color);
236     DatePickerModelNG::SetDisappearTextStyle(frameNode, theme, textStyle);
237 }
238 
ResetDisappearTextStyle(ArkUINodeHandle node)239 void ResetDisappearTextStyle(ArkUINodeHandle node)
240 {
241     auto* frameNode = reinterpret_cast<FrameNode*>(node);
242     CHECK_NULL_VOID(frameNode);
243     auto pipeline = frameNode->GetContext();
244     CHECK_NULL_VOID(pipeline);
245     auto themeManager = pipeline->GetThemeManager();
246     CHECK_NULL_VOID(themeManager);
247     auto theme = themeManager->GetTheme<PickerTheme>();
248     CHECK_NULL_VOID(theme);
249 
250     NG::PickerTextStyle textStyle;
251     auto disappearStyle = theme->GetDisappearOptionStyle();
252     textStyle.textColor = disappearStyle.GetTextColor();
253     textStyle.fontSize = disappearStyle.GetFontSize();
254     textStyle.fontWeight = disappearStyle.GetFontWeight();
255     DatePickerModelNG::SetDisappearTextStyle(frameNode, theme, textStyle);
256 }
257 
GetLunar(ArkUINodeHandle node)258 ArkUI_Int32 GetLunar(ArkUINodeHandle node)
259 {
260     auto* frameNode = reinterpret_cast<FrameNode*>(node);
261     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
262     return DatePickerModelNG::getLunar(frameNode);
263 }
264 
SetLunar(ArkUINodeHandle node,int lunar)265 void SetLunar(ArkUINodeHandle node, int lunar)
266 {
267     auto* frameNode = reinterpret_cast<FrameNode*>(node);
268     CHECK_NULL_VOID(frameNode);
269     DatePickerModelNG::SetShowLunar(frameNode, lunar);
270 }
271 
ResetLunar(ArkUINodeHandle node)272 void ResetLunar(ArkUINodeHandle node)
273 {
274     auto* frameNode = reinterpret_cast<FrameNode*>(node);
275     CHECK_NULL_VOID(frameNode);
276     DatePickerModelNG::SetShowLunar(frameNode, false);
277 }
278 
GetDatePickerBackgroundColor(ArkUINodeHandle node)279 ArkUI_Uint32 GetDatePickerBackgroundColor(ArkUINodeHandle node)
280 {
281     auto* frameNode = reinterpret_cast<FrameNode*>(node);
282     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
283     return DatePickerModelNG::getBackgroundColor(frameNode);
284 }
285 
SetDatePickerBackgroundColor(ArkUINodeHandle node,uint32_t color)286 void SetDatePickerBackgroundColor(ArkUINodeHandle node, uint32_t color)
287 {
288     auto* frameNode = reinterpret_cast<FrameNode*>(node);
289     CHECK_NULL_VOID(frameNode);
290     DatePickerModelNG::SetBackgroundColor(frameNode, Color(color));
291 }
292 
ResetDatePickerBackgroundColor(ArkUINodeHandle node)293 void ResetDatePickerBackgroundColor(ArkUINodeHandle node)
294 {
295     auto* frameNode = reinterpret_cast<FrameNode*>(node);
296     CHECK_NULL_VOID(frameNode);
297     DatePickerModelNG::SetBackgroundColor(frameNode, Color(Color::TRANSPARENT));
298 }
299 
GetStartDate(ArkUINodeHandle node)300 ArkUI_CharPtr GetStartDate(ArkUINodeHandle node)
301 {
302     auto* frameNode = reinterpret_cast<FrameNode*>(node);
303     CHECK_NULL_RETURN(frameNode, "");
304     LunarDate lunarDate = DatePickerModelNG::getStartDate(frameNode);
305     g_strValue = std::to_string(static_cast<uint32_t>(lunarDate.year)) + "-";
306     g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.month)) + "-";
307     g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.day));
308     return g_strValue.c_str();
309 }
310 
SetStartDate(ArkUINodeHandle node,uint32_t year,uint32_t month,uint32_t day)311 void SetStartDate(ArkUINodeHandle node, uint32_t year, uint32_t month, uint32_t day)
312 {
313     auto* frameNode = reinterpret_cast<FrameNode*>(node);
314     CHECK_NULL_VOID(frameNode);
315     auto pickerDate = PickerDate(year, month, day);
316     if (pickerDate.GetYear() < YEAR_1900) {
317         pickerDate.SetYear(YEAR_1970);
318         pickerDate.SetMonth(1);
319         pickerDate.SetDay(1);
320     }
321     DatePickerModelNG::SetStartDate(frameNode, pickerDate);
322 }
323 
ResetStartDate(ArkUINodeHandle node)324 void ResetStartDate(ArkUINodeHandle node)
325 {
326     auto* frameNode = reinterpret_cast<FrameNode*>(node);
327     CHECK_NULL_VOID(frameNode);
328     DatePickerModelNG::SetStartDate(frameNode, PickerDate(1970, 1, 1));
329 }
330 
GetEndDate(ArkUINodeHandle node)331 ArkUI_CharPtr GetEndDate(ArkUINodeHandle node)
332 {
333     auto* frameNode = reinterpret_cast<FrameNode*>(node);
334     CHECK_NULL_RETURN(frameNode, "");
335     LunarDate lunarDate = DatePickerModelNG::getEndDate(frameNode);
336     g_strValue = std::to_string(static_cast<uint32_t>(lunarDate.year)) + "-";
337     g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.month)) + "-";
338     g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.day));
339     return g_strValue.c_str();
340 }
341 
SetEndDate(ArkUINodeHandle node,uint32_t year,uint32_t month,uint32_t day)342 void SetEndDate(ArkUINodeHandle node, uint32_t year, uint32_t month, uint32_t day)
343 {
344     auto* frameNode = reinterpret_cast<FrameNode*>(node);
345     CHECK_NULL_VOID(frameNode);
346     DatePickerModelNG::SetEndDate(frameNode, PickerDate(year, month, day));
347 }
348 
ResetEndDate(ArkUINodeHandle node)349 void ResetEndDate(ArkUINodeHandle node)
350 {
351     auto* frameNode = reinterpret_cast<FrameNode*>(node);
352     CHECK_NULL_VOID(frameNode);
353     DatePickerModelNG::SetEndDate(frameNode, PickerDate(2100, 12, 31));
354 }
355 
GetSelectedDate(ArkUINodeHandle node)356 ArkUI_CharPtr GetSelectedDate(ArkUINodeHandle node)
357 {
358     auto* frameNode = reinterpret_cast<FrameNode*>(node);
359     CHECK_NULL_RETURN(frameNode, "");
360     LunarDate lunarDate = DatePickerModelNG::getSelectedDate(frameNode);
361     g_strValue = std::to_string(static_cast<uint32_t>(lunarDate.year)) + "-";
362     g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.month)) + "-";
363     g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.day));
364     return g_strValue.c_str();
365 }
366 
SetSelectedDate(ArkUINodeHandle node,uint32_t year,uint32_t month,uint32_t day)367 void SetSelectedDate(ArkUINodeHandle node, uint32_t year, uint32_t month, uint32_t day)
368 {
369     auto* frameNode = reinterpret_cast<FrameNode*>(node);
370     CHECK_NULL_VOID(frameNode);
371     DatePickerModelNG::SetSelectedDate(frameNode, PickerDate(year, month, day));
372 }
373 
ResetSelectedDate(ArkUINodeHandle node)374 void ResetSelectedDate(ArkUINodeHandle node)
375 {
376     auto* frameNode = reinterpret_cast<FrameNode*>(node);
377     CHECK_NULL_VOID(frameNode);
378     time_t now = time(nullptr);
379     auto currentTm = localtime(&now);
380     CHECK_NULL_VOID(currentTm);
381     PickerDate pickerDate(currentTm->tm_year + 1900, currentTm->tm_mon + 1, currentTm->tm_mday);
382 
383     DatePickerModelNG::SetSelectedDate(frameNode, pickerDate);
384 }
385 
SetDatePickerMode(ArkUINodeHandle node,int value)386 void SetDatePickerMode(ArkUINodeHandle node, int value)
387 {
388     auto *frameNode = reinterpret_cast<FrameNode *>(node);
389     CHECK_NULL_VOID(frameNode);
390     if (value < 0 || value > static_cast<int32_t>(DatePickerMode::MONTH_AND_DAY)) {
391         return;
392     }
393     DatePickerModelNG::SetMode(frameNode, static_cast<DatePickerMode>(value));
394 }
395 
ResetDatePickerMode(ArkUINodeHandle node)396 void ResetDatePickerMode(ArkUINodeHandle node)
397 {
398     auto *frameNode = reinterpret_cast<FrameNode *>(node);
399     CHECK_NULL_VOID(frameNode);
400     DatePickerModelNG::SetMode(frameNode, DatePickerMode::DATE);
401 }
402 
GetDatePickerMode(ArkUINodeHandle node)403 ArkUI_Int32 GetDatePickerMode(ArkUINodeHandle node)
404 {
405     auto *frameNode = reinterpret_cast<FrameNode *>(node);
406     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
407     return static_cast<int>(DatePickerModelNG::getMode(frameNode));
408 }
409 
GetEnableHapticFeedback(ArkUINodeHandle node)410 ArkUI_Bool GetEnableHapticFeedback(ArkUINodeHandle node)
411 {
412     auto* frameNode = reinterpret_cast<FrameNode*>(node);
413     CHECK_NULL_RETURN(frameNode, true);
414     return DatePickerModelNG::GetEnableHapticFeedback(frameNode);
415 }
416 
SetEnableHapticFeedback(ArkUINodeHandle node,int enableHapticFeedback)417 void SetEnableHapticFeedback(ArkUINodeHandle node, int enableHapticFeedback)
418 {
419     auto* frameNode = reinterpret_cast<FrameNode*>(node);
420     CHECK_NULL_VOID(frameNode);
421     DatePickerModelNG::SetEnableHapticFeedback(frameNode, enableHapticFeedback);
422 }
423 
ResetEnableHapticFeedback(ArkUINodeHandle node)424 void ResetEnableHapticFeedback(ArkUINodeHandle node)
425 {
426     auto* frameNode = reinterpret_cast<FrameNode*>(node);
427     CHECK_NULL_VOID(frameNode);
428     DatePickerModelNG::SetEnableHapticFeedback(frameNode, true);
429 }
430 
SetDatePickerDigitalCrownSensitivity(ArkUINodeHandle node,int32_t CrownSensitivity)431 void SetDatePickerDigitalCrownSensitivity(ArkUINodeHandle node, int32_t CrownSensitivity)
432 {
433     auto* frameNode = reinterpret_cast<FrameNode*>(node);
434     CHECK_NULL_VOID(frameNode);
435     DatePickerModelNG::SetDigitalCrownSensitivity(frameNode, CrownSensitivity);
436 }
437 
ResetDatePickerDigitalCrownSensitivity(ArkUINodeHandle node)438 void ResetDatePickerDigitalCrownSensitivity(ArkUINodeHandle node)
439 {
440     auto* frameNode = reinterpret_cast<FrameNode*>(node);
441     CHECK_NULL_VOID(frameNode);
442     DatePickerModelNG::SetDigitalCrownSensitivity(frameNode, DEFAULT_CROWNSENSITIVITY);
443 }
444 
SetDatePickerOnDateChangeExt(ArkUINodeHandle node,void * callback)445 void SetDatePickerOnDateChangeExt(ArkUINodeHandle node, void* callback)
446 {
447     auto* frameNode = reinterpret_cast<FrameNode*>(node);
448     CHECK_NULL_VOID(frameNode);
449     auto onDateChange = reinterpret_cast<std::function<void(const BaseEventInfo*)>*>(callback);
450     DatePickerModelNG::SetOnDateChange(frameNode, std::move(*onDateChange));
451 }
452 
ResetDatePickerOnDateChange(ArkUINodeHandle node)453 void ResetDatePickerOnDateChange(ArkUINodeHandle node)
454 {
455     auto* frameNode = reinterpret_cast<FrameNode*>(node);
456     CHECK_NULL_VOID(frameNode);
457     DatePickerModelNG::SetOnDateChange(frameNode, nullptr);
458 }
459 
SetDatePickerOnChangeExt(ArkUINodeHandle node,void * callback)460 void SetDatePickerOnChangeExt(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     DatePickerModelNG::SetOnChange(frameNode, std::move(*onChange));
466 }
467 
ResetDatePickerOnChange(ArkUINodeHandle node)468 void ResetDatePickerOnChange(ArkUINodeHandle node)
469 {
470     auto* frameNode = reinterpret_cast<FrameNode*>(node);
471     CHECK_NULL_VOID(frameNode);
472     DatePickerModelNG::SetOnChange(frameNode, nullptr);
473 }
474 
475 } // namespace
476 
477 namespace NodeModifier {
GetDatePickerModifier()478 const ArkUIDatePickerModifier* GetDatePickerModifier()
479 {
480     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
481     static const ArkUIDatePickerModifier modifier = {
482         .getSelectedTextStyle = GetSelectedTextStyle,
483         .setSelectedTextStyle = SetSelectedTextStyle,
484         .resetSelectedTextStyle = ResetSelectedTextStyle,
485         .getDatePickerTextStyle = GetDatePickerTextStyle,
486         .setDatePickerTextStyle = SetDatePickerTextStyle,
487         .resetDatePickerTextStyle = ResetDatePickerTextStyle,
488         .getDisappearTextStyle = GetDisappearTextStyle,
489         .setDisappearTextStyle = SetDisappearTextStyle,
490         .resetDisappearTextStyle = ResetDisappearTextStyle,
491         .getLunar = GetLunar,
492         .setLunar = SetLunar,
493         .resetLunar = ResetLunar,
494         .getStartDate = GetStartDate,
495         .setStartDate = SetStartDate,
496         .resetStartDate = ResetStartDate,
497         .getEndDate = GetEndDate,
498         .setEndDate = SetEndDate,
499         .resetEndDate = ResetEndDate,
500         .getSelectedDate = GetSelectedDate,
501         .setSelectedDate = SetSelectedDate,
502         .resetSelectedDate = ResetSelectedDate,
503         .getDatePickerBackgroundColor = GetDatePickerBackgroundColor,
504         .setDatePickerBackgroundColor = SetDatePickerBackgroundColor,
505         .resetDatePickerBackgroundColor = ResetDatePickerBackgroundColor,
506         .getDatePickerMode = GetDatePickerMode,
507         .setDatePickerMode = SetDatePickerMode,
508         .resetDatePickerMode = ResetDatePickerMode,
509         .getEnableHapticFeedback = GetEnableHapticFeedback,
510         .setEnableHapticFeedback = SetEnableHapticFeedback,
511         .resetEnableHapticFeedback = ResetEnableHapticFeedback,
512         .setDatePickerDigitalCrownSensitivity = SetDatePickerDigitalCrownSensitivity,
513         .resetDatePickerDigitalCrownSensitivity = ResetDatePickerDigitalCrownSensitivity,
514         .setDatePickerOnDateChange = SetDatePickerOnDateChangeExt,
515         .resetDatePickerOnDateChange = ResetDatePickerOnDateChange,
516         .setDatePickerOnChange = SetDatePickerOnChangeExt,
517         .resetDatePickerOnChange = ResetDatePickerOnChange,
518     };
519     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
520 
521     return &modifier;
522 }
523 
GetCJUIDatePickerModifier()524 const CJUIDatePickerModifier* GetCJUIDatePickerModifier()
525 {
526     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
527     static const CJUIDatePickerModifier modifier = {
528         .getSelectedTextStyle = GetSelectedTextStyle,
529         .setSelectedTextStyle = SetSelectedTextStyle,
530         .resetSelectedTextStyle = ResetSelectedTextStyle,
531         .getDatePickerTextStyle = GetDatePickerTextStyle,
532         .setDatePickerTextStyle = SetDatePickerTextStyle,
533         .resetDatePickerTextStyle = ResetDatePickerTextStyle,
534         .getDisappearTextStyle = GetDisappearTextStyle,
535         .setDisappearTextStyle = SetDisappearTextStyle,
536         .resetDisappearTextStyle = ResetDisappearTextStyle,
537         .getLunar = GetLunar,
538         .setLunar = SetLunar,
539         .resetLunar = ResetLunar,
540         .getStartDate = GetStartDate,
541         .setStartDate = SetStartDate,
542         .resetStartDate = ResetStartDate,
543         .getEndDate = GetEndDate,
544         .setEndDate = SetEndDate,
545         .resetEndDate = ResetEndDate,
546         .getSelectedDate = GetSelectedDate,
547         .setSelectedDate = SetSelectedDate,
548         .resetSelectedDate = ResetSelectedDate,
549         .getDatePickerBackgroundColor = GetDatePickerBackgroundColor,
550         .setDatePickerBackgroundColor = SetDatePickerBackgroundColor,
551         .resetDatePickerBackgroundColor = ResetDatePickerBackgroundColor,
552         .getDatePickerMode = GetDatePickerMode,
553         .setDatePickerMode = SetDatePickerMode,
554         .resetDatePickerMode = ResetDatePickerMode,
555         .getEnableHapticFeedback = GetEnableHapticFeedback,
556         .setEnableHapticFeedback = SetEnableHapticFeedback,
557         .resetEnableHapticFeedback = ResetEnableHapticFeedback,
558     };
559     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
560 
561     return &modifier;
562 }
SetDatePickerOnDateChange(ArkUINodeHandle node,void * extraParam)563 void SetDatePickerOnDateChange(ArkUINodeHandle node, void* extraParam)
564 {
565     auto* frameNode = reinterpret_cast<FrameNode*>(node);
566     CHECK_NULL_VOID(frameNode);
567     auto onDateChange = [extraParam](const BaseEventInfo* info) {
568         ArkUINodeEvent event;
569         event.kind = COMPONENT_ASYNC_EVENT;
570         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
571         event.componentAsyncEvent.subKind = ON_DATE_PICKER_DATE_CHANGE;
572         const auto* eventInfo = TypeInfoHelper::DynamicCast<DatePickerChangeEvent>(info);
573         std::unique_ptr<JsonValue> argsPtr = JsonUtil::ParseJsonString(eventInfo->GetSelectedStr());
574         if (!argsPtr) {
575             event.componentAsyncEvent.data[0].i32 = 1970;
576             event.componentAsyncEvent.data[1].i32 = 1;
577             event.componentAsyncEvent.data[2].i32 = 1;
578             event.componentAsyncEvent.data[3].i32 = 0;
579             event.componentAsyncEvent.data[4].i32 = 0;
580         }
581         auto year = argsPtr->GetValue("year");
582         auto month = argsPtr->GetValue("month");
583         auto day = argsPtr->GetValue("day");
584         auto hour = argsPtr->GetValue("hour");
585         auto minute = argsPtr->GetValue("minute");
586         if (year && year->IsNumber()) {
587             event.componentAsyncEvent.data[0].i32 = year->GetInt();
588         }
589         if (month && month->IsNumber()) {
590             event.componentAsyncEvent.data[1].i32 = month->GetInt();
591         }
592         if (day && day->IsNumber()) {
593             event.componentAsyncEvent.data[2].i32 = day->GetInt();
594         }
595         if (hour && hour->IsNumber()) {
596             event.componentAsyncEvent.data[3].i32 = hour->GetInt();
597         }
598         if (minute && minute->IsNumber()) {
599             event.componentAsyncEvent.data[4].i32 = minute->GetInt();
600         }
601         SendArkUISyncEvent(&event);
602     };
603     DatePickerModelNG::SetOnDateChange(frameNode, std::move(onDateChange));
604 }
605 } // namespace NodeModifier
606 } // namespace OHOS::Ace::NG
607