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