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