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