• 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 "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_text_input_bridge.h"
16 
17 #include "base/utils/utils.h"
18 #include "core/components/common/layout/constants.h"
19 #include "core/components/text_field/textfield_theme.h"
20 #include "core/components_ng/pattern/text_field/text_field_model.h"
21 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.h"
22 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
23 #include "bridge/declarative_frontend/jsview/js_text_editable_controller.h"
24 #include "frameworks/bridge/declarative_frontend/jsview/js_textfield.h"
25 namespace OHOS::Ace::NG {
26 
27 namespace {
28 constexpr int16_t DEFAULT_ALPHA = 255;
29 constexpr double DEFAULT_OPACITY = 0.2;
30 constexpr double DEFAULT_FONT_SIZE = 16.0;
31 constexpr Ace::FontStyle DEFAULT_FONT_STYLE = Ace::FontStyle::NORMAL;
32 const std::string DEFAULT_FONT_WEIGHT = "400";
33 constexpr TextDecorationStyle DEFAULT_DECORATION_STYLE = TextDecorationStyle::SOLID;
34 constexpr int CALL_ARG_0 = 0;
35 constexpr int CALL_ARG_1 = 1;
36 constexpr int CALL_ARG_2 = 2;
37 constexpr int CALL_ARG_3 = 3;
38 constexpr int CALL_ARG_4 = 4;
39 constexpr int PARAM_ARR_LENGTH_1 = 1;
40 constexpr int PARAM_ARR_LENGTH_2 = 2;
41 constexpr int PARAM_ARR_LENGTH_3 = 3;
42 constexpr int32_t ARG_GROUP_LENGTH = 4;
43 constexpr int32_t DEFAULT_MODE = -1;
44 constexpr uint32_t ILLEGAL_VALUE = 0;
45 const int32_t MINI_VALID_VALUE = 1;
46 const int32_t MAX_VALID_VALUE = 100;
47 constexpr uint32_t DEFAULT_OVERFLOW = 4;
48 const std::vector<TextHeightAdaptivePolicy> HEIGHT_ADAPTIVE_POLICY = { TextHeightAdaptivePolicy::MAX_LINES_FIRST,
49     TextHeightAdaptivePolicy::MIN_FONT_SIZE_FIRST, TextHeightAdaptivePolicy::LAYOUT_CONSTRAINT_FIRST };
50 const std::vector<TextOverflow> TEXT_OVERFLOWS = { TextOverflow::NONE, TextOverflow::CLIP, TextOverflow::ELLIPSIS,
51     TextOverflow::MARQUEE, TextOverflow::DEFAULT };
52 
ParseLocalizedPadding(const EcmaVM * vm,const Local<JSValueRef> & value,CalcDimension & dimen,ArkUISizeType & result)53 bool ParseLocalizedPadding(const EcmaVM* vm, const Local<JSValueRef>& value, CalcDimension& dimen,
54     ArkUISizeType& result)
55 {
56     if (ArkTSUtils::ParseJsLengthMetrics(vm, value, dimen)) {
57         if (LessOrEqual(dimen.Value(), 0.0)) {
58             dimen.SetValue(0.0);
59             dimen.SetUnit(DimensionUnit::VP);
60         }
61         result.unit = static_cast<int8_t>(dimen.Unit());
62         if (dimen.CalcValue() != "") {
63             result.string = dimen.CalcValue().c_str();
64         } else {
65             result.value = dimen.Value();
66         }
67         return true;
68     }
69     return false;
70 }
71 
ParseLocalizedMargin(const EcmaVM * vm,const Local<JSValueRef> & value,CalcDimension & dimen,ArkUISizeType & result)72 bool ParseLocalizedMargin(const EcmaVM* vm, const Local<JSValueRef>& value, CalcDimension& dimen, ArkUISizeType& result)
73 {
74     if (ArkTSUtils::ParseJsLengthMetrics(vm, value, dimen)) {
75         result.unit = static_cast<int8_t>(dimen.Unit());
76         if (dimen.CalcValue() != "") {
77             result.string = dimen.CalcValue().c_str();
78         } else {
79             result.value = dimen.Value();
80         }
81         return true;
82     }
83     return false;
84 }
85 } // namespace
86 
87 
SetCaretColor(ArkUIRuntimeCallInfo * runtimeCallInfo)88 ArkUINativeModuleValue TextInputBridge::SetCaretColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
89 {
90     EcmaVM *vm = runtimeCallInfo->GetVM();
91     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
92     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
93     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
94     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
95     Color color;
96     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
97         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretColor(nativeNode);
98     } else {
99         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCaretColor(nativeNode, color.GetValue());
100     }
101     return panda::JSValueRef::Undefined(vm);
102 }
103 
ResetCaretColor(ArkUIRuntimeCallInfo * runtimeCallInfo)104 ArkUINativeModuleValue TextInputBridge::ResetCaretColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
105 {
106     EcmaVM *vm = runtimeCallInfo->GetVM();
107     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
108     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
109     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
110     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretColor(nativeNode);
111     return panda::JSValueRef::Undefined(vm);
112 }
113 
SetType(ArkUIRuntimeCallInfo * runtimeCallInfo)114 ArkUINativeModuleValue TextInputBridge::SetType(ArkUIRuntimeCallInfo *runtimeCallInfo)
115 {
116     EcmaVM *vm = runtimeCallInfo->GetVM();
117     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
118     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
119     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
120     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
121     if (secondArg->IsNumber()) {
122         int32_t value = secondArg->Int32Value(vm);
123         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputType(nativeNode, value);
124     } else {
125         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputType(nativeNode);
126     }
127 
128     return panda::JSValueRef::Undefined(vm);
129 }
130 
ResetType(ArkUIRuntimeCallInfo * runtimeCallInfo)131 ArkUINativeModuleValue TextInputBridge::ResetType(ArkUIRuntimeCallInfo *runtimeCallInfo)
132 {
133     EcmaVM *vm = runtimeCallInfo->GetVM();
134     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
135     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
136     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
137     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputType(nativeNode);
138     return panda::JSValueRef::Undefined(vm);
139 }
140 
SetMaxLines(ArkUIRuntimeCallInfo * runtimeCallInfo)141 ArkUINativeModuleValue TextInputBridge::SetMaxLines(ArkUIRuntimeCallInfo *runtimeCallInfo)
142 {
143     EcmaVM *vm = runtimeCallInfo->GetVM();
144     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
145     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
146     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
147     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
148     if (secondArg->IsNumber()) {
149         uint32_t value = secondArg->Uint32Value(vm);
150         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputMaxLines(nativeNode, value);
151     } else {
152         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLines(nativeNode);
153     }
154     return panda::JSValueRef::Undefined(vm);
155 }
156 
ResetMaxLines(ArkUIRuntimeCallInfo * runtimeCallInfo)157 ArkUINativeModuleValue TextInputBridge::ResetMaxLines(ArkUIRuntimeCallInfo *runtimeCallInfo)
158 {
159     EcmaVM *vm = runtimeCallInfo->GetVM();
160     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
161     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
162     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
163     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLines(nativeNode);
164     return panda::JSValueRef::Undefined(vm);
165 }
166 
SetPlaceholderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)167 ArkUINativeModuleValue TextInputBridge::SetPlaceholderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
168 {
169     EcmaVM *vm = runtimeCallInfo->GetVM();
170     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
171     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
172     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
173     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
174     Color color;
175     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
176         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPlaceholderColor(nativeNode);
177     } else {
178         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderColor(nativeNode, color.GetValue());
179     }
180     return panda::JSValueRef::Undefined(vm);
181 }
182 
ResetPlaceholderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)183 ArkUINativeModuleValue TextInputBridge::ResetPlaceholderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
184 {
185     EcmaVM *vm = runtimeCallInfo->GetVM();
186     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
187     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
188     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
189     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPlaceholderColor(nativeNode);
190     return panda::JSValueRef::Undefined(vm);
191 }
192 
SetCaretPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)193 ArkUINativeModuleValue TextInputBridge::SetCaretPosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
194 {
195     EcmaVM *vm = runtimeCallInfo->GetVM();
196     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
197     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
198     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
199     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
200     if (secondArg->IsInt() && secondArg->Int32Value(vm) >= 0) {
201         int32_t caretPosition = secondArg->Int32Value(vm);
202         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCaretPosition(nativeNode, caretPosition);
203     } else {
204         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretPosition(nativeNode);
205     }
206     return panda::JSValueRef::Undefined(vm);
207 }
208 
ResetCaretPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)209 ArkUINativeModuleValue TextInputBridge::ResetCaretPosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
210 {
211     EcmaVM *vm = runtimeCallInfo->GetVM();
212     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
213     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
214     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
215     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretPosition(nativeNode);
216     return panda::JSValueRef::Undefined(vm);
217 }
218 
SetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)219 ArkUINativeModuleValue TextInputBridge::SetCopyOption(ArkUIRuntimeCallInfo *runtimeCallInfo)
220 {
221     EcmaVM *vm = runtimeCallInfo->GetVM();
222     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
223     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
224     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
225     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
226     if (secondArg->IsNumber()) {
227         int32_t option = secondArg->Int32Value(vm);
228         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCopyOption(nativeNode, option);
229     } else {
230         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCopyOption(nativeNode);
231     }
232 
233     return panda::JSValueRef::Undefined(vm);
234 }
235 
ResetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)236 ArkUINativeModuleValue TextInputBridge::ResetCopyOption(ArkUIRuntimeCallInfo *runtimeCallInfo)
237 {
238     EcmaVM *vm = runtimeCallInfo->GetVM();
239     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
240     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
241     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
242     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCopyOption(nativeNode);
243     return panda::JSValueRef::Undefined(vm);
244 }
245 
SetShowPasswordIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)246 ArkUINativeModuleValue TextInputBridge::SetShowPasswordIcon(ArkUIRuntimeCallInfo *runtimeCallInfo)
247 {
248     EcmaVM *vm = runtimeCallInfo->GetVM();
249     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
250     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
251     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
252     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
253 
254     if (secondArg->IsBoolean()) {
255         uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
256         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowPasswordIcon(nativeNode, value);
257     } else {
258         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPasswordIcon(nativeNode);
259     }
260     return panda::JSValueRef::Undefined(vm);
261 }
262 
ResetShowPasswordIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)263 ArkUINativeModuleValue TextInputBridge::ResetShowPasswordIcon(ArkUIRuntimeCallInfo *runtimeCallInfo)
264 {
265     EcmaVM *vm = runtimeCallInfo->GetVM();
266     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
267     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
268     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
269     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPasswordIcon(nativeNode);
270     return panda::JSValueRef::Undefined(vm);
271 }
272 
SetShowPassword(ArkUIRuntimeCallInfo * runtimeCallInfo)273 ArkUINativeModuleValue TextInputBridge::SetShowPassword(ArkUIRuntimeCallInfo *runtimeCallInfo)
274 {
275     EcmaVM *vm = runtimeCallInfo->GetVM();
276     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
277     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
278     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
279     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
280 
281     if (secondArg->IsBoolean()) {
282         uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
283         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowPassword(nativeNode, value);
284     } else {
285         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPassword(nativeNode);
286     }
287     return panda::JSValueRef::Undefined(vm);
288 }
289 
ResetShowPassword(ArkUIRuntimeCallInfo * runtimeCallInfo)290 ArkUINativeModuleValue TextInputBridge::ResetShowPassword(ArkUIRuntimeCallInfo *runtimeCallInfo)
291 {
292     EcmaVM *vm = runtimeCallInfo->GetVM();
293     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
294     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
295     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
296     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPassword(nativeNode);
297     return panda::JSValueRef::Undefined(vm);
298 }
299 
SetPasswordIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)300 ArkUINativeModuleValue TextInputBridge::SetPasswordIcon(ArkUIRuntimeCallInfo *runtimeCallInfo)
301 {
302     EcmaVM *vm = runtimeCallInfo->GetVM();
303     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
304     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
305     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
306     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(2);
307     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
308 
309     PasswordIcon passwordIcon;
310     struct ArkUIPasswordIconType value = {"", "", "", "", "", ""};
311     if (!ArkTSUtils::GetJsPasswordIcon(vm, secondArg, thirdArg, passwordIcon)) {
312         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPasswordIcon(nativeNode);
313     } else {
314         value.showResult = passwordIcon.showResult.c_str();
315         value.hideResult = passwordIcon.hideResult.c_str();
316         value.showBundleName = passwordIcon.showBundleName.c_str();
317         value.showModuleName = passwordIcon.showModuleName.c_str();
318         value.hideBundleName = passwordIcon.hideBundleName.c_str();
319         value.hideModuleName = passwordIcon.hideModuleName.c_str();
320         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPasswordIcon(nativeNode, &value);
321     }
322     return panda::JSValueRef::Undefined(vm);
323 }
324 
ResetPasswordIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)325 ArkUINativeModuleValue TextInputBridge::ResetPasswordIcon(ArkUIRuntimeCallInfo *runtimeCallInfo)
326 {
327     EcmaVM *vm = runtimeCallInfo->GetVM();
328     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
329     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
330     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
331     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPasswordIcon(nativeNode);
332     return panda::JSValueRef::Undefined(vm);
333 }
334 
SetTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)335 ArkUINativeModuleValue TextInputBridge::SetTextAlign(ArkUIRuntimeCallInfo *runtimeCallInfo)
336 {
337     EcmaVM *vm = runtimeCallInfo->GetVM();
338     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
339     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
340     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
341     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
342 
343     if (secondArg->IsNumber()) {
344         int32_t value = secondArg->Int32Value(vm);
345         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextAlign(nativeNode, value);
346     } else {
347         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputTextAlign(nativeNode);
348     }
349     return panda::JSValueRef::Undefined(vm);
350 }
351 
ResetTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)352 ArkUINativeModuleValue TextInputBridge::ResetTextAlign(ArkUIRuntimeCallInfo *runtimeCallInfo)
353 {
354     EcmaVM *vm = runtimeCallInfo->GetVM();
355     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
356     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
357     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
358     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputTextAlign(nativeNode);
359     return panda::JSValueRef::Undefined(vm);
360 }
361 
SetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)362 ArkUINativeModuleValue TextInputBridge::SetStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
363 {
364     EcmaVM *vm = runtimeCallInfo->GetVM();
365     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
366     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
367     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
368     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
369     if (secondArg->IsString(vm) && secondArg->ToString(vm)->ToString(vm) == "Inline") {
370         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputStyle(nativeNode,
371             static_cast<int32_t>(InputStyle::INLINE));
372     } else {
373         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputStyle(nativeNode);
374     }
375     return panda::JSValueRef::Undefined(vm);
376 }
377 
ResetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)378 ArkUINativeModuleValue TextInputBridge::ResetStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
379 {
380     EcmaVM *vm = runtimeCallInfo->GetVM();
381     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
382     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
383     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
384     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputStyle(nativeNode);
385     return panda::JSValueRef::Undefined(vm);
386 }
387 
SetSelectionMenuHidden(ArkUIRuntimeCallInfo * runtimeCallInfo)388 ArkUINativeModuleValue TextInputBridge::SetSelectionMenuHidden(ArkUIRuntimeCallInfo *runtimeCallInfo)
389 {
390     EcmaVM *vm = runtimeCallInfo->GetVM();
391     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
392     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
393     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
394     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
395 
396     if (secondArg->IsBoolean()) {
397         uint32_t menuHiddenValue = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
398         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputSelectionMenuHidden(nativeNode, menuHiddenValue);
399     } else {
400         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectionMenuHidden(nativeNode);
401     }
402 
403     return panda::JSValueRef::Undefined(vm);
404 }
405 
ResetSelectionMenuHidden(ArkUIRuntimeCallInfo * runtimeCallInfo)406 ArkUINativeModuleValue TextInputBridge::ResetSelectionMenuHidden(ArkUIRuntimeCallInfo *runtimeCallInfo)
407 {
408     EcmaVM *vm = runtimeCallInfo->GetVM();
409     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
410     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
411     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
412     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectionMenuHidden(nativeNode);
413     return panda::JSValueRef::Undefined(vm);
414 }
415 
SetTextInputShowUnderline(ArkUIRuntimeCallInfo * runtimeCallInfo)416 ArkUINativeModuleValue TextInputBridge::SetTextInputShowUnderline(ArkUIRuntimeCallInfo *runtimeCallInfo)
417 {
418     EcmaVM *vm = runtimeCallInfo->GetVM();
419     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
420     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
421     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
422     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
423 
424     if (secondArg->IsBoolean()) {
425         uint32_t showUnderLine = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
426         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowUnderline(nativeNode, showUnderLine);
427     } else {
428         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowUnderline(nativeNode);
429     }
430 
431     return panda::JSValueRef::Undefined(vm);
432 }
433 
ResetTextInputShowUnderline(ArkUIRuntimeCallInfo * runtimeCallInfo)434 ArkUINativeModuleValue TextInputBridge::ResetTextInputShowUnderline(ArkUIRuntimeCallInfo *runtimeCallInfo)
435 {
436     EcmaVM *vm = runtimeCallInfo->GetVM();
437     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
438     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
439     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
440     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowUnderline(nativeNode);
441     return panda::JSValueRef::Undefined(vm);
442 }
443 
SetPasswordRules(ArkUIRuntimeCallInfo * runtimeCallInfo)444 ArkUINativeModuleValue TextInputBridge::SetPasswordRules(ArkUIRuntimeCallInfo* runtimeCallInfo)
445 {
446     EcmaVM* vm = runtimeCallInfo->GetVM();
447     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
448     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
449     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
450     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
451     if (secondArg->IsString(vm)) {
452         auto value = secondArg->ToString(vm)->ToString(vm);
453         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPasswordRules(nativeNode, value.c_str());
454     } else {
455         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPasswordRules(nativeNode);
456     }
457     return panda::JSValueRef::Undefined(vm);
458 }
459 
ResetPasswordRules(ArkUIRuntimeCallInfo * runtimeCallInfo)460 ArkUINativeModuleValue TextInputBridge::ResetPasswordRules(ArkUIRuntimeCallInfo* runtimeCallInfo)
461 {
462     EcmaVM* vm = runtimeCallInfo->GetVM();
463     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
464     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
465     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
466     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPasswordRules(nativeNode);
467     return panda::JSValueRef::Undefined(vm);
468 }
469 
SetEnableAutoFill(ArkUIRuntimeCallInfo * runtimeCallInfo)470 ArkUINativeModuleValue TextInputBridge::SetEnableAutoFill(ArkUIRuntimeCallInfo *runtimeCallInfo)
471 {
472     EcmaVM *vm = runtimeCallInfo->GetVM();
473     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
474     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
475     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
476     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
477 
478     if (secondArg->IsBoolean()) {
479         uint32_t enableAutoFill = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
480         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnableAutoFill(nativeNode, enableAutoFill);
481     } else {
482         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnableAutoFill(nativeNode);
483     }
484 
485     return panda::JSValueRef::Undefined(vm);
486 }
487 
ResetEnableAutoFill(ArkUIRuntimeCallInfo * runtimeCallInfo)488 ArkUINativeModuleValue TextInputBridge::ResetEnableAutoFill(ArkUIRuntimeCallInfo *runtimeCallInfo)
489 {
490     EcmaVM *vm = runtimeCallInfo->GetVM();
491     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
492     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
493     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
494     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnableAutoFill(nativeNode);
495     return panda::JSValueRef::Undefined(vm);
496 }
497 
SetCaretStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)498 ArkUINativeModuleValue TextInputBridge::SetCaretStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
499 {
500     EcmaVM *vm = runtimeCallInfo->GetVM();
501     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
502     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
503     Local<JSValueRef> caretWidthArg = runtimeCallInfo->GetCallArgRef(1);
504     Local<JSValueRef> caretColorArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
505     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
506     auto textFieldTheme = ArkTSUtils::GetTheme<TextFieldTheme>();
507     CHECK_NULL_RETURN(textFieldTheme, panda::JSValueRef::Undefined(vm));
508     CalcDimension caretWidth = textFieldTheme->GetCursorWidth();
509     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, caretWidthArg, caretWidth, false) ||
510             LessNotEqual(caretWidth.Value(), 0.0)) {
511         caretWidth = textFieldTheme->GetCursorWidth();
512     }
513     Color color;
514     uint32_t caretColor;
515     if (!caretColorArg->IsUndefined()) {
516         if (ArkTSUtils::ParseJsColorAlpha(vm, caretColorArg, color)) {
517             caretColor = color.GetValue();
518         } else {
519             caretColor = textFieldTheme->GetCursorColor().GetValue();
520         }
521     } else {
522         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCaret(
523             nativeNode, caretWidth.Value(), static_cast<int8_t>(caretWidth.Unit()));
524         return panda::JSValueRef::Undefined(vm);
525     }
526     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCaretStyle(
527         nativeNode, caretWidth.Value(), static_cast<int8_t>(caretWidth.Unit()), caretColor);
528     return panda::JSValueRef::Undefined(vm);
529 }
530 
ResetCaretStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)531 ArkUINativeModuleValue TextInputBridge::ResetCaretStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
532 {
533     EcmaVM *vm = runtimeCallInfo->GetVM();
534     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
535     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
536     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
537     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretStyle(nativeNode);
538     return panda::JSValueRef::Undefined(vm);
539 }
540 
SetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)541 ArkUINativeModuleValue TextInputBridge::SetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo *runtimeCallInfo)
542 {
543     EcmaVM *vm = runtimeCallInfo->GetVM();
544     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
545     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
546     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
547     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
548 
549     if (secondArg->IsBoolean()) {
550         uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
551         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnableKeyboardOnFocus(nativeNode, value);
552     } else {
553         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPasswordIcon(nativeNode);
554     }
555 
556     return panda::JSValueRef::Undefined(vm);
557 }
558 
ResetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)559 ArkUINativeModuleValue TextInputBridge::ResetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo *runtimeCallInfo)
560 {
561     EcmaVM *vm = runtimeCallInfo->GetVM();
562     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
563     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
564     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
565     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnableKeyboardOnFocus(nativeNode);
566     return panda::JSValueRef::Undefined(vm);
567 }
568 
SetBarState(ArkUIRuntimeCallInfo * runtimeCallInfo)569 ArkUINativeModuleValue TextInputBridge::SetBarState(ArkUIRuntimeCallInfo *runtimeCallInfo)
570 {
571     EcmaVM *vm = runtimeCallInfo->GetVM();
572     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
573     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
574     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
575     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
576 
577     if (secondArg->IsNumber()) {
578         int32_t value = secondArg->Int32Value(vm);
579         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputBarState(nativeNode, value);
580     } else {
581         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputBarState(nativeNode);
582     }
583 
584     return panda::JSValueRef::Undefined(vm);
585 }
586 
ResetBarState(ArkUIRuntimeCallInfo * runtimeCallInfo)587 ArkUINativeModuleValue TextInputBridge::ResetBarState(ArkUIRuntimeCallInfo *runtimeCallInfo)
588 {
589     EcmaVM *vm = runtimeCallInfo->GetVM();
590     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
591     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
592     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
593     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputBarState(nativeNode);
594     return panda::JSValueRef::Undefined(vm);
595 }
596 
SetTextInputEnterKeyType(ArkUIRuntimeCallInfo * runtimeCallInfo)597 ArkUINativeModuleValue TextInputBridge::SetTextInputEnterKeyType(ArkUIRuntimeCallInfo *runtimeCallInfo)
598 {
599     EcmaVM *vm = runtimeCallInfo->GetVM();
600     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
601     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
602     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
603     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
604 
605     if (secondArg->IsNumber()) {
606         int32_t value = secondArg->Int32Value(vm);
607         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnterKeyType(nativeNode, value);
608     } else {
609         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnterKeyType(nativeNode);
610     }
611     return panda::JSValueRef::Undefined(vm);
612 }
613 
ResetTextInputEnterKeyType(ArkUIRuntimeCallInfo * runtimeCallInfo)614 ArkUINativeModuleValue TextInputBridge::ResetTextInputEnterKeyType(ArkUIRuntimeCallInfo *runtimeCallInfo)
615 {
616     EcmaVM *vm = runtimeCallInfo->GetVM();
617     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
618     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
619     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
620     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnterKeyType(nativeNode);
621     return panda::JSValueRef::Undefined(vm);
622 }
623 
SetTextInputFontWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)624 ArkUINativeModuleValue TextInputBridge::SetTextInputFontWeight(ArkUIRuntimeCallInfo *runtimeCallInfo)
625 {
626     EcmaVM *vm = runtimeCallInfo->GetVM();
627     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
628     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
629     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
630     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
631     std::string weight;
632     if (secondArg->IsString(vm)) {
633         weight = secondArg->ToString(vm)->ToString(vm);
634         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontWeightStr(nativeNode, weight.c_str());
635     } else if (secondArg->IsNumber()) {
636         weight = std::to_string(secondArg->Int32Value(vm));
637         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontWeightStr(nativeNode, weight.c_str());
638     } else {
639         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontWeight(nativeNode);
640     }
641 
642     return panda::JSValueRef::Undefined(vm);
643 }
644 
ResetTextInputFontWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)645 ArkUINativeModuleValue TextInputBridge::ResetTextInputFontWeight(ArkUIRuntimeCallInfo *runtimeCallInfo)
646 {
647     EcmaVM *vm = runtimeCallInfo->GetVM();
648     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
649     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
650     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
651     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontWeight(nativeNode);
652     return panda::JSValueRef::Undefined(vm);
653 }
654 
SetFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)655 ArkUINativeModuleValue TextInputBridge::SetFontSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
656 {
657     EcmaVM *vm = runtimeCallInfo->GetVM();
658     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
659     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
660     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
661     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
662 
663     CalcDimension fontSize;
664     ArkUILengthType value{ nullptr, 0.0, static_cast<int8_t>(DimensionUnit::FP) };
665     if (!ArkTSUtils::ParseJsDimensionNG(vm, secondArg, fontSize, DimensionUnit::FP, false)) {
666         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontSize(nativeNode);
667     } else {
668         value.unit = static_cast<int8_t>(fontSize.Unit());
669         if (fontSize.CalcValue() != "") {
670             value.string = fontSize.CalcValue().c_str();
671         } else {
672             value.number = fontSize.Value();
673         }
674         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontSize(nativeNode, &value);
675     }
676     return panda::JSValueRef::Undefined(vm);
677 }
678 
ResetFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)679 ArkUINativeModuleValue TextInputBridge::ResetFontSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
680 {
681     EcmaVM *vm = runtimeCallInfo->GetVM();
682     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
683     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
684     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
685     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontSize(nativeNode);
686     return panda::JSValueRef::Undefined(vm);
687 }
688 
SetMaxLength(ArkUIRuntimeCallInfo * runtimeCallInfo)689 ArkUINativeModuleValue TextInputBridge::SetMaxLength(ArkUIRuntimeCallInfo *runtimeCallInfo)
690 {
691     EcmaVM *vm = runtimeCallInfo->GetVM();
692     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
693     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
694     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
695     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
696     if (!secondArg->IsNumber()) {
697         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLength(nativeNode);
698     } else {
699         uint32_t maxLength = secondArg->Uint32Value(vm);
700         if (std::isinf(static_cast<float>(secondArg->ToNumber(vm)->Value()))) {
701             maxLength = INT32_MAX; // Infinity
702         }
703         if (GreatOrEqual(maxLength, 0)) {
704             GetArkUINodeModifiers()->getTextInputModifier()->setTextInputMaxLength(nativeNode, maxLength);
705         } else {
706             GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLength(nativeNode);
707         }
708     }
709     return panda::JSValueRef::Undefined(vm);
710 }
711 
ResetMaxLength(ArkUIRuntimeCallInfo * runtimeCallInfo)712 ArkUINativeModuleValue TextInputBridge::ResetMaxLength(ArkUIRuntimeCallInfo *runtimeCallInfo)
713 {
714     EcmaVM *vm = runtimeCallInfo->GetVM();
715     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
716     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
717     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
718     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLength(nativeNode);
719     return panda::JSValueRef::Undefined(vm);
720 }
721 
SetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)722 ArkUINativeModuleValue TextInputBridge::SetSelectedBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
723 {
724     EcmaVM *vm = runtimeCallInfo->GetVM();
725     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
726     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
727     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
728     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
729     Color color;
730     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
731         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectedBackgroundColor(nativeNode);
732     } else {
733         if (color.GetAlpha() == DEFAULT_ALPHA) {
734             color = color.ChangeOpacity(DEFAULT_OPACITY);
735         }
736         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputSelectedBackgroundColor(
737             nativeNode, color.GetValue());
738     }
739     return panda::JSValueRef::Undefined(vm);
740 }
741 
ResetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)742 ArkUINativeModuleValue TextInputBridge::ResetSelectedBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
743 {
744     EcmaVM *vm = runtimeCallInfo->GetVM();
745     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
746     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
747     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
748     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectedBackgroundColor(nativeNode);
749     return panda::JSValueRef::Undefined(vm);
750 }
751 
SetShowError(ArkUIRuntimeCallInfo * runtimeCallInfo)752 ArkUINativeModuleValue TextInputBridge::SetShowError(ArkUIRuntimeCallInfo *runtimeCallInfo)
753 {
754     EcmaVM *vm = runtimeCallInfo->GetVM();
755     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
756     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
757     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
758     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
759     bool visible = false;
760     std::string error;
761     if (ArkTSUtils::ParseJsString(vm, secondArg, error)) {
762         visible = true;
763     }
764 
765     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowError(nativeNode, error.c_str(),
766         static_cast<uint32_t>(visible));
767 
768     return panda::JSValueRef::Undefined(vm);
769 }
770 
ResetShowError(ArkUIRuntimeCallInfo * runtimeCallInfo)771 ArkUINativeModuleValue TextInputBridge::ResetShowError(ArkUIRuntimeCallInfo *runtimeCallInfo)
772 {
773     EcmaVM *vm = runtimeCallInfo->GetVM();
774     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
775     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
776     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
777     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowError(nativeNode);
778     return panda::JSValueRef::Undefined(vm);
779 }
780 
SetPlaceholderFont(ArkUIRuntimeCallInfo * runtimeCallInfo)781 ArkUINativeModuleValue TextInputBridge::SetPlaceholderFont(ArkUIRuntimeCallInfo *runtimeCallInfo)
782 {
783     EcmaVM *vm = runtimeCallInfo->GetVM();
784     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
785     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
786     Local<JSValueRef> jsSize = runtimeCallInfo->GetCallArgRef(1);
787     Local<JSValueRef> jsWeight = runtimeCallInfo->GetCallArgRef(2);
788     Local<JSValueRef> jsFamily = runtimeCallInfo->GetCallArgRef(3);
789     Local<JSValueRef> jsStyle = runtimeCallInfo->GetCallArgRef(4);
790     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
791     ArkUILengthType length{ nullptr, DEFAULT_FONT_SIZE, static_cast<int8_t>(DimensionUnit::FP) };
792     CalcDimension size(DEFAULT_FONT_SIZE, DimensionUnit::FP);
793     if (!ArkTSUtils::ParseJsDimensionFp(vm, jsSize, size) || size.Unit() == DimensionUnit::PERCENT) {
794         auto theme = ArkTSUtils::GetTheme<TextFieldTheme>();
795         if (theme != nullptr) {
796             size = theme->GetFontSize();
797         }
798     }
799     length.unit = static_cast<int8_t>(size.Unit());
800     if (size.CalcValue() != "") {
801         length.string = size.CalcValue().c_str();
802     } else {
803         length.number = size.Value();
804     }
805 
806     std::string weight = DEFAULT_FONT_WEIGHT;
807     if (!jsWeight->IsNull()) {
808         if (jsWeight->IsString(vm)) {
809             weight = jsWeight->ToString(vm)->ToString(vm);
810         }
811         if (jsWeight->IsNumber()) {
812             weight = std::to_string(jsWeight->Int32Value(vm));
813         }
814     }
815 
816     int32_t style = static_cast<int32_t>(DEFAULT_FONT_STYLE);
817     if (jsStyle->IsNumber()) {
818         style = jsStyle->ToNumber(vm)->Value();
819     }
820 
821     struct ArkUIPlaceholderFontType placeholderFont;
822     placeholderFont.size = &length;
823     placeholderFont.weight = weight.c_str();
824     placeholderFont.style = style;
825     std::vector<std::string> fontFamilies;
826     bool isSuccess = !ArkTSUtils::ParseJsFontFamilies(vm, jsFamily, fontFamilies);
827     auto families = std::make_unique<char* []>(fontFamilies.size());
828     if (isSuccess) {
829         placeholderFont.fontFamilies = nullptr;
830         placeholderFont.length = 0;
831     } else {
832         for (uint32_t i = 0; i < fontFamilies.size(); i++) {
833             families[i] = const_cast<char*>(fontFamilies.at(i).c_str());
834         }
835         placeholderFont.fontFamilies = const_cast<const char**>(families.get());
836         placeholderFont.length = fontFamilies.size();
837     }
838 
839     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderFont(
840         nativeNode, &placeholderFont);
841     return panda::JSValueRef::Undefined(vm);
842 }
843 
ResetPlaceholderFont(ArkUIRuntimeCallInfo * runtimeCallInfo)844 ArkUINativeModuleValue TextInputBridge::ResetPlaceholderFont(ArkUIRuntimeCallInfo *runtimeCallInfo)
845 {
846     EcmaVM *vm = runtimeCallInfo->GetVM();
847     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
848     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
849     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
850     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPlaceholderFont(nativeNode);
851     return panda::JSValueRef::Undefined(vm);
852 }
853 
SetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)854 ArkUINativeModuleValue TextInputBridge::SetFontColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
855 {
856     EcmaVM *vm = runtimeCallInfo->GetVM();
857     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
858     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
859     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
860     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
861     Color color;
862     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
863         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontColor(nativeNode);
864     } else {
865         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontColor(nativeNode, color.GetValue());
866     }
867     return panda::JSValueRef::Undefined(vm);
868 }
869 
ResetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)870 ArkUINativeModuleValue TextInputBridge::ResetFontColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
871 {
872     EcmaVM *vm = runtimeCallInfo->GetVM();
873     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
874     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
875     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
876     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontColor(nativeNode);
877     return panda::JSValueRef::Undefined(vm);
878 }
879 
SetFontStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)880 ArkUINativeModuleValue TextInputBridge::SetFontStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
881 {
882     EcmaVM *vm = runtimeCallInfo->GetVM();
883     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
884     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
885     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
886     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
887     if (secondArg->IsNumber()) {
888         uint32_t fontStyle = secondArg->Uint32Value(vm);
889         if (fontStyle < static_cast<uint32_t>(OHOS::Ace::FontStyle::NORMAL) ||
890             fontStyle > static_cast<uint32_t>(OHOS::Ace::FontStyle::ITALIC)) {
891             fontStyle = static_cast<uint32_t>(OHOS::Ace::FontStyle::NORMAL);
892         }
893         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontStyle(nativeNode, fontStyle);
894     } else {
895         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontStyle(nativeNode);
896     }
897     return panda::JSValueRef::Undefined(vm);
898 }
899 
ResetFontStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)900 ArkUINativeModuleValue TextInputBridge::ResetFontStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
901 {
902     EcmaVM *vm = runtimeCallInfo->GetVM();
903     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
904     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
905     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
906     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontStyle(nativeNode);
907     return panda::JSValueRef::Undefined(vm);
908 }
909 
SetFontFamily(ArkUIRuntimeCallInfo * runtimeCallInfo)910 ArkUINativeModuleValue TextInputBridge::SetFontFamily(ArkUIRuntimeCallInfo *runtimeCallInfo)
911 {
912     EcmaVM *vm = runtimeCallInfo->GetVM();
913     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
914     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
915     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
916     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
917 
918     std::vector<std::string> fontFamilies;
919     if (!ArkTSUtils::ParseJsFontFamilies(vm, secondArg, fontFamilies)) {
920         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontFamily(nativeNode);
921     } else {
922         auto families = std::make_unique<char* []>(fontFamilies.size());
923         for (uint32_t i = 0; i < fontFamilies.size(); i++) {
924             families[i] = const_cast<char*>(fontFamilies.at(i).c_str());
925         }
926         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontFamily(nativeNode,
927             const_cast<const char**>(families.get()), fontFamilies.size());
928     }
929     return panda::JSValueRef::Undefined(vm);
930 }
931 
ResetFontFamily(ArkUIRuntimeCallInfo * runtimeCallInfo)932 ArkUINativeModuleValue TextInputBridge::ResetFontFamily(ArkUIRuntimeCallInfo *runtimeCallInfo)
933 {
934     EcmaVM *vm = runtimeCallInfo->GetVM();
935     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
936     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
937     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
938     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontFamily(nativeNode);
939     return panda::JSValueRef::Undefined(vm);
940 }
941 
SetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)942 ArkUINativeModuleValue TextInputBridge::SetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
943 {
944     EcmaVM* vm = runtimeCallInfo->GetVM();
945     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
946     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
947     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
948     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
949     if (secondArg->IsString(vm)) {
950         auto value = secondArg->ToString(vm)->ToString(vm);
951         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontFeature(nativeNode, value.c_str());
952     } else {
953         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontFeature(nativeNode);
954     }
955     return panda::JSValueRef::Undefined(vm);
956 }
957 
ResetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)958 ArkUINativeModuleValue TextInputBridge::ResetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
959 {
960     EcmaVM* vm = runtimeCallInfo->GetVM();
961     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
962     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
963     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
964     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontFeature(nativeNode);
965     return panda::JSValueRef::Undefined(vm);
966 }
967 
SetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)968 ArkUINativeModuleValue TextInputBridge::SetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
969 {
970     EcmaVM* vm = runtimeCallInfo->GetVM();
971     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
972     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
973     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1); // 1: textInputDecoration value
974     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);  // 2: color value
975     Local<JSValueRef> fourthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_3);
976     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
977     auto container = Container::Current();
978     CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
979     auto pipelineContext = container->GetPipelineContext();
980     CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
981     auto themeManager = pipelineContext->GetThemeManager();
982     CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
983     auto theme = themeManager->GetTheme<TextFieldTheme>();
984     CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
985     Color color = theme->GetTextStyle().GetTextDecorationColor();
986     int32_t textInputDecoration = static_cast<int32_t>(theme->GetTextStyle().GetTextDecoration());
987     if (secondArg->IsInt()) {
988         textInputDecoration = secondArg->Int32Value(vm);
989     }
990     ArkTSUtils::ParseJsColorAlpha(vm, thirdArg, color, Color::BLACK);
991     int32_t textDecorationStyle = static_cast<int32_t>(DEFAULT_DECORATION_STYLE);
992     if (fourthArg->IsInt()) {
993         textDecorationStyle = fourthArg->Int32Value(vm);
994     }
995     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputDecoration(
996         nativeNode, textInputDecoration, color.GetValue(), textDecorationStyle);
997     return panda::JSValueRef::Undefined(vm);
998 }
999 
ResetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)1000 ArkUINativeModuleValue TextInputBridge::ResetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
1001 {
1002     EcmaVM* vm = runtimeCallInfo->GetVM();
1003     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1004     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1005     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1006     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputDecoration(nativeNode);
1007     return panda::JSValueRef::Undefined(vm);
1008 }
1009 
SetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)1010 ArkUINativeModuleValue TextInputBridge::SetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
1011 {
1012     EcmaVM* vm = runtimeCallInfo->GetVM();
1013     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1014     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1015     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1016     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
1017     CalcDimension value;
1018     if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, false)) {
1019         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLetterSpacing(nativeNode);
1020     } else {
1021         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputLetterSpacing(
1022             nativeNode, value.Value(), static_cast<int>(value.Unit()));
1023     }
1024     return panda::JSValueRef::Undefined(vm);
1025 }
1026 
ResetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)1027 ArkUINativeModuleValue TextInputBridge::ResetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
1028 {
1029     EcmaVM* vm = runtimeCallInfo->GetVM();
1030     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1031     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1032     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1033     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLetterSpacing(nativeNode);
1034     return panda::JSValueRef::Undefined(vm);
1035 }
1036 
SetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)1037 ArkUINativeModuleValue TextInputBridge::SetLineHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
1038 {
1039     EcmaVM* vm = runtimeCallInfo->GetVM();
1040     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1041     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1042     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1043     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
1044     CalcDimension value;
1045     if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, true)) {
1046         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLineHeight(nativeNode);
1047     } else {
1048         if (value.IsNegative()) {
1049             value.Reset();
1050         }
1051         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputLineHeight(
1052             nativeNode, value.Value(), static_cast<int>(value.Unit()));
1053     }
1054     return panda::JSValueRef::Undefined(vm);
1055 }
1056 
ResetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)1057 ArkUINativeModuleValue TextInputBridge::ResetLineHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
1058 {
1059     EcmaVM* vm = runtimeCallInfo->GetVM();
1060     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1061     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1062     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1063     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLineHeight(nativeNode);
1064     return panda::JSValueRef::Undefined(vm);
1065 }
1066 
SetHalfLeading(ArkUIRuntimeCallInfo * runtimeCallInfo)1067 ArkUINativeModuleValue TextInputBridge::SetHalfLeading(ArkUIRuntimeCallInfo* runtimeCallInfo)
1068 {
1069     EcmaVM* vm = runtimeCallInfo->GetVM();
1070     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1071     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1072     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1073     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1074     if (secondArg->IsBoolean()) {
1075         uint32_t halfLeading = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
1076         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputHalfLeading(nativeNode, halfLeading);
1077     } else {
1078         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputHalfLeading(nativeNode);
1079     }
1080     return panda::JSValueRef::Undefined(vm);
1081 }
1082 
ResetHalfLeading(ArkUIRuntimeCallInfo * runtimeCallInfo)1083 ArkUINativeModuleValue TextInputBridge::ResetHalfLeading(ArkUIRuntimeCallInfo* runtimeCallInfo)
1084 {
1085     EcmaVM* vm = runtimeCallInfo->GetVM();
1086     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1087     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1088     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1089     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputHalfLeading(nativeNode);
1090     return panda::JSValueRef::Undefined(vm);
1091 }
1092 
SetKeyboardAppearance(ArkUIRuntimeCallInfo * runtimeCallInfo)1093 ArkUINativeModuleValue TextInputBridge::SetKeyboardAppearance(ArkUIRuntimeCallInfo* runtimeCallInfo)
1094 {
1095     EcmaVM* vm = runtimeCallInfo->GetVM();
1096     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1097     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1098     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1099     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1100     if (secondArg->IsNumber()) {
1101         uint32_t keyboardAppearance = secondArg->Uint32Value(vm);
1102         if (keyboardAppearance >= static_cast<uint32_t>(KeyboardAppearance::NONE_IMMERSIVE) &&
1103             keyboardAppearance <= static_cast<uint32_t>(KeyboardAppearance::DARK_IMMERSIVE)) {
1104             GetArkUINodeModifiers()->getTextInputModifier()->
1105                 setTextInputKeyboardAppearance(nativeNode, keyboardAppearance); // when input is valid
1106             return panda::JSValueRef::Undefined(vm);
1107         }
1108     }
1109     GetArkUINodeModifiers()->getTextInputModifier()->
1110         setTextInputKeyboardAppearance(nativeNode, static_cast<int32_t>(KeyboardAppearance::NONE_IMMERSIVE));
1111     return panda::JSValueRef::Undefined(vm);
1112 }
1113 
ResetKeyboardAppearance(ArkUIRuntimeCallInfo * runtimeCallInfo)1114 ArkUINativeModuleValue TextInputBridge::ResetKeyboardAppearance(ArkUIRuntimeCallInfo* runtimeCallInfo)
1115 {
1116     EcmaVM* vm = runtimeCallInfo->GetVM();
1117     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1118     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1119     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1120     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputKeyboardAppearance(nativeNode);
1121     return panda::JSValueRef::Undefined(vm);
1122 }
1123 
SetUnderlineColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1124 ArkUINativeModuleValue TextInputBridge::SetUnderlineColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1125 {
1126     EcmaVM *vm = runtimeCallInfo->GetVM();
1127     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1128     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1129     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1130     Local<JSValueRef> underlineColorArg = runtimeCallInfo->GetCallArgRef(1);  // 1: underlineColor value
1131     Local<JSValueRef> normalArg = runtimeCallInfo->GetCallArgRef(2);  // 2: normal value
1132     Local<JSValueRef> typingArg = runtimeCallInfo->GetCallArgRef(3);   // 3: typing value
1133     Local<JSValueRef> errorArg = runtimeCallInfo->GetCallArgRef(4); // 4: error value
1134     Local<JSValueRef> disableArg = runtimeCallInfo->GetCallArgRef(5); // 5: disable value
1135 
1136     Color underlineColor;
1137     if (!underlineColorArg->IsUndefined() && ArkTSUtils::ParseJsColorAlpha(vm, underlineColorArg, underlineColor)) {
1138         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputNormalUnderlineColor(
1139             nativeNode, underlineColor.GetValue());
1140     } else if (!normalArg->IsUndefined() || !typingArg->IsUndefined() ||
1141          !errorArg->IsUndefined() || !disableArg->IsUndefined()) {
1142         UserUnderlineColor userColor = UserUnderlineColor();
1143         Color typingColor;
1144         if (ArkTSUtils::ParseJsColorAlpha(vm, typingArg, typingColor)) {
1145             userColor.typing = typingColor;
1146         }
1147         Color normalColor;
1148         if (ArkTSUtils::ParseJsColorAlpha(vm, normalArg, normalColor)) {
1149             userColor.normal = normalColor;
1150         }
1151         Color errorColor;
1152         if (ArkTSUtils::ParseJsColorAlpha(vm, errorArg, errorColor)) {
1153             userColor.error = errorColor;
1154         }
1155         Color disableColor;
1156         if (ArkTSUtils::ParseJsColorAlpha(vm, disableArg, disableColor)) {
1157             userColor.disable = disableColor;
1158         }
1159         ArkUI_Uint32 values[ARG_GROUP_LENGTH];
1160         values[CALL_ARG_0] = userColor.typing->GetValue();
1161         values[CALL_ARG_1] = userColor.normal->GetValue();
1162         values[CALL_ARG_2] = userColor.error->GetValue();
1163         values[CALL_ARG_3] = userColor.disable->GetValue();
1164         ArkUI_Bool hasValues[ARG_GROUP_LENGTH];
1165         hasValues[CALL_ARG_0] = userColor.typing.has_value();
1166         hasValues[CALL_ARG_1] = userColor.normal.has_value();
1167         hasValues[CALL_ARG_2] = userColor.error.has_value();
1168         hasValues[CALL_ARG_3] = userColor.disable.has_value();
1169         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputUserUnderlineColor(
1170             nativeNode, values, hasValues, ARG_GROUP_LENGTH);
1171     } else {
1172         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputUserUnderlineColor(nativeNode);
1173     }
1174     return panda::JSValueRef::Undefined(vm);
1175 }
1176 
ResetUnderlineColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1177 ArkUINativeModuleValue TextInputBridge::ResetUnderlineColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1178 {
1179     EcmaVM *vm = runtimeCallInfo->GetVM();
1180     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1181     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1182     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1183     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputUserUnderlineColor(nativeNode);
1184     return panda::JSValueRef::Undefined(vm);
1185 }
1186 
SetMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1187 ArkUINativeModuleValue TextInputBridge::SetMinFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1188 {
1189     EcmaVM* vm = runtimeCallInfo->GetVM();
1190     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1191     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1192     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1193     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
1194     CalcDimension value;
1195     auto pipelineContext = PipelineBase::GetCurrentContext();
1196     CHECK_NULL_RETURN(pipelineContext, panda::NativePointerRef::New(vm, nullptr));
1197     auto theme = pipelineContext->GetTheme<TextFieldTheme>();
1198     CHECK_NULL_RETURN(theme, panda::NativePointerRef::New(vm, nullptr));
1199     if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, false)) {
1200         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputAdaptMinFontSize(nativeNode);
1201     } else {
1202         if (value.IsNegative()) {
1203             value = theme->GetTextStyle().GetAdaptMinFontSize();
1204         }
1205         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputAdaptMinFontSize(
1206             nativeNode, value.Value(), static_cast<int32_t>(value.Unit()));
1207     }
1208     return panda::JSValueRef::Undefined(vm);
1209 }
1210 
ResetMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1211 ArkUINativeModuleValue TextInputBridge::ResetMinFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1212 {
1213     EcmaVM* vm = runtimeCallInfo->GetVM();
1214     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1215     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1216     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1217     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputAdaptMinFontSize(nativeNode);
1218     return panda::JSValueRef::Undefined(vm);
1219 }
1220 
SetMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1221 ArkUINativeModuleValue TextInputBridge::SetMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1222 {
1223     EcmaVM* vm = runtimeCallInfo->GetVM();
1224     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1225     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1226     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1227     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
1228     CalcDimension value;
1229     auto pipelineContext = PipelineBase::GetCurrentContext();
1230     CHECK_NULL_RETURN(pipelineContext, panda::NativePointerRef::New(vm, nullptr));
1231     auto theme = pipelineContext->GetTheme<TextFieldTheme>();
1232     CHECK_NULL_RETURN(theme, panda::NativePointerRef::New(vm, nullptr));
1233     if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, false)) {
1234         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputAdaptMaxFontSize(nativeNode);
1235     } else {
1236         if (value.IsNegative()) {
1237             value = theme->GetTextStyle().GetAdaptMaxFontSize();
1238         }
1239         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputAdaptMaxFontSize(
1240             nativeNode, value.Value(), static_cast<int32_t>(value.Unit()));
1241     }
1242     return panda::JSValueRef::Undefined(vm);
1243 }
1244 
SetMinFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)1245 ArkUINativeModuleValue TextInputBridge::SetMinFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
1246 {
1247     EcmaVM* vm = runtimeCallInfo->GetVM();
1248     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1249     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1250     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1251     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1252     double minFontScale;
1253     if (!ArkTSUtils::ParseJsDouble(vm, secondArg, minFontScale)) {
1254         return panda::JSValueRef::Undefined(vm);
1255     }
1256     if (LessOrEqual(minFontScale, 0.0f)) {
1257         minFontScale = 0.0f;
1258     } else if (GreatOrEqual(minFontScale, 1.0f)) {
1259         minFontScale = 1.0f;
1260     }
1261     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputMinFontScale(
1262         nativeNode, static_cast<float>(minFontScale));
1263     return panda::JSValueRef::Undefined(vm);
1264 }
1265 
ResetMinFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)1266 ArkUINativeModuleValue TextInputBridge::ResetMinFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
1267 {
1268     EcmaVM* vm = runtimeCallInfo->GetVM();
1269     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1270     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1271     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1272     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMinFontScale(nativeNode);
1273     return panda::JSValueRef::Undefined(vm);
1274 }
1275 
SetMaxFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)1276 ArkUINativeModuleValue TextInputBridge::SetMaxFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
1277 {
1278     EcmaVM* vm = runtimeCallInfo->GetVM();
1279     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1280     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1281     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1282     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1283     double maxFontScale;
1284     if (!ArkTSUtils::ParseJsDouble(vm, secondArg, maxFontScale)) {
1285         return panda::JSValueRef::Undefined(vm);
1286     }
1287     if (LessOrEqual(maxFontScale, 1.0f)) {
1288         maxFontScale = 1.0f;
1289     }
1290     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputMaxFontScale(
1291         nativeNode, static_cast<float>(maxFontScale));
1292     return panda::JSValueRef::Undefined(vm);
1293 }
1294 
ResetMaxFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)1295 ArkUINativeModuleValue TextInputBridge::ResetMaxFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
1296 {
1297     EcmaVM* vm = runtimeCallInfo->GetVM();
1298     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1299     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1300     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1301     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxFontScale(nativeNode);
1302     return panda::JSValueRef::Undefined(vm);
1303 }
1304 
SetWordBreak(ArkUIRuntimeCallInfo * runtimeCallInfo)1305 ArkUINativeModuleValue TextInputBridge::SetWordBreak(ArkUIRuntimeCallInfo* runtimeCallInfo)
1306 {
1307     EcmaVM* vm = runtimeCallInfo->GetVM();
1308     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1309     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1310     Local<JSValueRef> workBreakArg = runtimeCallInfo->GetCallArgRef(1);
1311     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1312     if (workBreakArg->IsNull() || workBreakArg->IsUndefined() || !workBreakArg->IsNumber()) {
1313         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputWordBreak(nativeNode);
1314         return panda::JSValueRef::Undefined(vm);
1315     }
1316     uint32_t wordBreak = workBreakArg->Uint32Value(vm);
1317     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputWordBreak(nativeNode, wordBreak);
1318     return panda::JSValueRef::Undefined(vm);
1319 }
1320 
ResetWordBreak(ArkUIRuntimeCallInfo * runtimeCallInfo)1321 ArkUINativeModuleValue TextInputBridge::ResetWordBreak(ArkUIRuntimeCallInfo* runtimeCallInfo)
1322 {
1323     EcmaVM* vm = runtimeCallInfo->GetVM();
1324     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1325     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1326     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1327     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputWordBreak(nativeNode);
1328     return panda::JSValueRef::Undefined(vm);
1329 }
1330 
SetLineBreakStrategy(ArkUIRuntimeCallInfo * runtimeCallInfo)1331 ArkUINativeModuleValue TextInputBridge::SetLineBreakStrategy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1332 {
1333     EcmaVM* vm = runtimeCallInfo->GetVM();
1334     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1335     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1336     Local<JSValueRef> lineBreakStrategyArg = runtimeCallInfo->GetCallArgRef(1);
1337     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1338     if (lineBreakStrategyArg->IsNull() || lineBreakStrategyArg->IsUndefined() || !lineBreakStrategyArg->IsNumber()) {
1339         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLineBreakStrategy(nativeNode);
1340         return panda::JSValueRef::Undefined(vm);
1341     }
1342     uint32_t lineBreakStrategy = lineBreakStrategyArg->Uint32Value(vm);
1343     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputLineBreakStrategy(nativeNode, lineBreakStrategy);
1344     return panda::JSValueRef::Undefined(vm);
1345 }
1346 
ResetLineBreakStrategy(ArkUIRuntimeCallInfo * runtimeCallInfo)1347 ArkUINativeModuleValue TextInputBridge::ResetLineBreakStrategy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1348 {
1349     EcmaVM* vm = runtimeCallInfo->GetVM();
1350     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1351     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1352     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1353     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLineBreakStrategy(nativeNode);
1354     return panda::JSValueRef::Undefined(vm);
1355 }
1356 
ResetMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1357 ArkUINativeModuleValue TextInputBridge::ResetMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1358 {
1359     EcmaVM* vm = runtimeCallInfo->GetVM();
1360     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1361     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1362     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1363     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputAdaptMaxFontSize(nativeNode);
1364     return panda::JSValueRef::Undefined(vm);
1365 }
1366 
SetHeightAdaptivePolicy(ArkUIRuntimeCallInfo * runtimeCallInfo)1367 ArkUINativeModuleValue TextInputBridge::SetHeightAdaptivePolicy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1368 {
1369     EcmaVM* vm = runtimeCallInfo->GetVM();
1370     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1371     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1372     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1373     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
1374     int32_t value = valueArg->ToNumber(vm)->Value();
1375     if (value < 0 || value >= static_cast<int32_t>(HEIGHT_ADAPTIVE_POLICY.size())) {
1376         value = 0;
1377     }
1378     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputHeightAdaptivePolicy(nativeNode, value);
1379     return panda::JSValueRef::Undefined(vm);
1380 }
1381 
ResetHeightAdaptivePolicy(ArkUIRuntimeCallInfo * runtimeCallInfo)1382 ArkUINativeModuleValue TextInputBridge::ResetHeightAdaptivePolicy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1383 {
1384     EcmaVM* vm = runtimeCallInfo->GetVM();
1385     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1386     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1387     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1388     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputHeightAdaptivePolicy(nativeNode);
1389     return panda::JSValueRef::Undefined(vm);
1390 }
1391 
SetTextOverflow(ArkUIRuntimeCallInfo * runtimeCallInfo)1392 ArkUINativeModuleValue TextInputBridge::SetTextOverflow(ArkUIRuntimeCallInfo* runtimeCallInfo)
1393 {
1394     EcmaVM* vm = runtimeCallInfo->GetVM();
1395     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1396     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1397     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1398     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1399     int32_t value;
1400     if (secondArg->IsUndefined()) {
1401         value = DEFAULT_OVERFLOW;
1402     } else if (secondArg->IsNumber()) {
1403         value = secondArg->Int32Value(vm);
1404     } else {
1405         value = DEFAULT_OVERFLOW;
1406     }
1407     if (value < 0 || value >= static_cast<int32_t>(TEXT_OVERFLOWS.size())) {
1408         value = DEFAULT_OVERFLOW;
1409     }
1410     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextOverflow(nativeNode, value);
1411     return panda::JSValueRef::Undefined(vm);
1412 }
1413 
ResetTextOverflow(ArkUIRuntimeCallInfo * runtimeCallInfo)1414 ArkUINativeModuleValue TextInputBridge::ResetTextOverflow(ArkUIRuntimeCallInfo* runtimeCallInfo)
1415 {
1416     EcmaVM* vm = runtimeCallInfo->GetVM();
1417     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1418     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1419     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1420     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputTextOverflow(nativeNode);
1421     return panda::JSValueRef::Undefined(vm);
1422 }
1423 
SetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)1424 ArkUINativeModuleValue TextInputBridge::SetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
1425 {
1426     EcmaVM* vm = runtimeCallInfo->GetVM();
1427     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1428     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1429     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1430     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1431     CalcDimension indent;
1432     if (!ArkTSUtils::ParseJsDimensionNG(vm, secondArg, indent, DimensionUnit::VP, true)) {
1433         indent.Reset();
1434     }
1435 
1436     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextIndent(
1437         nativeNode, indent.Value(), static_cast<int8_t>(indent.Unit()));
1438     return panda::JSValueRef::Undefined(vm);
1439 }
1440 
ResetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)1441 ArkUINativeModuleValue TextInputBridge::ResetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
1442 {
1443     EcmaVM* vm = runtimeCallInfo->GetVM();
1444     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1445     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1446     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1447     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputTextIndent(nativeNode);
1448     return panda::JSValueRef::Undefined(vm);
1449 }
1450 
ConvertStrToCancelButtonStyle(const std::string & value)1451 static CancelButtonStyle ConvertStrToCancelButtonStyle(const std::string& value)
1452 {
1453     if (value == "CONSTANT") {
1454         return CancelButtonStyle::CONSTANT;
1455     } else if (value == "INVISIBLE") {
1456         return CancelButtonStyle::INVISIBLE;
1457     } else {
1458         return CancelButtonStyle::INPUT;
1459     }
1460 }
1461 
SetCancelButton(ArkUIRuntimeCallInfo * runtimeCallInfo)1462 ArkUINativeModuleValue TextInputBridge::SetCancelButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
1463 {
1464     EcmaVM* vm = runtimeCallInfo->GetVM();
1465     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1466     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
1467     Local<JSValueRef> styleArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
1468 
1469     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1470     auto container = Container::Current();
1471     CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
1472     auto pipelineContext = container->GetPipelineContext();
1473     CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
1474     auto themeManager = pipelineContext->GetThemeManager();
1475     CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
1476     auto theme = themeManager->GetTheme<TextFieldTheme>();
1477     CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
1478 
1479     int32_t style = static_cast<int32_t>(theme->GetCancelButtonStyle());
1480     if (styleArg->IsString(vm)) {
1481         CancelButtonStyle cancelButtonStyle = ConvertStrToCancelButtonStyle(styleArg->ToString(vm)->ToString(vm));
1482         style = static_cast<int32_t>(cancelButtonStyle);
1483     }
1484 
1485     auto info = Framework::JsiCallbackInfo(runtimeCallInfo);
1486     auto iconJsVal = Framework::JsiRef<Framework::JsiValue>::Cast(info[CALL_ARG_2]);
1487     // set default icon
1488     if (iconJsVal->IsUndefined() || iconJsVal->IsNull() || !iconJsVal->IsObject()) {
1489         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCancelSymbolIcon(nativeNode,
1490             style, nullptr);
1491         return panda::JSValueRef::Undefined(vm);
1492     }
1493 
1494     auto iconParam = Framework::JsiRef<Framework::JsiObject>::Cast(iconJsVal);
1495     bool isSymbolIcon = iconParam->HasProperty("fontColor"); // only SymbolGlyph has fontColor property
1496     if (isSymbolIcon) {
1497         std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol = nullptr;
1498         Framework::JSViewAbstract::SetSymbolOptionApply(runtimeCallInfo, iconSymbol, iconParam);
1499         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCancelSymbolIcon(nativeNode,
1500             style, reinterpret_cast<void*>(&iconSymbol));
1501         return panda::JSValueRef::Undefined(vm);
1502     }
1503 
1504     SetCancelButtonImage(runtimeCallInfo, style);
1505     return panda::JSValueRef::Undefined(vm);
1506 }
1507 
SetCancelButtonImage(ArkUIRuntimeCallInfo * runtimeCallInfo,int32_t style)1508 void TextInputBridge::SetCancelButtonImage(ArkUIRuntimeCallInfo* runtimeCallInfo, int32_t style)
1509 {
1510     EcmaVM* vm = runtimeCallInfo->GetVM();
1511     CHECK_NULL_VOID(vm);
1512     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
1513     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1514     auto container = Container::Current();
1515     CHECK_NULL_VOID(container);
1516     auto pipelineContext = container->GetPipelineContext();
1517     CHECK_NULL_VOID(pipelineContext);
1518     auto themeManager = pipelineContext->GetThemeManager();
1519     CHECK_NULL_VOID(themeManager);
1520     auto theme = themeManager->GetTheme<TextFieldTheme>();
1521     CHECK_NULL_VOID(theme);
1522 
1523     auto info = Framework::JsiCallbackInfo(runtimeCallInfo);
1524     auto iconJsVal = Framework::JsiRef<Framework::JsiValue>::Cast(info[CALL_ARG_2]);
1525     auto iconParam = Framework::JsiRef<Framework::JsiObject>::Cast(iconJsVal);
1526     auto sizeArg = iconParam->GetProperty("size");
1527     auto colorArg = iconParam->GetProperty("color");
1528     auto srcArg = iconParam->GetProperty("src");
1529 
1530     CalcDimension iconSize;
1531     if (!sizeArg->IsUndefined() && !sizeArg->IsNull() &&
1532         Framework::JSViewAbstract::ParseJsDimensionVpNG(sizeArg, iconSize, false)) {
1533         if (LessNotEqual(iconSize.Value(), 0.0) || iconSize.Unit() == DimensionUnit::PERCENT) {
1534             iconSize = theme->GetCancelIconSize();
1535         }
1536     } else {
1537         iconSize = theme->GetCancelIconSize();
1538     }
1539 
1540     Color value;
1541     uint32_t color;
1542     if (!colorArg->IsUndefined() && !colorArg->IsNull() &&
1543         Framework::JSViewAbstract::ParseJsColor(colorArg, value)) {
1544         color = value.GetValue();
1545     } else {
1546         color = theme->GetCancelButtonIconColor().GetValue();
1547     }
1548 
1549     std::string srcStr;
1550     if (srcArg->IsUndefined() || srcArg->IsNull() ||
1551         !Framework::JSViewAbstract::ParseJsMedia(srcArg, srcStr)) {
1552         srcStr = "";
1553     }
1554 
1555     struct ArkUISizeType size = { iconSize.Value(), static_cast<int8_t>(iconSize.Unit()), nullptr };
1556     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCancelButton(nativeNode,
1557         style, &size, color, srcStr.c_str());
1558 }
1559 
ResetCancelButton(ArkUIRuntimeCallInfo * runtimeCallInfo)1560 ArkUINativeModuleValue TextInputBridge::ResetCancelButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
1561 {
1562     EcmaVM* vm = runtimeCallInfo->GetVM();
1563     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1564     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1565     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1566     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCancelButton(nativeNode);
1567     return panda::JSValueRef::Undefined(vm);
1568 }
1569 
SetSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)1570 ArkUINativeModuleValue TextInputBridge::SetSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1571 {
1572     EcmaVM* vm = runtimeCallInfo->GetVM();
1573     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1574     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1575     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1576 
1577     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1578     if (secondArg->IsBoolean()) {
1579         uint32_t enableSelectAll = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
1580         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputSelectAll(nativeNode, enableSelectAll);
1581     } else {
1582         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectAll(nativeNode);
1583     }
1584     return panda::JSValueRef::Undefined(vm);
1585 }
1586 
ResetSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)1587 ArkUINativeModuleValue TextInputBridge::ResetSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1588 {
1589     EcmaVM* vm = runtimeCallInfo->GetVM();
1590     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1591     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1592     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1593     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectAll(nativeNode);
1594     return panda::JSValueRef::Undefined(vm);
1595 }
1596 
SetShowCounter(ArkUIRuntimeCallInfo * runtimeCallInfo)1597 ArkUINativeModuleValue TextInputBridge::SetShowCounter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1598 {
1599     EcmaVM *vm = runtimeCallInfo->GetVM();
1600     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1601     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
1602     Local<JSValueRef> showCounterArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
1603     Local<JSValueRef> highlightBorderArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
1604     Local<JSValueRef> thresholdArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_3);
1605     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1606     auto showCounter = false;
1607     if (showCounterArg->IsBoolean()) {
1608         showCounter = showCounterArg->BooleaValue(vm);
1609     }
1610     auto highlightBorder = true;
1611     if (highlightBorderArg->IsBoolean()) {
1612         highlightBorder = highlightBorderArg->BooleaValue(vm);
1613     }
1614     int32_t thresholdValue = DEFAULT_MODE;
1615     if (thresholdArg->IsNumber()) {
1616         thresholdValue = thresholdArg->Int32Value(vm);
1617         if (thresholdValue < MINI_VALID_VALUE || thresholdValue > MAX_VALID_VALUE) {
1618             thresholdValue = ILLEGAL_VALUE;
1619             showCounter = false;
1620         }
1621     }
1622     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowCounter(
1623         nativeNode, static_cast<uint32_t>(showCounter), thresholdValue, static_cast<uint32_t>(highlightBorder));
1624     return panda::JSValueRef::Undefined(vm);
1625 }
1626 
ResetShowCounter(ArkUIRuntimeCallInfo * runtimeCallInfo)1627 ArkUINativeModuleValue TextInputBridge::ResetShowCounter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1628 {
1629     EcmaVM* vm = runtimeCallInfo->GetVM();
1630     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1631     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1632     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1633     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowCounter(nativeNode);
1634     return panda::JSValueRef::Undefined(vm);
1635 }
1636 
SetOnEditChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1637 ArkUINativeModuleValue TextInputBridge::SetOnEditChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1638 {
1639     EcmaVM *vm = runtimeCallInfo->GetVM();
1640     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1641     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1642     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1643     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1644     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1645     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1646     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1647         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnEditChange(nativeNode);
1648         return panda::JSValueRef::Undefined(vm);
1649     }
1650     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1651     std::function<void(bool)> callback = [vm, frameNode,
1652         func = panda::CopyableGlobal(vm, func)](bool isInEditStatus) {
1653         panda::LocalScope pandaScope(vm);
1654         panda::TryCatch trycatch(vm);
1655         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1656         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1657             panda::BooleanRef::New(vm, isInEditStatus) };
1658         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1659     };
1660     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnEditChange(
1661         nativeNode, reinterpret_cast<void*>(&callback));
1662     return panda::JSValueRef::Undefined(vm);
1663 }
1664 
ResetOnEditChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1665 ArkUINativeModuleValue TextInputBridge::ResetOnEditChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1666 {
1667     EcmaVM* vm = runtimeCallInfo->GetVM();
1668     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1669     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1670     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1671     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnEditChange(nativeNode);
1672     return panda::JSValueRef::Undefined(vm);
1673 }
1674 
SetInputFilter(ArkUIRuntimeCallInfo * runtimeCallInfo)1675 ArkUINativeModuleValue TextInputBridge::SetInputFilter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1676 {
1677     EcmaVM *vm = runtimeCallInfo->GetVM();
1678     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1679     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
1680     Local<JSValueRef> inputFilterArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
1681     Local<JSValueRef> errorCallbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
1682     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1683     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1684     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1685     if (inputFilterArg->IsUndefined() || inputFilterArg->IsNull() || !inputFilterArg->IsString(vm)) {
1686         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFilter(nativeNode);
1687         return panda::JSValueRef::Undefined(vm);
1688     }
1689     std::string inputFilter = inputFilterArg->ToString(vm)->ToString(vm);
1690     if (errorCallbackArg->IsUndefined() || errorCallbackArg->IsNull() ||
1691         !errorCallbackArg->IsFunction(vm)) {
1692         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFilter(nativeNode, inputFilter.c_str(), nullptr);
1693     } else {
1694         panda::Local<panda::FunctionRef> func = errorCallbackArg->ToObject(vm);
1695         std::function<void(const std::u16string&)> callback = [vm, frameNode,
1696             func = panda::CopyableGlobal(vm, func)](const std::u16string& info) {
1697             panda::LocalScope pandaScope(vm);
1698             panda::TryCatch trycatch(vm);
1699             PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1700             panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1701                 panda::StringRef::NewFromUtf16(vm, info.c_str()) };
1702             func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1703         };
1704         GetArkUINodeModifiers()->getTextInputModifier()->
1705             setTextInputFilter(nativeNode, inputFilter.c_str(), reinterpret_cast<void*>(&callback));
1706     }
1707     return panda::JSValueRef::Undefined(vm);
1708 }
1709 
ResetInputFilter(ArkUIRuntimeCallInfo * runtimeCallInfo)1710 ArkUINativeModuleValue TextInputBridge::ResetInputFilter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1711 {
1712     EcmaVM* vm = runtimeCallInfo->GetVM();
1713     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1714     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1715     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1716     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFilter(nativeNode);
1717     return panda::JSValueRef::Undefined(vm);
1718 }
1719 
SetOnSubmit(ArkUIRuntimeCallInfo * runtimeCallInfo)1720 ArkUINativeModuleValue TextInputBridge::SetOnSubmit(ArkUIRuntimeCallInfo* runtimeCallInfo)
1721 {
1722     EcmaVM *vm = runtimeCallInfo->GetVM();
1723     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1724     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1725     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1726     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1727     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1728     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1729     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1730         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnSubmitWithEvent(nativeNode);
1731         return panda::JSValueRef::Undefined(vm);
1732     }
1733     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1734     std::function<void(int32_t, NG::TextFieldCommonEvent&)> callback = [vm, frameNode,
1735         func = panda::CopyableGlobal(vm, func)](int32_t key, NG::TextFieldCommonEvent& event) {
1736         panda::LocalScope pandaScope(vm);
1737         panda::TryCatch trycatch(vm);
1738         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1739         const char* keys[] = { "text", "keepEditableState" };
1740         Local<JSValueRef> values[] = { panda::StringRef::NewFromUtf16(vm, event.GetText().c_str()),
1741             panda::FunctionRef::New(vm, Framework::JSTextField::JsKeepEditableState) };
1742         auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1743         eventObject->SetNativePointerFieldCount(vm, 1);
1744         eventObject->SetNativePointerField(vm, 0, static_cast<void*>(&event));
1745         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1746             panda::IntegerRef::New(vm, key), eventObject };
1747         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1748     };
1749     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnSubmitWithEvent(
1750         nativeNode, reinterpret_cast<void*>(&callback));
1751     return panda::JSValueRef::Undefined(vm);
1752 }
1753 
ResetOnSubmit(ArkUIRuntimeCallInfo * runtimeCallInfo)1754 ArkUINativeModuleValue TextInputBridge::ResetOnSubmit(ArkUIRuntimeCallInfo* runtimeCallInfo)
1755 {
1756     EcmaVM* vm = runtimeCallInfo->GetVM();
1757     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1758     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1759     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1760     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnSubmitWithEvent(nativeNode);
1761     return panda::JSValueRef::Undefined(vm);
1762 }
1763 
SetOnWillChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1764 ArkUINativeModuleValue TextInputBridge::SetOnWillChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1765 {
1766     EcmaVM *vm = runtimeCallInfo->GetVM();
1767     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1768     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1769     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1770     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1771     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1772     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1773     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1774         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnWillChange(nativeNode);
1775         return panda::JSValueRef::Undefined(vm);
1776     }
1777     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1778     std::function<bool(const ChangeValueInfo&)> callback = [vm, frameNode,
1779         func = panda::CopyableGlobal(vm, func)](const ChangeValueInfo& changeValueInfo) -> bool {
1780         panda::LocalScope pandaScope(vm);
1781         panda::TryCatch trycatch(vm);
1782         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1783         auto eventObject = CommonBridge::CreateChangeValueInfoObj(vm, changeValueInfo);
1784         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
1785         auto ret = func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1786         if (ret->IsBoolean()) {
1787             return ret->ToBoolean(vm)->Value();
1788         }
1789         return true;
1790     };
1791     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnWillChange(nativeNode,
1792         reinterpret_cast<intptr_t>(&callback));
1793     return panda::JSValueRef::Undefined(vm);
1794 }
1795 
ResetOnWillChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1796 ArkUINativeModuleValue TextInputBridge::ResetOnWillChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1797 {
1798     EcmaVM* vm = runtimeCallInfo->GetVM();
1799     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1800     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1801     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1802     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnWillChange(nativeNode);
1803     return panda::JSValueRef::Undefined(vm);
1804 }
1805 
SetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1806 ArkUINativeModuleValue TextInputBridge::SetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1807 {
1808     EcmaVM *vm = runtimeCallInfo->GetVM();
1809     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1810     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1811     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1812     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1813     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1814     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1815     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1816         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnChange(nativeNode);
1817         return panda::JSValueRef::Undefined(vm);
1818     }
1819     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1820     std::function<void(const ChangeValueInfo&)> callback = [vm, frameNode,
1821         func = panda::CopyableGlobal(vm, func)](const ChangeValueInfo& changeValueInfo) {
1822         panda::LocalScope pandaScope(vm);
1823         panda::TryCatch trycatch(vm);
1824         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1825         auto eventObject = CommonBridge::CreateChangeValueInfoObj(vm, changeValueInfo);
1826         auto contentObj = eventObject->Get(vm, "content");
1827         auto previewTextObj = eventObject->Get(vm, "previewText");
1828         auto optionsObj = eventObject->Get(vm, "options");
1829         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_3] = { contentObj, previewTextObj, optionsObj };
1830         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_3);
1831     };
1832     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnChange(
1833         nativeNode, reinterpret_cast<void*>(&callback));
1834     return panda::JSValueRef::Undefined(vm);
1835 }
1836 
ResetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1837 ArkUINativeModuleValue TextInputBridge::ResetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1838 {
1839     EcmaVM* vm = runtimeCallInfo->GetVM();
1840     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1841     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1842     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1843     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnChange(nativeNode);
1844     return panda::JSValueRef::Undefined(vm);
1845 }
1846 
SetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1847 ArkUINativeModuleValue TextInputBridge::SetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1848 {
1849     EcmaVM *vm = runtimeCallInfo->GetVM();
1850     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1851     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1852     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1853     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1854     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1855     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1856     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1857         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnTextSelectionChange(nativeNode);
1858         return panda::JSValueRef::Undefined(vm);
1859     }
1860     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1861     std::function<void(int32_t, int32_t)> callback = [vm, frameNode,
1862         func = panda::CopyableGlobal(vm, func)](int32_t selectionStart, int selectionEnd) {
1863         panda::LocalScope pandaScope(vm);
1864         panda::TryCatch trycatch(vm);
1865         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1866         panda::Local<panda::NumberRef> startParam = panda::NumberRef::New(vm, selectionStart);
1867         panda::Local<panda::NumberRef> endParam = panda::NumberRef::New(vm, selectionEnd);
1868         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = { startParam, endParam };
1869         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1870     };
1871     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnTextSelectionChange(
1872         nativeNode, reinterpret_cast<void*>(&callback));
1873     return panda::JSValueRef::Undefined(vm);
1874 }
1875 
ResetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1876 ArkUINativeModuleValue TextInputBridge::ResetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1877 {
1878     EcmaVM* vm = runtimeCallInfo->GetVM();
1879     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1880     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1881     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1882     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnTextSelectionChange(nativeNode);
1883     return panda::JSValueRef::Undefined(vm);
1884 }
1885 
SetOnContentScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1886 ArkUINativeModuleValue TextInputBridge::SetOnContentScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1887 {
1888     EcmaVM *vm = runtimeCallInfo->GetVM();
1889     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1890     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1891     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1892     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1893     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1894     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1895     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1896         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnContentScroll(nativeNode);
1897         return panda::JSValueRef::Undefined(vm);
1898     }
1899     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1900     std::function<void(float, float)> callback = [vm, frameNode,
1901         func = panda::CopyableGlobal(vm, func)](float totalOffsetX, float totalOffsetY) {
1902         panda::LocalScope pandaScope(vm);
1903         panda::TryCatch trycatch(vm);
1904         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1905         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1906             panda::NumberRef::New(vm, totalOffsetX), panda::NumberRef::New(vm, totalOffsetY) };
1907         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1908     };
1909     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnContentScroll(
1910         nativeNode, reinterpret_cast<void*>(&callback));
1911     return panda::JSValueRef::Undefined(vm);
1912 }
1913 
ResetOnContentScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1914 ArkUINativeModuleValue TextInputBridge::ResetOnContentScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1915 {
1916     EcmaVM* vm = runtimeCallInfo->GetVM();
1917     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1918     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1919     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1920     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnContentScroll(nativeNode);
1921     return panda::JSValueRef::Undefined(vm);
1922 }
1923 
SetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1924 ArkUINativeModuleValue TextInputBridge::SetOnCopy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1925 {
1926     EcmaVM *vm = runtimeCallInfo->GetVM();
1927     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1928     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1929     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1930     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1931     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1932     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1933     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1934         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnCopy(nativeNode);
1935         return panda::JSValueRef::Undefined(vm);
1936     }
1937     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1938     std::function<void(const std::u16string&)> callback = [vm, frameNode,
1939         func = panda::CopyableGlobal(vm, func)](const std::u16string& copyStr) {
1940         panda::LocalScope pandaScope(vm);
1941         panda::TryCatch trycatch(vm);
1942         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1943         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1944             panda::StringRef::NewFromUtf16(vm, copyStr.c_str()) };
1945         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1946     };
1947     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnCopy(nativeNode, reinterpret_cast<void*>(&callback));
1948     return panda::JSValueRef::Undefined(vm);
1949 }
1950 
ResetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1951 ArkUINativeModuleValue TextInputBridge::ResetOnCopy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1952 {
1953     EcmaVM* vm = runtimeCallInfo->GetVM();
1954     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1955     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1956     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1957     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnCopy(nativeNode);
1958     return panda::JSValueRef::Undefined(vm);
1959 }
1960 
SetOnCut(ArkUIRuntimeCallInfo * runtimeCallInfo)1961 ArkUINativeModuleValue TextInputBridge::SetOnCut(ArkUIRuntimeCallInfo* runtimeCallInfo)
1962 {
1963     EcmaVM *vm = runtimeCallInfo->GetVM();
1964     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1965     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1966     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1967     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1968     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1969     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1970     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1971         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnCut(nativeNode);
1972         return panda::JSValueRef::Undefined(vm);
1973     }
1974     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1975     std::function<void(const std::u16string&)> callback = [vm, frameNode,
1976         func = panda::CopyableGlobal(vm, func)](const std::u16string& cutStr) {
1977         panda::LocalScope pandaScope(vm);
1978         panda::TryCatch trycatch(vm);
1979         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1980         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1981             panda::StringRef::NewFromUtf16(vm, cutStr.c_str()) };
1982         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1983     };
1984     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnCut(nativeNode, reinterpret_cast<void*>(&callback));
1985     return panda::JSValueRef::Undefined(vm);
1986 }
1987 
ResetOnCut(ArkUIRuntimeCallInfo * runtimeCallInfo)1988 ArkUINativeModuleValue TextInputBridge::ResetOnCut(ArkUIRuntimeCallInfo* runtimeCallInfo)
1989 {
1990     EcmaVM* vm = runtimeCallInfo->GetVM();
1991     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1992     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1993     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1994     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnCut(nativeNode);
1995     return panda::JSValueRef::Undefined(vm);
1996 }
1997 
SetOnPaste(ArkUIRuntimeCallInfo * runtimeCallInfo)1998 ArkUINativeModuleValue TextInputBridge::SetOnPaste(ArkUIRuntimeCallInfo* runtimeCallInfo)
1999 {
2000     EcmaVM *vm = runtimeCallInfo->GetVM();
2001     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2002     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2003     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
2004     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2005     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
2006     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
2007     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
2008         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnPaste(nativeNode);
2009         return panda::JSValueRef::Undefined(vm);
2010     }
2011     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
2012     std::function<void(const std::u16string&, NG::TextCommonEvent&)> callback = [vm, frameNode,
2013         func = panda::CopyableGlobal(vm, func)](const std::u16string& val, NG::TextCommonEvent& info) {
2014         panda::LocalScope pandaScope(vm);
2015         panda::TryCatch trycatch(vm);
2016         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
2017         auto eventObject = panda::ObjectRef::New(vm);
2018         eventObject->SetNativePointerFieldCount(vm, 1);
2019         eventObject->Set(vm, panda::StringRef::NewFromUtf8(vm, "preventDefault"),
2020             panda::FunctionRef::New(vm, Framework::JsPreventDefault));
2021         eventObject->SetNativePointerField(vm, 0, static_cast<void*>(&info));
2022         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
2023             panda::StringRef::NewFromUtf16(vm, val.c_str()), eventObject };
2024         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
2025     };
2026     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnPaste(
2027         nativeNode, reinterpret_cast<void*>(&callback));
2028     return panda::JSValueRef::Undefined(vm);
2029 }
2030 
ResetOnPaste(ArkUIRuntimeCallInfo * runtimeCallInfo)2031 ArkUINativeModuleValue TextInputBridge::ResetOnPaste(ArkUIRuntimeCallInfo* runtimeCallInfo)
2032 {
2033     EcmaVM* vm = runtimeCallInfo->GetVM();
2034     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2035     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2036     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2037     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnPaste(nativeNode);
2038     return panda::JSValueRef::Undefined(vm);
2039 }
2040 
SetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)2041 ArkUINativeModuleValue TextInputBridge::SetPadding(ArkUIRuntimeCallInfo *runtimeCallInfo)
2042 {
2043     EcmaVM *vm = runtimeCallInfo->GetVM();
2044     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2045     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2046     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2047     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
2048     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
2049     Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_3);
2050     Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_4);
2051 
2052     struct ArkUISizeType top = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
2053     struct ArkUISizeType right = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
2054     struct ArkUISizeType bottom = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
2055     struct ArkUISizeType left = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
2056 
2057     CalcDimension topDimen(0, DimensionUnit::VP);
2058     CalcDimension rightDimen(0, DimensionUnit::VP);
2059     CalcDimension bottomDimen(0, DimensionUnit::VP);
2060     CalcDimension leftDimen(0, DimensionUnit::VP);
2061 
2062     bool isLengthMetrics = false;
2063     if (secondArg->IsObject(vm)) {
2064         isLengthMetrics |= ParseLocalizedPadding(vm, secondArg, topDimen, top);
2065     }
2066     if (thirdArg->IsObject(vm)) {
2067         isLengthMetrics |= ParseLocalizedPadding(vm, thirdArg, rightDimen, right);
2068     }
2069     if (forthArg->IsObject(vm)) {
2070         isLengthMetrics |= ParseLocalizedPadding(vm, forthArg, bottomDimen, bottom);
2071     }
2072     if (fifthArg->IsObject(vm)) {
2073         isLengthMetrics |= ParseLocalizedPadding(vm, fifthArg, leftDimen, left);
2074     }
2075 
2076     if (isLengthMetrics) {
2077         auto isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft();
2078         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPadding(nativeNode,
2079             &top,
2080             isRightToLeft ? &left : &right,
2081             &bottom,
2082             isRightToLeft ? &right : &left);
2083         return panda::JSValueRef::Undefined(vm);
2084     }
2085 
2086     ArkTSUtils::ParsePadding(vm, secondArg, topDimen, top);
2087     ArkTSUtils::ParsePadding(vm, thirdArg, rightDimen, right);
2088     ArkTSUtils::ParsePadding(vm, forthArg, bottomDimen, bottom);
2089     ArkTSUtils::ParsePadding(vm, fifthArg, leftDimen, left);
2090     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPadding(nativeNode, &top, &right, &bottom, &left);
2091     return panda::JSValueRef::Undefined(vm);
2092 }
2093 
ResetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)2094 ArkUINativeModuleValue TextInputBridge::ResetPadding(ArkUIRuntimeCallInfo* runtimeCallInfo)
2095 {
2096     EcmaVM *vm = runtimeCallInfo->GetVM();
2097     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2098     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2099     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2100     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPadding(nativeNode);
2101     return panda::JSValueRef::Undefined(vm);
2102 }
2103 
SetContentType(ArkUIRuntimeCallInfo * runtimeCallInfo)2104 ArkUINativeModuleValue TextInputBridge::SetContentType(ArkUIRuntimeCallInfo *runtimeCallInfo)
2105 {
2106     EcmaVM *vm = runtimeCallInfo->GetVM();
2107     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2108     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2109     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2110     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2111 
2112     if (secondArg->IsNumber()) {
2113         uint32_t value = secondArg->Uint32Value(vm);
2114         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputContentType(nativeNode, value);
2115     } else {
2116         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputContentType(nativeNode);
2117     }
2118     return panda::JSValueRef::Undefined(vm);
2119 }
2120 
ResetContentType(ArkUIRuntimeCallInfo * runtimeCallInfo)2121 ArkUINativeModuleValue TextInputBridge::ResetContentType(ArkUIRuntimeCallInfo *runtimeCallInfo)
2122 {
2123     EcmaVM *vm = runtimeCallInfo->GetVM();
2124     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2125     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2126     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2127     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputContentType(nativeNode);
2128     return panda::JSValueRef::Undefined(vm);
2129 }
2130 
SetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2131 ArkUINativeModuleValue TextInputBridge::SetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2132 {
2133     EcmaVM *vm = runtimeCallInfo->GetVM();
2134     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2135     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2136     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2137     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2138     Color color;
2139     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
2140         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputBackgroundColor(nativeNode);
2141     } else {
2142         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputBackgroundColor(nativeNode, color.GetValue());
2143     }
2144     return panda::JSValueRef::Undefined(vm);
2145 }
2146 
ResetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2147 ArkUINativeModuleValue TextInputBridge::ResetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2148 {
2149     EcmaVM *vm = runtimeCallInfo->GetVM();
2150     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2151     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2152     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2153     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputBackgroundColor(nativeNode);
2154     return panda::JSValueRef::Undefined(vm);
2155 }
2156 
SetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)2157 ArkUINativeModuleValue TextInputBridge::SetMargin(ArkUIRuntimeCallInfo *runtimeCallInfo)
2158 {
2159     EcmaVM *vm = runtimeCallInfo->GetVM();
2160     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2161     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2162     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2163     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
2164     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
2165     Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_3);
2166     Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_4);
2167 
2168     ArkUISizeType top = ArkTSUtils::ParseJsToArkUISize(vm, secondArg);
2169     ArkUISizeType right = ArkTSUtils::ParseJsToArkUISize(vm, thirdArg);
2170     ArkUISizeType bottom = ArkTSUtils::ParseJsToArkUISize(vm, forthArg);
2171     ArkUISizeType left = ArkTSUtils::ParseJsToArkUISize(vm, fifthArg);
2172 
2173     CalcDimension topDimen(0, DimensionUnit::VP);
2174     CalcDimension rightDimen(0, DimensionUnit::VP);
2175     CalcDimension bottomDimen(0, DimensionUnit::VP);
2176     CalcDimension leftDimen(0, DimensionUnit::VP);
2177 
2178     bool isLengthMetrics = false;
2179     if (secondArg->IsObject(vm)) {
2180         isLengthMetrics |= ParseLocalizedMargin(vm, secondArg, topDimen, top);
2181     }
2182     if (thirdArg->IsObject(vm)) {
2183         isLengthMetrics |= ParseLocalizedMargin(vm, thirdArg, rightDimen, right);
2184     }
2185     if (forthArg->IsObject(vm)) {
2186         isLengthMetrics |= ParseLocalizedMargin(vm, forthArg, bottomDimen, bottom);
2187     }
2188     if (fifthArg->IsObject(vm)) {
2189         isLengthMetrics |= ParseLocalizedMargin(vm, fifthArg, leftDimen, left);
2190     }
2191     if (isLengthMetrics) {
2192         auto isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft();
2193         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputMargin(nativeNode,
2194             &top,
2195             isRightToLeft ? &left : &right,
2196             &bottom,
2197             isRightToLeft ? &right : &left);
2198         return panda::JSValueRef::Undefined(vm);
2199     }
2200 
2201     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputMargin(nativeNode, &top, &right, &bottom, &left);
2202     return panda::JSValueRef::Undefined(vm);
2203 }
2204 
ResetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)2205 ArkUINativeModuleValue TextInputBridge::ResetMargin(ArkUIRuntimeCallInfo *runtimeCallInfo)
2206 {
2207     EcmaVM *vm = runtimeCallInfo->GetVM();
2208     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2209     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2210     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2211     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMargin(nativeNode);
2212     return panda::JSValueRef::Undefined(vm);
2213 }
2214 
SetText(ArkUIRuntimeCallInfo * runtimeCallInfo)2215 ArkUINativeModuleValue TextInputBridge::SetText(ArkUIRuntimeCallInfo* runtimeCallInfo)
2216 {
2217     EcmaVM* vm = runtimeCallInfo->GetVM();
2218     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2219     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2220     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2221 
2222     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2223     if (secondArg->IsString(vm)) {
2224         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextString(nativeNode, secondArg->ToString(vm)->
2225         ToString(vm).c_str());
2226     } else {
2227         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextString(nativeNode, "");
2228     }
2229     return panda::JSValueRef::Undefined(vm);
2230 }
ResetText(ArkUIRuntimeCallInfo * runtimeCallInfo)2231 ArkUINativeModuleValue TextInputBridge::ResetText(ArkUIRuntimeCallInfo* runtimeCallInfo)
2232 {
2233     EcmaVM* vm = runtimeCallInfo->GetVM();
2234     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2235     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2236     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2237     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextString(nativeNode, "");
2238     return panda::JSValueRef::Undefined(vm);
2239 }
SetPlaceholder(ArkUIRuntimeCallInfo * runtimeCallInfo)2240 ArkUINativeModuleValue TextInputBridge::SetPlaceholder(ArkUIRuntimeCallInfo* runtimeCallInfo)
2241 {
2242     EcmaVM* vm = runtimeCallInfo->GetVM();
2243     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2244     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2245     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2246 
2247     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2248     if (secondArg->IsString(vm)) {
2249         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderString(nativeNode, secondArg->
2250         ToString(vm)->ToString(vm).c_str());
2251     } else {
2252         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderString(nativeNode, "");
2253     }
2254     return panda::JSValueRef::Undefined(vm);
2255 }
ResetPlaceholder(ArkUIRuntimeCallInfo * runtimeCallInfo)2256 ArkUINativeModuleValue TextInputBridge::ResetPlaceholder(ArkUIRuntimeCallInfo* runtimeCallInfo)
2257 {
2258     EcmaVM* vm = runtimeCallInfo->GetVM();
2259     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2260     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2261     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2262     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderString(nativeNode, "");
2263     return panda::JSValueRef::Undefined(vm);
2264 }
SetController(ArkUIRuntimeCallInfo * runtimeCallInfo)2265 ArkUINativeModuleValue TextInputBridge::SetController(ArkUIRuntimeCallInfo* runtimeCallInfo)
2266 {
2267     EcmaVM* vm = runtimeCallInfo->GetVM();
2268     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2269     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
2270     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
2271 
2272     auto nodePtr = GetArkUINodeModifiers()->getTextInputModifier()->getTextInputController(nativeNode);
2273     auto node = AceType::Claim(reinterpret_cast<TextFieldController*>(nodePtr));
2274 
2275     OHOS::Ace::Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
2276     OHOS::Ace::Framework::JSTextEditableController* jsController =
2277         OHOS::Ace::Framework::JSRef<OHOS::Ace::Framework::JSObject>::Cast(info[1])->Unwrap<OHOS::Ace::Framework::
2278         JSTextEditableController>();
2279     if (jsController) {
2280         jsController->SetController(node);
2281     }
2282     return panda::JSValueRef::Undefined(vm);
2283 }
ResetController(ArkUIRuntimeCallInfo * runtimeCallInfo)2284 ArkUINativeModuleValue TextInputBridge::ResetController(ArkUIRuntimeCallInfo* runtimeCallInfo)
2285 {
2286     EcmaVM* vm = runtimeCallInfo->GetVM();
2287     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2288     return panda::JSValueRef::Undefined(vm);
2289 }
2290 
SetEnablePreviewText(ArkUIRuntimeCallInfo * runtimeCallInfo)2291 ArkUINativeModuleValue TextInputBridge::SetEnablePreviewText(ArkUIRuntimeCallInfo* runtimeCallInfo)
2292 {
2293     EcmaVM *vm = runtimeCallInfo->GetVM();
2294     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2295     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2296     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2297     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2298 
2299     if (secondArg->IsBoolean()) {
2300         uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2301         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnablePreviewText(nativeNode, value);
2302     } else {
2303         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnablePreviewText(nativeNode);
2304     }
2305     return panda::JSValueRef::Undefined(vm);
2306 }
2307 
ResetEnablePreviewText(ArkUIRuntimeCallInfo * runtimeCallInfo)2308 ArkUINativeModuleValue TextInputBridge::ResetEnablePreviewText(ArkUIRuntimeCallInfo* runtimeCallInfo)
2309 {
2310     EcmaVM* vm = runtimeCallInfo->GetVM();
2311     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2312     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2313     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2314     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnablePreviewText(nativeNode);
2315     return panda::JSValueRef::Undefined(vm);
2316 }
2317 
SetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)2318 ArkUINativeModuleValue TextInputBridge::SetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
2319 {
2320     EcmaVM* vm = runtimeCallInfo->GetVM();
2321     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2322     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2323     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2324     NG::OnCreateMenuCallback onCreateMenuCallback;
2325     NG::OnMenuItemClickCallback onMenuItemClickCallback;
2326     if (!ArkTSUtils::ParseSelectionMenuOptions(runtimeCallInfo, vm, onCreateMenuCallback, onMenuItemClickCallback)) {
2327         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectionMenuOptions(nativeNode);
2328         return panda::JSValueRef::Undefined(vm);
2329     }
2330     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputSelectionMenuOptions(
2331         nativeNode, reinterpret_cast<void*>(&onCreateMenuCallback), reinterpret_cast<void*>(&onMenuItemClickCallback));
2332     return panda::JSValueRef::Undefined(vm);
2333 }
2334 
ResetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)2335 ArkUINativeModuleValue TextInputBridge::ResetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
2336 {
2337     EcmaVM* vm = runtimeCallInfo->GetVM();
2338     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2339     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2340     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2341     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectionMenuOptions(nativeNode);
2342     return panda::JSValueRef::Undefined(vm);
2343 }
2344 
SetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2345 ArkUINativeModuleValue TextInputBridge::SetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
2346 {
2347     EcmaVM* vm = runtimeCallInfo->GetVM();
2348     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2349     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2350     Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
2351     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2352     auto value = widthArg->ToString(vm)->ToString(vm);
2353     if (value.empty()) {
2354         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputWidth(nativeNode);
2355         return panda::JSValueRef::Undefined(vm);
2356     }
2357     GetArkUINodeModifiers()->getTextInputModifier()->setTextInputWidth(
2358         nativeNode, value.c_str());
2359     return panda::JSValueRef::Undefined(vm);
2360 }
2361 
ResetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2362 ArkUINativeModuleValue TextInputBridge::ResetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
2363 {
2364     EcmaVM* vm = runtimeCallInfo->GetVM();
2365     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2366     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2367     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2368     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputWidth(nativeNode);
2369     return panda::JSValueRef::Undefined(vm);
2370 }
2371 
SetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)2372 ArkUINativeModuleValue TextInputBridge::SetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
2373 {
2374     EcmaVM* vm = runtimeCallInfo->GetVM();
2375     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2376     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2377     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
2378     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2379 
2380     if (secondArg->IsBoolean()) {
2381         uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2382         GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnableHapticFeedback(nativeNode, value);
2383     } else {
2384         GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnableHapticFeedback(nativeNode);
2385     }
2386     return panda::JSValueRef::Undefined(vm);
2387 }
2388 
ResetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)2389 ArkUINativeModuleValue TextInputBridge::ResetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
2390 {
2391     EcmaVM* vm = runtimeCallInfo->GetVM();
2392     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2393     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2394     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2395     GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnableHapticFeedback(nativeNode);
2396     return panda::JSValueRef::Undefined(vm);
2397 }
2398 
SetEllipsisMode(ArkUIRuntimeCallInfo * runtimeCallInfo)2399 ArkUINativeModuleValue TextInputBridge::SetEllipsisMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
2400 {
2401     EcmaVM* vm = runtimeCallInfo->GetVM();
2402     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2403     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2404     Local<JSValueRef> ellipsisModeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
2405     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2406     if (ellipsisModeArg->IsNull() || ellipsisModeArg->IsUndefined() || !ellipsisModeArg->IsNumber()) {
2407         GetArkUINodeModifiers()->getTextInputModifier()->resetEllipsisMode(nativeNode);
2408         return panda::JSValueRef::Undefined(vm);
2409     }
2410     uint32_t ellipsisMode = ellipsisModeArg->Uint32Value(vm);
2411     GetArkUINodeModifiers()->getTextModifier()->setEllipsisMode(nativeNode, ellipsisMode);
2412     return panda::JSValueRef::Undefined(vm);
2413 }
2414 
ResetEllipsisMode(ArkUIRuntimeCallInfo * runtimeCallInfo)2415 ArkUINativeModuleValue TextInputBridge::ResetEllipsisMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
2416 {
2417     EcmaVM* vm = runtimeCallInfo->GetVM();
2418     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2419     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2420     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2421     GetArkUINodeModifiers()->getTextInputModifier()->resetEllipsisMode(nativeNode);
2422     return panda::JSValueRef::Undefined(vm);
2423 }
2424 
SetStopBackPress(ArkUIRuntimeCallInfo * runtimeCallInfo)2425 ArkUINativeModuleValue TextInputBridge::SetStopBackPress(ArkUIRuntimeCallInfo* runtimeCallInfo)
2426 {
2427     EcmaVM* vm = runtimeCallInfo->GetVM();
2428     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2429     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2430     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2431     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2432 
2433     if (secondArg->IsBoolean()) {
2434         uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2435         GetArkUINodeModifiers()->getTextInputModifier()->setStopBackPress(nativeNode, value);
2436     } else {
2437         GetArkUINodeModifiers()->getTextInputModifier()->resetStopBackPress(nativeNode);
2438     }
2439     return panda::JSValueRef::Undefined(vm);
2440 }
2441 
ResetStopBackPress(ArkUIRuntimeCallInfo * runtimeCallInfo)2442 ArkUINativeModuleValue TextInputBridge::ResetStopBackPress(ArkUIRuntimeCallInfo* runtimeCallInfo)
2443 {
2444     EcmaVM* vm = runtimeCallInfo->GetVM();
2445     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2446     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2447     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2448     GetArkUINodeModifiers()->getTextInputModifier()->resetStopBackPress(nativeNode);
2449     return panda::JSValueRef::Undefined(vm);
2450 }
2451 } // namespace OHOS::Ace::NG
2452