1 /*
2 * Copyright (c) 2023 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_search_bridge.h"
16
17 #include "base/geometry/dimension.h"
18 #include "base/memory/ace_type.h"
19 #include "base/utils/string_utils.h"
20 #include "base/utils/utils.h"
21 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.h"
22 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_text_input_bridge.h"
23 #include "core/components/common/layout/constants.h"
24 #include "core/components/search/search_theme.h"
25 #include "core/components/text_field/textfield_theme.h"
26 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
27 #include "frameworks/bridge/declarative_frontend/jsview/js_text_editable_controller.h"
28 #include "frameworks/bridge/declarative_frontend/jsview/js_textfield.h"
29 #include "frameworks/bridge/declarative_frontend/jsview/js_utils.h"
30 #include "frameworks/core/components_ng/pattern/search/search_model_ng.h"
31
32 namespace OHOS::Ace::NG {
33 constexpr int NUM_0 = 0;
34 constexpr int NUM_1 = 1;
35 constexpr int NUM_2 = 2;
36 constexpr int NUM_3 = 3;
37 constexpr int NUM_4 = 4;
38 constexpr int PARAM_ARR_LENGTH_1 = 1;
39 constexpr int PARAM_ARR_LENGTH_2 = 2;
40 constexpr int PARAM_ARR_LENGTH_3 = 3;
41 constexpr uint32_t ILLEGAL_VALUE = 0;
42 constexpr uint32_t DEFAULT_MODE = -1;
43 const int32_t MINI_VALID_VALUE = 1;
44 const int32_t MAX_VALID_VALUE = 100;
45 const std::vector<TextAlign> TEXT_ALIGNS = { TextAlign::START, TextAlign::CENTER, TextAlign::END };
46 constexpr TextDecorationStyle DEFAULT_DECORATION_STYLE = TextDecorationStyle::SOLID;
47
SetSearchInitialize(ArkUIRuntimeCallInfo * runtimeCallInfo)48 ArkUINativeModuleValue SearchBridge::SetSearchInitialize(ArkUIRuntimeCallInfo* runtimeCallInfo)
49 {
50 EcmaVM* vm = runtimeCallInfo->GetVM();
51 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
52 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
53 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
54 Local<JSValueRef> threeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
55 Local<JSValueRef> fourArg = runtimeCallInfo->GetCallArgRef(NUM_3);
56 Local<JSValueRef> fiveArg = runtimeCallInfo->GetCallArgRef(NUM_4);
57 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
58 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
59 std::string stringValue = "";
60 if (!secondArg->IsNull() && !secondArg->IsUndefined() &&
61 (secondArg->IsString(vm) || secondArg->IsObject(vm)) && ArkTSUtils::ParseJsString(vm, secondArg, stringValue)) {
62 GetArkUINodeModifiers()->getSearchModifier()->setSearchValue(nativeNode, stringValue.c_str());
63 }
64 if (!threeArg->IsNull() && !threeArg->IsUndefined() && threeArg->IsString(vm)) {
65 std::string stringPlaceholder = threeArg->ToString(vm)->ToString(vm);
66 GetArkUINodeModifiers()->getSearchModifier()->setSearchPlaceholder(nativeNode, stringPlaceholder.c_str());
67 }
68 if (!fourArg->IsNull() && !fourArg->IsUndefined() && fourArg->IsString(vm)) {
69 std::string stringIcon = fourArg->ToString(vm)->ToString(vm);
70 GetArkUINodeModifiers()->getSearchModifier()->setSearchIcon(nativeNode, stringIcon.c_str());
71 }
72 Framework::JSTextEditableController* jsController = nullptr;
73 if (!fiveArg->IsNull() && !fiveArg->IsUndefined()) {
74 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
75 jsController =
76 Framework::JSRef<Framework::JSObject>::Cast(info[4])->Unwrap<Framework::JSTextEditableController>();
77 }
78 auto nodePtr = GetArkUINodeModifiers()->getSearchModifier()->getSearchController(nativeNode);
79 auto node = AceType::Claim(reinterpret_cast<OHOS::Ace::TextFieldControllerBase*>(nodePtr));
80
81 if (jsController) {
82 jsController->SetController(node);
83 }
84 SearchModel::GetInstance()->SetFocusable(true);
85 SearchModel::GetInstance()->SetFocusNode(true);
86 return panda::JSValueRef::Undefined(vm);
87 }
88
ResetSearchInitialize(ArkUIRuntimeCallInfo * runtimeCallInfo)89 ArkUINativeModuleValue SearchBridge::ResetSearchInitialize(ArkUIRuntimeCallInfo* runtimeCallInfo)
90 {
91 EcmaVM* vm = runtimeCallInfo->GetVM();
92 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
93 SearchModel::GetInstance()->SetFocusable(true);
94 SearchModel::GetInstance()->SetFocusNode(true);
95 return panda::JSValueRef::Undefined(vm);
96 }
97
SetTextFont(ArkUIRuntimeCallInfo * runtimeCallInfo)98 ArkUINativeModuleValue SearchBridge::SetTextFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
99 {
100 EcmaVM* vm = runtimeCallInfo->GetVM();
101 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
102 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
103 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
104 Local<JSValueRef> threeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
105 Local<JSValueRef> fourArg = runtimeCallInfo->GetCallArgRef(NUM_3);
106 Local<JSValueRef> fiveArg = runtimeCallInfo->GetCallArgRef(NUM_4);
107 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
108 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
109
110 const char* fontFamilies[1];
111 struct ArkUIFontStruct value = {
112 0.0, 0, static_cast<ArkUI_Int32>(FontWeight::NORMAL), INVALID_FONT_STYLE, fontFamilies, 0 };
113 auto container = Container::Current();
114 CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
115 auto pipelineContext = container->GetPipelineContext();
116 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
117 auto themeManager = pipelineContext->GetThemeManager();
118 CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
119 auto theme = themeManager->GetTheme<SearchTheme>();
120 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
121 auto themeFontSize = theme->GetFontSize();
122 CalcDimension size = themeFontSize;
123 RefPtr<ResourceObject> resourceObject;
124 if (secondArg->IsNull() || secondArg->IsUndefined() ||
125 !ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, size, resourceObject) || size.Unit() == DimensionUnit::PERCENT
126 || LessNotEqual(size.Value(), 0.0)) {
127 value.fontSizeNumber = themeFontSize.Value();
128 value.fontSizeUnit = static_cast<int8_t>(themeFontSize.Unit());
129 } else {
130 ArkTSUtils::ParseJsDimensionFp(vm, secondArg, size, resourceObject);
131 value.fontSizeNumber = size.Value();
132 value.fontSizeUnit = static_cast<int8_t>(size.Unit());
133 }
134
135 if (threeArg->IsString(vm) || threeArg->IsNumber()) {
136 if (threeArg->IsString(vm)) {
137 auto weightStr = threeArg->ToString(vm)->ToString(vm);
138 value.fontWeight = static_cast<ArkUI_Int32>(OHOS::Ace::Framework::ConvertStrToFontWeight(weightStr));
139 }
140
141 if (threeArg->IsNumber()) {
142 auto weightStr = std::to_string(threeArg->Int32Value(vm));
143 value.fontWeight =
144 static_cast<ArkUI_Int32>(OHOS::Ace::Framework::ConvertStrToFontWeight(weightStr, FontWeight::W400));
145 }
146 }
147
148 if (fourArg->IsString(vm)) {
149 auto familyStr = fourArg->ToString(vm)->ToString(vm);
150 value.fontFamilies[0] = familyStr.c_str();
151 value.familyLength = 1;
152 }
153
154 if (!fiveArg->IsNull() && fiveArg->IsNumber()) {
155 value.fontStyle = fiveArg->Int32Value(vm);
156 }
157
158 GetArkUINodeModifiers()->getSearchModifier()->setSearchTextFont(
159 nativeNode, &value, AceType::RawPtr(resourceObject));
160 return panda::JSValueRef::Undefined(vm);
161 }
162
ResetTextFont(ArkUIRuntimeCallInfo * runtimeCallInfo)163 ArkUINativeModuleValue SearchBridge::ResetTextFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
164 {
165 EcmaVM* vm = runtimeCallInfo->GetVM();
166 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
167 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
168 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
169 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
170 GetArkUINodeModifiers()->getSearchModifier()->resetSearchTextFont(nativeNode);
171 return panda::JSValueRef::Undefined(vm);
172 }
173
SetPlaceholderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)174 ArkUINativeModuleValue SearchBridge::SetPlaceholderColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
175 {
176 EcmaVM* vm = runtimeCallInfo->GetVM();
177 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
178 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
179 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
180 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
181 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
182 Color color;
183 RefPtr<ResourceObject> resourceObject;
184 uint32_t result;
185 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
186 if (ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, resourceObject, nodeInfo)) {
187 result = color.GetValue();
188 GetArkUINodeModifiers()->getSearchModifier()->setSearchPlaceholderColor(
189 nativeNode, result, AceType::RawPtr(resourceObject));
190 } else {
191 GetArkUINodeModifiers()->getSearchModifier()->resetSearchPlaceholderColor(nativeNode);
192 }
193 return panda::JSValueRef::Undefined(vm);
194 }
ResetPlaceholderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)195 ArkUINativeModuleValue SearchBridge::ResetPlaceholderColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
196 {
197 EcmaVM* vm = runtimeCallInfo->GetVM();
198 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
199 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
200 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
201 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
202 GetArkUINodeModifiers()->getSearchModifier()->resetSearchPlaceholderColor(nativeNode);
203 return panda::JSValueRef::Undefined(vm);
204 }
205
SetSelectionMenuHidden(ArkUIRuntimeCallInfo * runtimeCallInfo)206 ArkUINativeModuleValue SearchBridge::SetSelectionMenuHidden(ArkUIRuntimeCallInfo* runtimeCallInfo)
207 {
208 EcmaVM* vm = runtimeCallInfo->GetVM();
209 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
210 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
211 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
212 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
213 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
214 if (secondArg->IsBoolean()) {
215 uint32_t selectionMenuHidden = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
216 GetArkUINodeModifiers()->getSearchModifier()->setSearchSelectionMenuHidden(nativeNode, selectionMenuHidden);
217 } else {
218 GetArkUINodeModifiers()->getSearchModifier()->resetSearchSelectionMenuHidden(nativeNode);
219 }
220 return panda::JSValueRef::Undefined(vm);
221 }
222
ResetSelectionMenuHidden(ArkUIRuntimeCallInfo * runtimeCallInfo)223 ArkUINativeModuleValue SearchBridge::ResetSelectionMenuHidden(ArkUIRuntimeCallInfo* runtimeCallInfo)
224 {
225 EcmaVM* vm = runtimeCallInfo->GetVM();
226 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
227 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
228 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
229 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
230 GetArkUINodeModifiers()->getSearchModifier()->resetSearchSelectionMenuHidden(nativeNode);
231 return panda::JSValueRef::Undefined(vm);
232 }
233
SetCaretStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)234 ArkUINativeModuleValue SearchBridge::SetCaretStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
235 {
236 EcmaVM* vm = runtimeCallInfo->GetVM();
237 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
238 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
239 Local<JSValueRef> caretWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
240 Local<JSValueRef> caretColorArg = runtimeCallInfo->GetCallArgRef(NUM_2);
241 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
242 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
243
244 auto textFieldTheme = ArkTSUtils::GetTheme<TextFieldTheme>();
245 CHECK_NULL_RETURN(textFieldTheme, panda::JSValueRef::Undefined(vm));
246 CalcDimension caretWidth = textFieldTheme->GetCursorWidth();
247 RefPtr<ResourceObject> widthObject;
248 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, caretWidthArg, caretWidth, widthObject, false) ||
249 LessNotEqual(caretWidth.Value(), 0.0)) {
250 caretWidth = textFieldTheme->GetCursorWidth();
251 }
252 Color color;
253 uint32_t caretColor;
254 RefPtr<ResourceObject> colorObject;
255 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
256 if (ArkTSUtils::ParseJsColorAlpha(vm, caretColorArg, color, colorObject, nodeInfo)) {
257 caretColor = color.GetValue();
258 } else {
259 caretColor = textFieldTheme->GetCursorColor().GetValue();
260 }
261 GetArkUINodeModifiers()->getSearchModifier()->setSearchCaretStyle(
262 nativeNode, caretWidth.Value(), static_cast<int8_t>(caretWidth.Unit()), caretColor,
263 AceType::RawPtr(widthObject), AceType::RawPtr(colorObject));
264 return panda::JSValueRef::Undefined(vm);
265 }
266
ResetCaretStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)267 ArkUINativeModuleValue SearchBridge::ResetCaretStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
268 {
269 EcmaVM* vm = runtimeCallInfo->GetVM();
270 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
271 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
272 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
273 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
274 GetArkUINodeModifiers()->getSearchModifier()->resetSearchCaretStyle(nativeNode);
275 return panda::JSValueRef::Undefined(vm);
276 }
277
SetSearchTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)278 ArkUINativeModuleValue SearchBridge::SetSearchTextAlign(ArkUIRuntimeCallInfo* runtimeCallInfo)
279 {
280 EcmaVM* vm = runtimeCallInfo->GetVM();
281 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
282 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
283 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
284 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
285 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
286
287 if (secondArg->IsNumber()) {
288 int32_t value = secondArg->Int32Value(vm);
289 if (value >= 0 && value < static_cast<int32_t>(TEXT_ALIGNS.size())) {
290 GetArkUINodeModifiers()->getSearchModifier()->setSearchTextAlign(nativeNode, value);
291 }
292 }
293 return panda::JSValueRef::Undefined(vm);
294 }
295
ResetSearchTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)296 ArkUINativeModuleValue SearchBridge::ResetSearchTextAlign(ArkUIRuntimeCallInfo* runtimeCallInfo)
297 {
298 EcmaVM* vm = runtimeCallInfo->GetVM();
299 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
300 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
301 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
302 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
303 GetArkUINodeModifiers()->getSearchModifier()->resetSearchTextAlign(nativeNode);
304 return panda::JSValueRef::Undefined(vm);
305 }
306
ConvertStrToCancelButtonStyle(const std::string & value)307 static CancelButtonStyle ConvertStrToCancelButtonStyle(const std::string& value)
308 {
309 if (value == "CONSTANT") {
310 return CancelButtonStyle::CONSTANT;
311 } else if (value == "INVISIBLE") {
312 return CancelButtonStyle::INVISIBLE;
313 } else {
314 return CancelButtonStyle::INPUT;
315 }
316 }
317
SetCancelButton(ArkUIRuntimeCallInfo * runtimeCallInfo)318 ArkUINativeModuleValue SearchBridge::SetCancelButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
319 {
320 EcmaVM* vm = runtimeCallInfo->GetVM();
321 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
322 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
323 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
324 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
325 Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
326 Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(NUM_4);
327 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
328 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
329 auto container = Container::Current();
330 CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
331 auto pipelineContext = container->GetPipelineContext();
332 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
333 auto themeManager = pipelineContext->GetThemeManager();
334 CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
335 auto theme = themeManager->GetTheme<SearchTheme>();
336 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
337 int32_t style = static_cast<int32_t>(theme->GetCancelButtonStyle());
338 if (secondArg->IsString(vm)) {
339 CancelButtonStyle cancelButtonStyle = ConvertStrToCancelButtonStyle(secondArg->ToString(vm)->ToString(vm));
340 style = static_cast<int32_t>(cancelButtonStyle);
341 }
342 struct ArkUISizeType size = { 0.0, 0, nullptr };
343 CalcDimension iconSize;
344 RefPtr<ResourceObject> sizeObject;
345 if (!thirdArg->IsUndefined() && !thirdArg->IsNull() &&
346 ArkTSUtils::ParseJsDimensionVpNG(vm, thirdArg, iconSize, sizeObject, false)) {
347 if (LessNotEqual(iconSize.Value(), 0.0) || iconSize.Unit() == DimensionUnit::PERCENT) {
348 iconSize = theme->GetIconHeight();
349 }
350 } else {
351 iconSize = theme->GetIconHeight();
352 }
353 size.value = iconSize.Value();
354 size.unit = static_cast<int8_t>(iconSize.Unit());
355 Color value;
356 uint32_t color;
357 RefPtr<ResourceObject> colorObject;
358 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
359 if (!forthArg->IsUndefined() && !forthArg->IsNull() &&
360 ArkTSUtils::ParseJsColorAlpha(vm, forthArg, value, colorObject, nodeInfo)) {
361 color = value.GetValue();
362 } else {
363 color = theme->GetSearchIconColor().GetValue();
364 }
365 std::string srcStr;
366 RefPtr<ResourceObject> srcObject;
367 if (fifthArg->IsUndefined() || fifthArg->IsNull() ||
368 !ArkTSUtils::ParseJsMedia(vm, fifthArg, srcStr, srcObject)) {
369 srcStr = "";
370 }
371 const char* src = srcStr.c_str();
372 ArkUIImageIconRes searchButtonIconObj;
373 searchButtonIconObj.sizeObj = AceType::RawPtr(sizeObject);
374 searchButtonIconObj.colorObj = AceType::RawPtr(colorObject);
375 searchButtonIconObj.srcObj = AceType::RawPtr(srcObject);
376 GetArkUINodeModifiers()->getSearchModifier()->setSearchCancelButton(
377 nativeNode, style, &size, color, src, &searchButtonIconObj);
378 return panda::JSValueRef::Undefined(vm);
379 }
380
ResetCancelButton(ArkUIRuntimeCallInfo * runtimeCallInfo)381 ArkUINativeModuleValue SearchBridge::ResetCancelButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
382 {
383 EcmaVM* vm = runtimeCallInfo->GetVM();
384 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
385 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
386 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
387 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
388 GetArkUINodeModifiers()->getSearchModifier()->resetSearchCancelButton(nativeNode);
389 return panda::JSValueRef::Undefined(vm);
390 }
391
SetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)392 ArkUINativeModuleValue SearchBridge::SetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo* runtimeCallInfo)
393 {
394 EcmaVM* vm = runtimeCallInfo->GetVM();
395 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
396 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
397 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
398 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
399 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
400
401 if (secondArg->IsBoolean()) {
402 uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
403 GetArkUINodeModifiers()->getSearchModifier()->setSearchEnableKeyboardOnFocus(nativeNode, value);
404 } else {
405 GetArkUINodeModifiers()->getSearchModifier()->resetSearchEnableKeyboardOnFocus(nativeNode);
406 }
407
408 return panda::JSValueRef::Undefined(vm);
409 }
410
ResetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)411 ArkUINativeModuleValue SearchBridge::ResetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo* runtimeCallInfo)
412 {
413 EcmaVM* vm = runtimeCallInfo->GetVM();
414 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
415 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
416 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
417 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
418 GetArkUINodeModifiers()->getSearchModifier()->resetSearchEnableKeyboardOnFocus(nativeNode);
419 return panda::JSValueRef::Undefined(vm);
420 }
421
SetPlaceholderFont(ArkUIRuntimeCallInfo * runtimeCallInfo)422 ArkUINativeModuleValue SearchBridge::SetPlaceholderFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
423 {
424 EcmaVM* vm = runtimeCallInfo->GetVM();
425 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
426 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
427 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
428 Local<JSValueRef> threeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
429 Local<JSValueRef> fourArg = runtimeCallInfo->GetCallArgRef(NUM_3);
430 Local<JSValueRef> fiveArg = runtimeCallInfo->GetCallArgRef(NUM_4);
431 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
432 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
433
434 const char* fontFamilies[1];
435 struct ArkUIFontStruct value = {
436 0.0, 0, static_cast<ArkUI_Int32>(FontWeight::NORMAL), INVALID_FONT_STYLE, fontFamilies, 0 };
437 auto container = Container::Current();
438 CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
439 auto pipelineContext = container->GetPipelineContext();
440 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
441 auto themeManager = pipelineContext->GetThemeManager();
442 CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
443 auto theme = themeManager->GetTheme<SearchTheme>();
444 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
445 auto themeFontSize = theme->GetFontSize();
446 CalcDimension size;
447 RefPtr<ResourceObject> resourceObject;
448 if (secondArg->IsNull() || secondArg->IsUndefined() ||
449 !ArkTSUtils::ParseJsDimensionFp(vm, secondArg, size, resourceObject) || size.Unit() == DimensionUnit::PERCENT) {
450 value.fontSizeNumber = themeFontSize.Value();
451 value.fontSizeUnit = static_cast<int8_t>(themeFontSize.Unit());
452 } else {
453 value.fontSizeNumber = size.Value();
454 value.fontSizeUnit = static_cast<int8_t>(size.Unit());
455 }
456
457 if (threeArg->IsString(vm) || threeArg->IsNumber()) {
458 if (threeArg->IsString(vm)) {
459 auto weightStr = threeArg->ToString(vm)->ToString(vm);
460 value.fontWeight = static_cast<ArkUI_Int32>(OHOS::Ace::Framework::ConvertStrToFontWeight(weightStr));
461 }
462
463 if (threeArg->IsNumber()) {
464 auto weightStr = std::to_string(threeArg->Int32Value(vm));
465 value.fontWeight =
466 static_cast<ArkUI_Int32>(OHOS::Ace::Framework::ConvertStrToFontWeight(weightStr, FontWeight::W400));
467 }
468 }
469
470 if (fourArg->IsString(vm)) {
471 auto familyStr = fourArg->ToString(vm)->ToString(vm);
472 value.fontFamilies[0] = familyStr.c_str();
473 value.familyLength = 1;
474 }
475
476 if (!fiveArg->IsNull() && fiveArg->IsNumber()) {
477 value.fontStyle = fiveArg->Int32Value(vm);
478 }
479 GetArkUINodeModifiers()->getSearchModifier()->setSearchPlaceholderFont(
480 nativeNode, &value, AceType::RawPtr(resourceObject));
481 return panda::JSValueRef::Undefined(vm);
482 }
483
ResetPlaceholderFont(ArkUIRuntimeCallInfo * runtimeCallInfo)484 ArkUINativeModuleValue SearchBridge::ResetPlaceholderFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
485 {
486 EcmaVM* vm = runtimeCallInfo->GetVM();
487 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
488 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
489 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
490 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
491 GetArkUINodeModifiers()->getSearchModifier()->resetSearchPlaceholderFont(nativeNode);
492 return panda::JSValueRef::Undefined(vm);
493 }
494
SetSearchIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)495 ArkUINativeModuleValue SearchBridge::SetSearchIcon(ArkUIRuntimeCallInfo* runtimeCallInfo)
496 {
497 EcmaVM* vm = runtimeCallInfo->GetVM();
498 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
499 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
500 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
501 Local<JSValueRef> threeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
502 Local<JSValueRef> fourArg = runtimeCallInfo->GetCallArgRef(NUM_3);
503 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
504 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
505
506 struct ArkUIIconOptionsStruct value = {0.0, 0, INVALID_COLOR_VALUE, nullptr};
507
508 CalcDimension size;
509 auto container = Container::Current();
510 CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
511 auto pipelineContext = container->GetPipelineContext();
512 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
513 auto themeManager = pipelineContext->GetThemeManager();
514 CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
515 auto theme = themeManager->GetTheme<SearchTheme>();
516 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
517 RefPtr<ResourceObject> sizeObject;
518 if (!secondArg->IsUndefined() && !secondArg->IsNull() &&
519 ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, size, sizeObject, false)) {
520 if (LessNotEqual(size.Value(), 0.0) || size.Unit() == DimensionUnit::PERCENT) {
521 size = theme->GetIconHeight();
522 }
523 } else {
524 size = theme->GetIconHeight();
525 }
526 value.value = size.Value();
527 value.unit = static_cast<int8_t>(size.Unit());
528
529 Color color;
530 RefPtr<ResourceObject> colorObject;
531 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
532 if (ArkTSUtils::ParseJsColorAlpha(vm, threeArg, color, colorObject, nodeInfo)) {
533 value.color = static_cast<int32_t>(color.GetValue());
534 } else {
535 value.color = INVALID_COLOR_VALUE;
536 }
537
538 std::string srcStr;
539 RefPtr<ResourceObject> srcObject;
540 if (fourArg->IsUndefined() || fourArg->IsNull() || !ArkTSUtils::ParseJsMedia(vm, fourArg, srcStr, srcObject)) {
541 srcStr = "";
542 }
543 value.src = srcStr.c_str();
544 ArkUIImageIconRes searchIconObj;
545 searchIconObj.sizeObj = AceType::RawPtr(sizeObject);
546 searchIconObj.colorObj = AceType::RawPtr(colorObject);
547 searchIconObj.srcObj = AceType::RawPtr(srcObject);
548 GetArkUINodeModifiers()->getSearchModifier()->setSearchSearchIcon(nativeNode, &value, &searchIconObj);
549 return panda::JSValueRef::Undefined(vm);
550 }
551
ResetSearchIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)552 ArkUINativeModuleValue SearchBridge::ResetSearchIcon(ArkUIRuntimeCallInfo* runtimeCallInfo)
553 {
554 EcmaVM* vm = runtimeCallInfo->GetVM();
555 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
556 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
557 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
558 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
559 GetArkUINodeModifiers()->getSearchModifier()->resetSearchSearchIcon(nativeNode);
560 return panda::JSValueRef::Undefined(vm);
561 }
562
SetSearchButton(ArkUIRuntimeCallInfo * runtimeCallInfo)563 ArkUINativeModuleValue SearchBridge::SetSearchButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
564 {
565 EcmaVM* vm = runtimeCallInfo->GetVM();
566 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
567 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
568 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
569 Local<JSValueRef> threeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
570 Local<JSValueRef> fourArg = runtimeCallInfo->GetCallArgRef(NUM_3);
571 Local<JSValueRef> fiveArg = runtimeCallInfo->GetCallArgRef(NUM_4);
572 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
573 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
574
575 struct ArkUISearchButtonOptionsStruct value = {"", 0.0, 0, INVALID_COLOR_VALUE};
576
577 std::string valueString = "";
578 RefPtr<ResourceObject> srcObject;
579 if ((secondArg->IsString(vm) || secondArg->IsObject(vm)) &&
580 ArkTSUtils::ParseJsString(vm, secondArg, valueString, srcObject)) {
581 value.value = valueString.c_str();
582 }
583
584 auto container = Container::Current();
585 CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
586 auto pipelineContext = container->GetPipelineContext();
587 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
588 auto themeManager = pipelineContext->GetThemeManager();
589 CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
590 auto theme = themeManager->GetTheme<SearchTheme>();
591 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
592 CalcDimension size = theme->GetButtonFontSize();
593 RefPtr<ResourceObject> sizeObject;
594 if (ArkTSUtils::ParseJsDimensionVpNG(vm, threeArg, size, sizeObject) && size.Unit() != DimensionUnit::PERCENT &&
595 GreatOrEqual(size.Value(), 0.0)) {
596 ArkTSUtils::ParseJsDimensionFp(vm, threeArg, size, sizeObject);
597 } else {
598 size = theme->GetButtonFontSize();
599 }
600 value.sizeValue = size.Value();
601 value.sizeUnit = static_cast<int8_t>(size.Unit());
602
603 Color fontColor;
604 RefPtr<ResourceObject> colorObject;
605 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
606 if (ArkTSUtils::ParseJsColorAlpha(vm, fourArg, fontColor, colorObject, nodeInfo)) {
607 value.fontColor = static_cast<int32_t>(fontColor.GetValue());
608 } else {
609 value.fontColor = static_cast<int32_t>(theme->GetSearchButtonTextColor().GetValue());
610 }
611
612 ArkUIImageIconRes searchButtonObj;
613 searchButtonObj.sizeObj = AceType::RawPtr(sizeObject);
614 searchButtonObj.colorObj = AceType::RawPtr(colorObject);
615 searchButtonObj.srcObj = AceType::RawPtr(srcObject);
616 if (fiveArg->IsBoolean()) {
617 value.autoDisable = fiveArg->ToBoolean(vm)->Value();
618 GetArkUINodeModifiers()->getSearchModifier()->setSearchSearchButton(nativeNode, &value, &searchButtonObj);
619 } else {
620 GetArkUINodeModifiers()->getSearchModifier()->resetSearchSearchButton(nativeNode);
621 }
622
623 GetArkUINodeModifiers()->getSearchModifier()->setSearchSearchButton(nativeNode, &value, &searchButtonObj);
624 return panda::JSValueRef::Undefined(vm);
625 }
626
ResetSearchButton(ArkUIRuntimeCallInfo * runtimeCallInfo)627 ArkUINativeModuleValue SearchBridge::ResetSearchButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
628 {
629 EcmaVM* vm = runtimeCallInfo->GetVM();
630 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
631 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
632 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
633 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
634 GetArkUINodeModifiers()->getSearchModifier()->resetSearchSearchButton(nativeNode);
635 return panda::JSValueRef::Undefined(vm);
636 }
637
SetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)638 ArkUINativeModuleValue SearchBridge::SetFontColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
639 {
640 EcmaVM* vm = runtimeCallInfo->GetVM();
641 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
642 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
643 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
644 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
645 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
646 auto container = Container::Current();
647 CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
648 auto pipelineContext = container->GetPipelineContext();
649 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
650 auto themeManager = pipelineContext->GetThemeManager();
651 CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
652 auto theme = themeManager->GetTheme<SearchTheme>();
653 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
654 Color value;
655 RefPtr<ResourceObject> resourceObject;
656 uint32_t color = theme->GetTextColor().GetValue();
657 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
658 if (ArkTSUtils::ParseJsColorAlpha(vm, secondArg, value, resourceObject, nodeInfo)) {
659 color = value.GetValue();
660 }
661 GetArkUINodeModifiers()->getSearchModifier()->setSearchFontColor(
662 nativeNode, color, AceType::RawPtr(resourceObject));
663 return panda::JSValueRef::Undefined(vm);
664 }
665
ResetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)666 ArkUINativeModuleValue SearchBridge::ResetFontColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
667 {
668 EcmaVM* vm = runtimeCallInfo->GetVM();
669 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
670 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
671 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
672 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
673 GetArkUINodeModifiers()->getSearchModifier()->resetSearchFontColor(nativeNode);
674 return panda::JSValueRef::Undefined(vm);
675 }
676
SetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)677 ArkUINativeModuleValue SearchBridge::SetCopyOption(ArkUIRuntimeCallInfo* runtimeCallInfo)
678 {
679 EcmaVM* vm = runtimeCallInfo->GetVM();
680 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
681 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
682 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
683 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
684 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
685
686 auto copyOptions = CopyOptions::Local;
687 uint32_t value = static_cast<uint32_t>(copyOptions);
688 if (secondArg->IsNumber()) {
689 value = secondArg->Uint32Value(vm);
690 } else if (!secondArg->IsNumber() && !secondArg->IsUndefined()) {
691 copyOptions = CopyOptions::Local;
692 value = static_cast<uint32_t>(copyOptions);
693 }
694 GetArkUINodeModifiers()->getSearchModifier()->setSearchCopyOption(nativeNode, value);
695 return panda::JSValueRef::Undefined(vm);
696 }
697
ResetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)698 ArkUINativeModuleValue SearchBridge::ResetCopyOption(ArkUIRuntimeCallInfo* runtimeCallInfo)
699 {
700 EcmaVM* vm = runtimeCallInfo->GetVM();
701 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
702 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
703 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
704 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
705 GetArkUINodeModifiers()->getSearchModifier()->resetSearchCopyOption(nativeNode);
706 return panda::JSValueRef::Undefined(vm);
707 }
708
SetSearchEnterKeyType(ArkUIRuntimeCallInfo * runtimeCallInfo)709 ArkUINativeModuleValue SearchBridge::SetSearchEnterKeyType(ArkUIRuntimeCallInfo *runtimeCallInfo)
710 {
711 EcmaVM *vm = runtimeCallInfo->GetVM();
712 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
713 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
714 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
715 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
716 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
717
718 if (secondArg->IsNumber()) {
719 int32_t value = secondArg->Int32Value(vm);
720 GetArkUINodeModifiers()->getSearchModifier()->setSearchEnterKeyType(nativeNode, value);
721 } else {
722 GetArkUINodeModifiers()->getSearchModifier()->resetSearchEnterKeyType(nativeNode);
723 }
724 return panda::JSValueRef::Undefined(vm);
725 }
726
ResetSearchEnterKeyType(ArkUIRuntimeCallInfo * runtimeCallInfo)727 ArkUINativeModuleValue SearchBridge::ResetSearchEnterKeyType(ArkUIRuntimeCallInfo *runtimeCallInfo)
728 {
729 EcmaVM *vm = runtimeCallInfo->GetVM();
730 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
731 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
732 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
733 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
734 GetArkUINodeModifiers()->getSearchModifier()->resetSearchEnterKeyType(nativeNode);
735 return panda::JSValueRef::Undefined(vm);
736 }
737
SetSearchHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)738 ArkUINativeModuleValue SearchBridge::SetSearchHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
739 {
740 EcmaVM* vm = runtimeCallInfo->GetVM();
741 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
742 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
743 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
744 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
745 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
746 if (TextInputBridge::ParseLayoutPolicy(vm, valueArg, false)) {
747 GetArkUINodeModifiers()->getCommonModifier()->resetHeight(nativeNode);
748 return panda::JSValueRef::Undefined(vm);
749 }
750 CalcDimension height;
751 std::string calcStr;
752 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, valueArg, height)) {
753 GetArkUINodeModifiers()->getCommonModifier()->resetHeight(nativeNode);
754 } else {
755 if (LessNotEqual(height.Value(), 0.0)) {
756 height.SetValue(0.0);
757 }
758 if (height.Unit() == DimensionUnit::CALC) {
759 GetArkUINodeModifiers()->getCommonModifier()->setHeight(
760 nativeNode, height.Value(), static_cast<int>(height.Unit()), height.CalcValue().c_str(), nullptr);
761 } else {
762 GetArkUINodeModifiers()->getCommonModifier()->setHeight(
763 nativeNode, height.Value(), static_cast<int>(height.Unit()), calcStr.c_str(), nullptr);
764 }
765 GetArkUINodeModifiers()->getSearchModifier()->setSearchHeight(
766 nativeNode, height.Value(), static_cast<int>(height.Unit()));
767 }
768 return panda::JSValueRef::Undefined(vm);
769 }
770
ResetSearchHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)771 ArkUINativeModuleValue SearchBridge::ResetSearchHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
772 {
773 EcmaVM* vm = runtimeCallInfo->GetVM();
774 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
775 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
776 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
777 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
778 GetArkUINodeModifiers()->getSearchModifier()->resetSearchHeight(nativeNode);
779 return panda::JSValueRef::Undefined(vm);
780 }
781
SetSearchMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)782 ArkUINativeModuleValue SearchBridge::SetSearchMinFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
783 {
784 EcmaVM* vm = runtimeCallInfo->GetVM();
785 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
786 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
787 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
788 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
789 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
790 CalcDimension value;
791 auto pipelineContext = PipelineBase::GetCurrentContext();
792 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
793 auto theme = pipelineContext->GetTheme<SearchTheme>();
794 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
795 RefPtr<ResourceObject> resourceObject;
796 if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, resourceObject, false)) {
797 GetArkUINodeModifiers()->getSearchModifier()->resetSearchAdaptMinFontSize(nativeNode);
798 } else {
799 if (value.IsNegative()) {
800 value = theme->GetTextStyle().GetAdaptMinFontSize();
801 }
802 GetArkUINodeModifiers()->getSearchModifier()->setSearchAdaptMinFontSize(
803 nativeNode, value.Value(), static_cast<int32_t>(value.Unit()), AceType::RawPtr(resourceObject));
804 }
805 return panda::JSValueRef::Undefined(vm);
806 }
807
SetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)808 ArkUINativeModuleValue SearchBridge::SetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
809 {
810 EcmaVM* vm = runtimeCallInfo->GetVM();
811 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
812 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
813 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
814 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
815 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
816 if (secondArg->IsString(vm)) {
817 auto value = secondArg->ToString(vm)->ToString(vm);
818 GetArkUINodeModifiers()->getSearchModifier()->setSearchFontFeature(nativeNode, value.c_str());
819 } else {
820 GetArkUINodeModifiers()->getSearchModifier()->resetSearchFontFeature(nativeNode);
821 }
822 return panda::JSValueRef::Undefined(vm);
823 }
824
ResetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)825 ArkUINativeModuleValue SearchBridge::ResetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
826 {
827 EcmaVM* vm = runtimeCallInfo->GetVM();
828 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
829 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
830 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
831 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
832 GetArkUINodeModifiers()->getSearchModifier()->resetSearchFontFeature(nativeNode);
833 return panda::JSValueRef::Undefined(vm);
834 }
835
SetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)836 ArkUINativeModuleValue SearchBridge::SetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
837 {
838 EcmaVM* vm = runtimeCallInfo->GetVM();
839 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
840 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
841 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
842 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
843 Local<JSValueRef> fourthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
844 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
845 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
846 auto container = Container::Current();
847 CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
848 auto pipelineContext = container->GetPipelineContext();
849 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
850 auto themeManager = pipelineContext->GetThemeManager();
851 CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
852 auto theme = themeManager->GetTheme<SearchTheme>();
853 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
854 Color color = theme->GetTextStyle().GetTextDecorationColor();
855 int32_t searchDecoration = static_cast<int32_t>(theme->GetTextDecoration());
856 if (secondArg->IsInt()) {
857 searchDecoration = secondArg->Int32Value(vm);
858 }
859 RefPtr<ResourceObject> resourceObject;
860 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
861 ArkTSUtils::ParseJsColorAlpha(vm, thirdArg, color, Color::BLACK, resourceObject, nodeInfo);
862 int32_t textDecorationStyle = static_cast<int32_t>(DEFAULT_DECORATION_STYLE);
863 if (fourthArg->IsInt()) {
864 textDecorationStyle = fourthArg->Int32Value(vm);
865 }
866 GetArkUINodeModifiers()->getSearchModifier()->setSearchDecoration(
867 nativeNode, searchDecoration, color.GetValue(), textDecorationStyle, AceType::RawPtr(resourceObject));
868 return panda::JSValueRef::Undefined(vm);
869 }
870
ResetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)871 ArkUINativeModuleValue SearchBridge::ResetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
872 {
873 EcmaVM* vm = runtimeCallInfo->GetVM();
874 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
875 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
876 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
877 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
878 GetArkUINodeModifiers()->getSearchModifier()->resetSearchDecoration(nativeNode);
879 return panda::JSValueRef::Undefined(vm);
880 }
881
SetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)882 ArkUINativeModuleValue SearchBridge::SetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
883 {
884 EcmaVM* vm = runtimeCallInfo->GetVM();
885 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
886 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
887 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
888 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
889 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
890 CalcDimension value;
891 RefPtr<ResourceObject> resourceObject;
892 if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, resourceObject, false)) {
893 GetArkUINodeModifiers()->getSearchModifier()->resetSearchLetterSpacing(nativeNode);
894 } else {
895 GetArkUINodeModifiers()->getSearchModifier()->setSearchLetterSpacing(
896 nativeNode, value.Value(), static_cast<int>(value.Unit()), AceType::RawPtr(resourceObject));
897 }
898 return panda::JSValueRef::Undefined(vm);
899 }
900
ResetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)901 ArkUINativeModuleValue SearchBridge::ResetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
902 {
903 EcmaVM* vm = runtimeCallInfo->GetVM();
904 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
905 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
906 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
907 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
908 GetArkUINodeModifiers()->getSearchModifier()->resetSearchLetterSpacing(nativeNode);
909 return panda::JSValueRef::Undefined(vm);
910 }
911
SetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)912 ArkUINativeModuleValue SearchBridge::SetLineHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
913 {
914 EcmaVM* vm = runtimeCallInfo->GetVM();
915 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
916 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
917 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
918 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
919 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
920 CalcDimension value;
921 RefPtr<ResourceObject> resourceObject;
922 if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, resourceObject, true)) {
923 GetArkUINodeModifiers()->getSearchModifier()->resetSearchLineHeight(nativeNode);
924 } else {
925 if (value.IsNegative()) {
926 value.Reset();
927 }
928 GetArkUINodeModifiers()->getSearchModifier()->setSearchLineHeight(
929 nativeNode, value.Value(), static_cast<int>(value.Unit()), AceType::RawPtr(resourceObject));
930 }
931 return panda::JSValueRef::Undefined(vm);
932 }
933
ResetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)934 ArkUINativeModuleValue SearchBridge::ResetLineHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
935 {
936 EcmaVM* vm = runtimeCallInfo->GetVM();
937 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
938 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
939 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
940 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
941 GetArkUINodeModifiers()->getSearchModifier()->resetSearchLineHeight(nativeNode);
942 return panda::JSValueRef::Undefined(vm);
943 }
944
ResetSearchMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)945 ArkUINativeModuleValue SearchBridge::ResetSearchMinFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
946 {
947 EcmaVM* vm = runtimeCallInfo->GetVM();
948 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
949 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
950 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
951 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
952 GetArkUINodeModifiers()->getSearchModifier()->resetSearchAdaptMinFontSize(nativeNode);
953 return panda::JSValueRef::Undefined(vm);
954 }
955
SetSearchMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)956 ArkUINativeModuleValue SearchBridge::SetSearchMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
957 {
958 EcmaVM* vm = runtimeCallInfo->GetVM();
959 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
960 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
961 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
962 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
963 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
964 CalcDimension value;
965 auto pipelineContext = PipelineBase::GetCurrentContext();
966 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
967 auto theme = pipelineContext->GetTheme<SearchTheme>();
968 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
969 RefPtr<ResourceObject> resourceObject;
970 if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, resourceObject, false)) {
971 GetArkUINodeModifiers()->getSearchModifier()->resetSearchAdaptMaxFontSize(nativeNode);
972 } else {
973 if (value.IsNegative()) {
974 value = theme->GetTextStyle().GetAdaptMaxFontSize();
975 }
976 GetArkUINodeModifiers()->getSearchModifier()->setSearchAdaptMaxFontSize(
977 nativeNode, value.Value(), static_cast<int32_t>(value.Unit()), AceType::RawPtr(resourceObject));
978 }
979 return panda::JSValueRef::Undefined(vm);
980 }
981
SetMinFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)982 ArkUINativeModuleValue SearchBridge::SetMinFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
983 {
984 EcmaVM* vm = runtimeCallInfo->GetVM();
985 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
986 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
987 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
988 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
989 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
990 double minFontScale;
991 RefPtr<ResourceObject> resourceObject;
992 if (!ArkTSUtils::ParseJsDouble(vm, secondArg, minFontScale, resourceObject)) {
993 return panda::JSValueRef::Undefined(vm);
994 }
995 if (LessOrEqual(minFontScale, 0.0f)) {
996 minFontScale = 0.0f;
997 } else if (GreatOrEqual(minFontScale, 1.0f)) {
998 minFontScale = 1.0f;
999 }
1000 GetArkUINodeModifiers()->getSearchModifier()->setSearchMinFontScale(
1001 nativeNode, static_cast<float>(minFontScale), AceType::RawPtr(resourceObject));
1002 return panda::JSValueRef::Undefined(vm);
1003 }
1004
ResetMinFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)1005 ArkUINativeModuleValue SearchBridge::ResetMinFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
1006 {
1007 EcmaVM* vm = runtimeCallInfo->GetVM();
1008 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1009 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1010 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1011 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1012 GetArkUINodeModifiers()->getSearchModifier()->resetSearchMinFontScale(nativeNode);
1013 return panda::JSValueRef::Undefined(vm);
1014 }
1015
SetMaxFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)1016 ArkUINativeModuleValue SearchBridge::SetMaxFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
1017 {
1018 EcmaVM* vm = runtimeCallInfo->GetVM();
1019 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1020 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1021 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1022 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1023 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1024 double maxFontScale;
1025 RefPtr<ResourceObject> resourceObject;
1026 if (!ArkTSUtils::ParseJsDouble(vm, secondArg, maxFontScale, resourceObject)) {
1027 return panda::JSValueRef::Undefined(vm);
1028 }
1029 if (LessOrEqual(maxFontScale, 1.0f)) {
1030 maxFontScale = 1.0f;
1031 }
1032 GetArkUINodeModifiers()->getSearchModifier()->setSearchMaxFontScale(
1033 nativeNode, static_cast<float>(maxFontScale), AceType::RawPtr(resourceObject));
1034 return panda::JSValueRef::Undefined(vm);
1035 }
1036
ResetMaxFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)1037 ArkUINativeModuleValue SearchBridge::ResetMaxFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
1038 {
1039 EcmaVM* vm = runtimeCallInfo->GetVM();
1040 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1041 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1042 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1043 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1044 GetArkUINodeModifiers()->getSearchModifier()->resetSearchMaxFontScale(nativeNode);
1045 return panda::JSValueRef::Undefined(vm);
1046 }
SetHalfLeading(ArkUIRuntimeCallInfo * runtimeCallInfo)1047 ArkUINativeModuleValue SearchBridge::SetHalfLeading(ArkUIRuntimeCallInfo* runtimeCallInfo)
1048 {
1049 EcmaVM* vm = runtimeCallInfo->GetVM();
1050 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1051 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1052 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1053 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1054 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1055 if (secondArg->IsBoolean()) {
1056 uint32_t halfLeading = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
1057 GetArkUINodeModifiers()->getSearchModifier()->setSearchHalfLeading(nativeNode, halfLeading);
1058 } else {
1059 GetArkUINodeModifiers()->getSearchModifier()->resetSearchHalfLeading(nativeNode);
1060 }
1061 return panda::JSValueRef::Undefined(vm);
1062 }
1063
ResetHalfLeading(ArkUIRuntimeCallInfo * runtimeCallInfo)1064 ArkUINativeModuleValue SearchBridge::ResetHalfLeading(ArkUIRuntimeCallInfo* runtimeCallInfo)
1065 {
1066 EcmaVM* vm = runtimeCallInfo->GetVM();
1067 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1068 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1069 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1070 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1071 GetArkUINodeModifiers()->getSearchModifier()->resetSearchHalfLeading(nativeNode);
1072 return panda::JSValueRef::Undefined(vm);
1073 }
1074
ResetSearchMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1075 ArkUINativeModuleValue SearchBridge::ResetSearchMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1076 {
1077 EcmaVM* vm = runtimeCallInfo->GetVM();
1078 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1079 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1080 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1081 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1082 GetArkUINodeModifiers()->getSearchModifier()->resetSearchAdaptMaxFontSize(nativeNode);
1083 return panda::JSValueRef::Undefined(vm);
1084 }
SetInputFilter(ArkUIRuntimeCallInfo * runtimeCallInfo)1085 ArkUINativeModuleValue SearchBridge::SetInputFilter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1086 {
1087 EcmaVM* vm = runtimeCallInfo->GetVM();
1088 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1089
1090 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1091 CHECK_NULL_RETURN(!firstArg.IsNull(), panda::JSValueRef::Undefined(vm));
1092 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1093 auto* nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1094 CHECK_NULL_RETURN(nativeNode, panda::JSValueRef::Undefined(vm));
1095 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1096 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1097 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1098 std::string inputFilter;
1099 if (valueArg->IsUndefined() || valueArg->IsNull()) {
1100 SearchModelNG::SetInputFilter(frameNode, inputFilter, nullptr);
1101 return panda::JSValueRef::Undefined(vm);
1102 }
1103 if (ArkTSUtils::ParseJsString(vm, valueArg, inputFilter)) {
1104 if (!Framework::CheckRegexValid(inputFilter)) {
1105 inputFilter = "";
1106 }
1107
1108 Local<JSValueRef> callBackArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1109 CHECK_NULL_RETURN(callBackArg->IsFunction(vm), panda::JSValueRef::Undefined(vm));
1110 auto obj = callBackArg->ToObject(vm);
1111 auto containerId = Container::CurrentId();
1112 panda::Local<panda::FunctionRef> func = obj;
1113 auto onError = [vm, func = panda::CopyableGlobal(vm, func), node = AceType::WeakClaim(frameNode),
1114 containerId](const std::u16string& info) {
1115 panda::LocalScope pandaScope(vm);
1116 panda::TryCatch trycatch(vm);
1117 ContainerScope scope(containerId);
1118 PipelineContext::SetCallBackNode(node);
1119 auto eventObj = Framework::ToJSValue(info);
1120 panda::Local<panda::JSValueRef> params[1] = { eventObj };
1121 func->Call(vm, func.ToLocal(), params, 1);
1122 };
1123 SearchModelNG::SetInputFilter(frameNode, inputFilter, std::move(onError));
1124 }
1125 return panda::JSValueRef::Undefined(vm);
1126 }
1127
ResetInputFilter(ArkUIRuntimeCallInfo * runtimeCallInfo)1128 ArkUINativeModuleValue SearchBridge::ResetInputFilter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1129 {
1130 EcmaVM* vm = runtimeCallInfo->GetVM();
1131 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1132 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1133 CHECK_NULL_RETURN(!firstArg.IsNull(), panda::JSValueRef::Undefined(vm));
1134 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1135 auto* nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1136 CHECK_NULL_RETURN(nativeNode, panda::JSValueRef::Undefined(vm));
1137 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1138 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1139 std::string inputFilter;
1140 NG::SearchModelNG::SetInputFilter(frameNode, inputFilter, nullptr);
1141 return panda::JSValueRef::Undefined(vm);
1142 }
1143
SetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1144 ArkUINativeModuleValue SearchBridge::SetSelectedBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1145 {
1146 EcmaVM* vm = runtimeCallInfo->GetVM();
1147 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1148 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1149 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1150 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1151 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1152 Color color;
1153 uint32_t result;
1154 RefPtr<ResourceObject> resourceObject;
1155 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
1156 if (ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, resourceObject, nodeInfo)) {
1157 result = color.GetValue();
1158 GetArkUINodeModifiers()->getSearchModifier()->setSearchSelectedBackgroundColor(
1159 nativeNode, result, AceType::RawPtr(resourceObject));
1160 } else {
1161 GetArkUINodeModifiers()->getSearchModifier()->resetSearchSelectedBackgroundColor(nativeNode);
1162 }
1163 return panda::JSValueRef::Undefined(vm);
1164 }
1165
ResetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1166 ArkUINativeModuleValue SearchBridge::ResetSelectedBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1167 {
1168 EcmaVM* vm = runtimeCallInfo->GetVM();
1169 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1170 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1171 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1172 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1173 GetArkUINodeModifiers()->getSearchModifier()->resetSearchSelectedBackgroundColor(nativeNode);
1174 return panda::JSValueRef::Undefined(vm);
1175 }
1176
SetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)1177 ArkUINativeModuleValue SearchBridge::SetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
1178 {
1179 EcmaVM* vm = runtimeCallInfo->GetVM();
1180 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1181 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1182 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1183 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1184 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1185 CalcDimension indent;
1186 RefPtr<ResourceObject> resourceObject;
1187 if (!ArkTSUtils::ParseJsDimensionNG(vm, secondArg, indent, DimensionUnit::VP, resourceObject, true)) {
1188 indent.Reset();
1189 }
1190
1191 GetArkUINodeModifiers()->getSearchModifier()->setSearchTextIndent(
1192 nativeNode, indent.Value(), static_cast<int8_t>(indent.Unit()), AceType::RawPtr(resourceObject));
1193 return panda::JSValueRef::Undefined(vm);
1194 }
1195
ResetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)1196 ArkUINativeModuleValue SearchBridge::ResetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
1197 {
1198 EcmaVM* vm = runtimeCallInfo->GetVM();
1199 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1200 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1201 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1202 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1203 GetArkUINodeModifiers()->getSearchModifier()->resetSearchTextIndent(nativeNode);
1204 return panda::JSValueRef::Undefined(vm);
1205 }
1206
SetMaxLength(ArkUIRuntimeCallInfo * runtimeCallInfo)1207 ArkUINativeModuleValue SearchBridge::SetMaxLength(ArkUIRuntimeCallInfo *runtimeCallInfo)
1208 {
1209 EcmaVM *vm = runtimeCallInfo->GetVM();
1210 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1211 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1212 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1213 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1214 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1215 if (!secondArg->IsNumber()) {
1216 GetArkUINodeModifiers()->getSearchModifier()->resetSearchMaxLength(nativeNode);
1217 } else {
1218 int32_t maxLength = secondArg->Int32Value(vm);
1219 if (std::isinf(static_cast<float>(secondArg->ToNumber(vm)->Value()))) {
1220 maxLength = INT32_MAX; // Infinity
1221 }
1222 if (maxLength >= 0) {
1223 GetArkUINodeModifiers()->getSearchModifier()->setSearchMaxLength(nativeNode, maxLength);
1224 } else {
1225 GetArkUINodeModifiers()->getSearchModifier()->resetSearchMaxLength(nativeNode);
1226 }
1227 }
1228 return panda::JSValueRef::Undefined(vm);
1229 }
1230
ResetMaxLength(ArkUIRuntimeCallInfo * runtimeCallInfo)1231 ArkUINativeModuleValue SearchBridge::ResetMaxLength(ArkUIRuntimeCallInfo *runtimeCallInfo)
1232 {
1233 EcmaVM *vm = runtimeCallInfo->GetVM();
1234 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1235 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1236 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1237 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1238 GetArkUINodeModifiers()->getSearchModifier()->resetSearchMaxLength(nativeNode);
1239 return panda::JSValueRef::Undefined(vm);
1240 }
1241
SetType(ArkUIRuntimeCallInfo * runtimeCallInfo)1242 ArkUINativeModuleValue SearchBridge::SetType(ArkUIRuntimeCallInfo* runtimeCallInfo)
1243 {
1244 EcmaVM *vm = runtimeCallInfo->GetVM();
1245 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1246 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1247 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1248 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1249 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1250 if (secondArg->IsNumber()) {
1251 int32_t value = secondArg->Int32Value(vm);
1252 GetArkUINodeModifiers()->getSearchModifier()->setSearchType(nativeNode, value);
1253 } else {
1254 GetArkUINodeModifiers()->getSearchModifier()->resetSearchType(nativeNode);
1255 }
1256 return panda::JSValueRef::Undefined(vm);
1257 }
1258
ResetType(ArkUIRuntimeCallInfo * runtimeCallInfo)1259 ArkUINativeModuleValue SearchBridge::ResetType(ArkUIRuntimeCallInfo* runtimeCallInfo)
1260 {
1261 EcmaVM* vm = runtimeCallInfo->GetVM();
1262 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1263 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1264 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1265 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1266 GetArkUINodeModifiers()->getSearchModifier()->resetSearchType(nativeNode);
1267 return panda::JSValueRef::Undefined(vm);
1268 }
1269
SetOnEditChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1270 ArkUINativeModuleValue SearchBridge::SetOnEditChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1271 {
1272 EcmaVM *vm = runtimeCallInfo->GetVM();
1273 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1274 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1275 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1276 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1277 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1278 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1279 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1280 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1281 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnEditChange(nativeNode);
1282 return panda::JSValueRef::Undefined(vm);
1283 }
1284 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1285 std::function<void(bool)> callback = [vm, frameNode,
1286 func = panda::CopyableGlobal(vm, func)](bool isInEditStatus) {
1287 panda::LocalScope pandaScope(vm);
1288 panda::TryCatch trycatch(vm);
1289 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1290 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1291 panda::BooleanRef::New(vm, isInEditStatus) };
1292 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1293 };
1294 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnEditChange(
1295 nativeNode, reinterpret_cast<void*>(&callback));
1296 return panda::JSValueRef::Undefined(vm);
1297 }
1298
ResetOnEditChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1299 ArkUINativeModuleValue SearchBridge::ResetOnEditChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1300 {
1301 EcmaVM* vm = runtimeCallInfo->GetVM();
1302 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1303 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1304 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1305 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1306 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnEditChange(nativeNode);
1307 return panda::JSValueRef::Undefined(vm);
1308 }
1309
SetOnSubmit(ArkUIRuntimeCallInfo * runtimeCallInfo)1310 ArkUINativeModuleValue SearchBridge::SetOnSubmit(ArkUIRuntimeCallInfo* runtimeCallInfo)
1311 {
1312 EcmaVM *vm = runtimeCallInfo->GetVM();
1313 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1314 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1315 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1316 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1317 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1318 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1319 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1320 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1321 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnSubmitWithEvent(nativeNode);
1322 return panda::JSValueRef::Undefined(vm);
1323 }
1324 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1325 std::function<void(const std::u16string&, NG::TextFieldCommonEvent&)> callback = [vm, frameNode,
1326 func = panda::CopyableGlobal(vm, func)](const std::u16string& info, NG::TextFieldCommonEvent& event) {
1327 panda::LocalScope pandaScope(vm);
1328 panda::TryCatch trycatch(vm);
1329 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1330 const char* keys[] = { "text", "keepEditableState" };
1331 Local<JSValueRef> values[] = { panda::StringRef::NewFromUtf16(vm, event.GetText().c_str()),
1332 panda::FunctionRef::New(vm, Framework::JSTextField::JsKeepEditableState) };
1333 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1334 eventObject->SetNativePointerFieldCount(vm, NUM_1);
1335 eventObject->SetNativePointerField(vm, NUM_0, static_cast<void*>(&event));
1336 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1337 panda::StringRef::NewFromUtf16(vm, info.c_str()), eventObject };
1338 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1339 };
1340 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnSubmitWithEvent(
1341 nativeNode, reinterpret_cast<void*>(&callback));
1342 return panda::JSValueRef::Undefined(vm);
1343 }
1344
ResetOnSubmit(ArkUIRuntimeCallInfo * runtimeCallInfo)1345 ArkUINativeModuleValue SearchBridge::ResetOnSubmit(ArkUIRuntimeCallInfo* runtimeCallInfo)
1346 {
1347 EcmaVM* vm = runtimeCallInfo->GetVM();
1348 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1349 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1350 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1351 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1352 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnSubmitWithEvent(nativeNode);
1353 return panda::JSValueRef::Undefined(vm);
1354 }
1355
SetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1356 ArkUINativeModuleValue SearchBridge::SetOnCopy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1357 {
1358 EcmaVM *vm = runtimeCallInfo->GetVM();
1359 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1360 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1361 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1362 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1363 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1364 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1365 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1366 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1367 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnCopy(nativeNode);
1368 return panda::JSValueRef::Undefined(vm);
1369 }
1370 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1371 std::function<void(const std::u16string&)> callback = [vm, frameNode,
1372 func = panda::CopyableGlobal(vm, func)](const std::u16string& copyStr) {
1373 panda::LocalScope pandaScope(vm);
1374 panda::TryCatch trycatch(vm);
1375 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1376 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1377 panda::StringRef::NewFromUtf16(vm, copyStr.c_str()) };
1378 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1379 };
1380 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnCopy(nativeNode, reinterpret_cast<void*>(&callback));
1381 return panda::JSValueRef::Undefined(vm);
1382 }
1383
ResetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1384 ArkUINativeModuleValue SearchBridge::ResetOnCopy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1385 {
1386 EcmaVM* vm = runtimeCallInfo->GetVM();
1387 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1388 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1389 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1390 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1391 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnCopy(nativeNode);
1392 return panda::JSValueRef::Undefined(vm);
1393 }
1394
SetOnCut(ArkUIRuntimeCallInfo * runtimeCallInfo)1395 ArkUINativeModuleValue SearchBridge::SetOnCut(ArkUIRuntimeCallInfo* runtimeCallInfo)
1396 {
1397 EcmaVM *vm = runtimeCallInfo->GetVM();
1398 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1399 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1400 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1401 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1402 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1403 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1404 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1405 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1406 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnCut(nativeNode);
1407 return panda::JSValueRef::Undefined(vm);
1408 }
1409 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1410 std::function<void(const std::u16string&)> callback = [vm, frameNode,
1411 func = panda::CopyableGlobal(vm, func)](const std::u16string& cutStr) {
1412 panda::LocalScope pandaScope(vm);
1413 panda::TryCatch trycatch(vm);
1414 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1415 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1416 panda::StringRef::NewFromUtf16(vm, cutStr.c_str()) };
1417 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1418 };
1419 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnCut(nativeNode, reinterpret_cast<void*>(&callback));
1420 return panda::JSValueRef::Undefined(vm);
1421 }
1422
ResetOnCut(ArkUIRuntimeCallInfo * runtimeCallInfo)1423 ArkUINativeModuleValue SearchBridge::ResetOnCut(ArkUIRuntimeCallInfo* runtimeCallInfo)
1424 {
1425 EcmaVM* vm = runtimeCallInfo->GetVM();
1426 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1427 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1428 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1429 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1430 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnCut(nativeNode);
1431 return panda::JSValueRef::Undefined(vm);
1432 }
1433
SetOnPaste(ArkUIRuntimeCallInfo * runtimeCallInfo)1434 ArkUINativeModuleValue SearchBridge::SetOnPaste(ArkUIRuntimeCallInfo* runtimeCallInfo)
1435 {
1436 EcmaVM *vm = runtimeCallInfo->GetVM();
1437 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1438 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1439 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1440 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1441 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1442 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1443 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1444 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1445 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnPaste(nativeNode);
1446 return panda::JSValueRef::Undefined(vm);
1447 }
1448 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1449 std::function<void(const std::u16string&, NG::TextCommonEvent&)> callback = [vm, frameNode,
1450 func = panda::CopyableGlobal(vm, func)](const std::u16string& val, NG::TextCommonEvent& info) {
1451 panda::LocalScope pandaScope(vm);
1452 panda::TryCatch trycatch(vm);
1453 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1454 auto eventObject = panda::ObjectRef::New(vm);
1455 eventObject->SetNativePointerFieldCount(vm, 1);
1456 eventObject->Set(vm, panda::StringRef::NewFromUtf8(vm, "preventDefault"),
1457 panda::FunctionRef::New(vm, Framework::JsPreventDefault));
1458 eventObject->SetNativePointerField(vm, 0, static_cast<void*>(&info));
1459 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1460 panda::StringRef::NewFromUtf16(vm, val.c_str()), eventObject };
1461 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1462 };
1463 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnPaste(
1464 nativeNode, reinterpret_cast<void*>(&callback));
1465 return panda::JSValueRef::Undefined(vm);
1466 }
1467
ResetOnPaste(ArkUIRuntimeCallInfo * runtimeCallInfo)1468 ArkUINativeModuleValue SearchBridge::ResetOnPaste(ArkUIRuntimeCallInfo* runtimeCallInfo)
1469 {
1470 EcmaVM* vm = runtimeCallInfo->GetVM();
1471 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1472 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1473 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1474 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1475 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnPaste(nativeNode);
1476 return panda::JSValueRef::Undefined(vm);
1477 }
1478
SetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1479 ArkUINativeModuleValue SearchBridge::SetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1480 {
1481 EcmaVM *vm = runtimeCallInfo->GetVM();
1482 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1483 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1484 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1485 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1486 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1487 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1488 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1489 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1490 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnChange(nativeNode);
1491 return panda::JSValueRef::Undefined(vm);
1492 }
1493 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1494 std::function<void(const ChangeValueInfo&)> callback = [vm, frameNode,
1495 func = panda::CopyableGlobal(vm, func)](const ChangeValueInfo& changeValueInfo) {
1496 panda::LocalScope pandaScope(vm);
1497 panda::TryCatch trycatch(vm);
1498 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1499 auto eventObject = CommonBridge::CreateChangeValueInfoObj(vm, changeValueInfo);
1500 auto contentObj = eventObject->Get(vm, "content");
1501 auto previewTextObj = eventObject->Get(vm, "previewText");
1502 auto optionsObj = eventObject->Get(vm, "options");
1503 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_3] = { contentObj, previewTextObj, optionsObj };
1504 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_3);
1505 };
1506 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnChange(
1507 nativeNode, reinterpret_cast<void*>(&callback));
1508 return panda::JSValueRef::Undefined(vm);
1509 }
1510
ResetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1511 ArkUINativeModuleValue SearchBridge::ResetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1512 {
1513 EcmaVM* vm = runtimeCallInfo->GetVM();
1514 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1515 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1516 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1517 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1518 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnChange(nativeNode);
1519 return panda::JSValueRef::Undefined(vm);
1520 }
1521
SetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1522 ArkUINativeModuleValue SearchBridge::SetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1523 {
1524 EcmaVM *vm = runtimeCallInfo->GetVM();
1525 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1526 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1527 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1528 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1529 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1530 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1531 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1532 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1533 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnTextSelectionChange(nativeNode);
1534 return panda::JSValueRef::Undefined(vm);
1535 }
1536 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1537 std::function<void(int32_t, int32_t)> callback = [vm, frameNode,
1538 func = panda::CopyableGlobal(vm, func)](int32_t selectionStart, int selectionEnd) {
1539 panda::LocalScope pandaScope(vm);
1540 panda::TryCatch trycatch(vm);
1541 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1542 panda::Local<panda::NumberRef> startParam = panda::NumberRef::New(vm, selectionStart);
1543 panda::Local<panda::NumberRef> endParam = panda::NumberRef::New(vm, selectionEnd);
1544 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = { startParam, endParam };
1545 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1546 };
1547 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnTextSelectionChange(
1548 nativeNode, reinterpret_cast<void*>(&callback));
1549 return panda::JSValueRef::Undefined(vm);
1550 }
1551
ResetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1552 ArkUINativeModuleValue SearchBridge::ResetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1553 {
1554 EcmaVM* vm = runtimeCallInfo->GetVM();
1555 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1556 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1557 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1558 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1559 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnTextSelectionChange(nativeNode);
1560 return panda::JSValueRef::Undefined(vm);
1561 }
1562
SetOnContentScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1563 ArkUINativeModuleValue SearchBridge::SetOnContentScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1564 {
1565 EcmaVM *vm = runtimeCallInfo->GetVM();
1566 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1567 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1568 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1569 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1570 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1571 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1572 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1573 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1574 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnContentScroll(nativeNode);
1575 return panda::JSValueRef::Undefined(vm);
1576 }
1577 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1578 std::function<void(float, float)> callback = [vm, frameNode,
1579 func = panda::CopyableGlobal(vm, func)](float totalOffsetX, float totalOffsetY) {
1580 panda::LocalScope pandaScope(vm);
1581 panda::TryCatch trycatch(vm);
1582 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1583 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1584 panda::NumberRef::New(vm, totalOffsetX), panda::NumberRef::New(vm, totalOffsetY) };
1585 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1586 };
1587 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnContentScroll(
1588 nativeNode, reinterpret_cast<void*>(&callback));
1589 return panda::JSValueRef::Undefined(vm);
1590 }
1591
ResetOnContentScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1592 ArkUINativeModuleValue SearchBridge::ResetOnContentScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1593 {
1594 EcmaVM* vm = runtimeCallInfo->GetVM();
1595 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1596 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1597 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1598 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1599 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnContentScroll(nativeNode);
1600 return panda::JSValueRef::Undefined(vm);
1601 }
1602
SetShowCounter(ArkUIRuntimeCallInfo * runtimeCallInfo)1603 ArkUINativeModuleValue SearchBridge::SetShowCounter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1604 {
1605 EcmaVM *vm = runtimeCallInfo->GetVM();
1606 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1607 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1608 Local<JSValueRef> showCounterArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1609 Local<JSValueRef> highlightBorderArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1610 Local<JSValueRef> thresholdArg = runtimeCallInfo->GetCallArgRef(NUM_3);
1611 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1612 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1613 auto showCounter = false;
1614 if (showCounterArg->IsBoolean()) {
1615 showCounter = showCounterArg->BooleaValue(vm);
1616 }
1617 auto highlightBorder = true;
1618 if (highlightBorderArg->IsBoolean()) {
1619 highlightBorder = highlightBorderArg->BooleaValue(vm);
1620 }
1621 auto thresholdValue = DEFAULT_MODE;
1622 if (thresholdArg->IsNumber()) {
1623 thresholdValue = static_cast<uint32_t>(thresholdArg->Int32Value(vm));
1624 if (thresholdValue < MINI_VALID_VALUE || thresholdValue > MAX_VALID_VALUE) {
1625 thresholdValue = ILLEGAL_VALUE;
1626 showCounter = false;
1627 }
1628 }
1629 GetArkUINodeModifiers()->getSearchModifier()->setSearchShowCounter(
1630 nativeNode, static_cast<int32_t>(showCounter), thresholdValue, static_cast<int32_t>(highlightBorder));
1631 return panda::JSValueRef::Undefined(vm);
1632 }
1633
ResetShowCounter(ArkUIRuntimeCallInfo * runtimeCallInfo)1634 ArkUINativeModuleValue SearchBridge::ResetShowCounter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1635 {
1636 EcmaVM* vm = runtimeCallInfo->GetVM();
1637 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1638 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1639 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1640 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1641 GetArkUINodeModifiers()->getSearchModifier()->resetSearchShowCounter(nativeNode);
1642 return panda::JSValueRef::Undefined(vm);
1643 }
1644
SetOnWillChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1645 ArkUINativeModuleValue SearchBridge::SetOnWillChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1646 {
1647 EcmaVM *vm = runtimeCallInfo->GetVM();
1648 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1649 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1650 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1651 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1652 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1653 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1654 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1655 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1656 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnWillChange(nativeNode);
1657 return panda::JSValueRef::Undefined(vm);
1658 }
1659 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1660 std::function<bool(const ChangeValueInfo&)> callback = [vm, frameNode,
1661 func = panda::CopyableGlobal(vm, func)](const ChangeValueInfo& changeValueInfo) -> bool {
1662 panda::LocalScope pandaScope(vm);
1663 panda::TryCatch trycatch(vm);
1664 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1665 auto eventObject = CommonBridge::CreateChangeValueInfoObj(vm, changeValueInfo);
1666 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
1667 auto ret = func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1668 if (ret->IsBoolean()) {
1669 return ret->ToBoolean(vm)->Value();
1670 }
1671 return true;
1672 };
1673 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnWillChange(nativeNode,
1674 reinterpret_cast<intptr_t>(&callback));
1675 return panda::JSValueRef::Undefined(vm);
1676 }
1677
ResetOnWillChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1678 ArkUINativeModuleValue SearchBridge::ResetOnWillChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1679 {
1680 EcmaVM* vm = runtimeCallInfo->GetVM();
1681 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1682 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1683 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1684 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1685 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnWillChange(nativeNode);
1686 return panda::JSValueRef::Undefined(vm);
1687 }
1688
SetOnWillInsert(ArkUIRuntimeCallInfo * runtimeCallInfo)1689 ArkUINativeModuleValue SearchBridge::SetOnWillInsert(ArkUIRuntimeCallInfo* runtimeCallInfo)
1690 {
1691 EcmaVM *vm = runtimeCallInfo->GetVM();
1692 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1693 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1694 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1695 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1696 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1697 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1698 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1699 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1700 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnWillInsert(nativeNode);
1701 return panda::JSValueRef::Undefined(vm);
1702 }
1703 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1704 std::function<bool(const InsertValueInfo&)> callback = [vm, frameNode,
1705 func = panda::CopyableGlobal(vm, func)](const InsertValueInfo& insertValue) -> bool {
1706 panda::LocalScope pandaScope(vm);
1707 panda::TryCatch trycatch(vm);
1708 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1709 const char* keys[] = { "insertOffset", "insertValue" };
1710 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, insertValue.insertOffset),
1711 panda::StringRef::NewFromUtf16(vm, insertValue.insertValue.c_str()) };
1712 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1713 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
1714 auto ret = func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1715 if (ret->IsBoolean()) {
1716 return ret->ToBoolean(vm)->Value();
1717 }
1718 return true;
1719 };
1720 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnWillInsert(nativeNode,
1721 reinterpret_cast<intptr_t>(&callback));
1722 return panda::JSValueRef::Undefined(vm);
1723 }
1724
ResetOnWillInsert(ArkUIRuntimeCallInfo * runtimeCallInfo)1725 ArkUINativeModuleValue SearchBridge::ResetOnWillInsert(ArkUIRuntimeCallInfo* runtimeCallInfo)
1726 {
1727 EcmaVM* vm = runtimeCallInfo->GetVM();
1728 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1729 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1730 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1731 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1732 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnWillInsert(nativeNode);
1733 return panda::JSValueRef::Undefined(vm);
1734 }
1735
SetOnDidInsert(ArkUIRuntimeCallInfo * runtimeCallInfo)1736 ArkUINativeModuleValue SearchBridge::SetOnDidInsert(ArkUIRuntimeCallInfo* runtimeCallInfo)
1737 {
1738 EcmaVM *vm = runtimeCallInfo->GetVM();
1739 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1740 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1741 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1742 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1743 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1744 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1745 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1746 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1747 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnDidInsert(nativeNode);
1748 return panda::JSValueRef::Undefined(vm);
1749 }
1750 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1751 std::function<void(const InsertValueInfo&)> callback = [vm, frameNode,
1752 func = panda::CopyableGlobal(vm, func)](const InsertValueInfo& insertValue) {
1753 panda::LocalScope pandaScope(vm);
1754 panda::TryCatch trycatch(vm);
1755 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1756 const char* keys[] = { "insertOffset", "insertValue" };
1757 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, insertValue.insertOffset),
1758 panda::StringRef::NewFromUtf16(vm, insertValue.insertValue.c_str()) };
1759 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1760 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
1761 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1762 };
1763 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnDidInsert(nativeNode,
1764 reinterpret_cast<intptr_t>(&callback));
1765 return panda::JSValueRef::Undefined(vm);
1766 }
1767
ResetOnDidInsert(ArkUIRuntimeCallInfo * runtimeCallInfo)1768 ArkUINativeModuleValue SearchBridge::ResetOnDidInsert(ArkUIRuntimeCallInfo* runtimeCallInfo)
1769 {
1770 EcmaVM* vm = runtimeCallInfo->GetVM();
1771 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1772 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1773 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1774 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1775 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnDidInsert(nativeNode);
1776 return panda::JSValueRef::Undefined(vm);
1777 }
1778
SetOnWillDelete(ArkUIRuntimeCallInfo * runtimeCallInfo)1779 ArkUINativeModuleValue SearchBridge::SetOnWillDelete(ArkUIRuntimeCallInfo* runtimeCallInfo)
1780 {
1781 EcmaVM *vm = runtimeCallInfo->GetVM();
1782 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1783 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1784 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1785 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1786 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1787 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1788 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1789 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1790 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnWillDelete(nativeNode);
1791 return panda::JSValueRef::Undefined(vm);
1792 }
1793 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1794 std::function<bool(const DeleteValueInfo&)> callback = [vm, frameNode,
1795 func = panda::CopyableGlobal(vm, func)](const DeleteValueInfo& deleteValue) -> bool {
1796 panda::LocalScope pandaScope(vm);
1797 panda::TryCatch trycatch(vm);
1798 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1799 const char* keys[] = { "deleteOffset", "direction", "deleteValue" };
1800 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, deleteValue.deleteOffset),
1801 panda::NumberRef::New(vm, static_cast<int32_t>(deleteValue.direction)),
1802 panda::StringRef::NewFromUtf16(vm, deleteValue.deleteValue.c_str()) };
1803 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1804 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
1805 auto ret = func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1806 if (ret->IsBoolean()) {
1807 return ret->ToBoolean(vm)->Value();
1808 }
1809 return true;
1810 };
1811 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnWillDelete(nativeNode,
1812 reinterpret_cast<intptr_t>(&callback));
1813 return panda::JSValueRef::Undefined(vm);
1814 }
1815
ResetOnWillDelete(ArkUIRuntimeCallInfo * runtimeCallInfo)1816 ArkUINativeModuleValue SearchBridge::ResetOnWillDelete(ArkUIRuntimeCallInfo* runtimeCallInfo)
1817 {
1818 EcmaVM* vm = runtimeCallInfo->GetVM();
1819 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1820 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1821 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1822 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1823 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnWillDelete(nativeNode);
1824 return panda::JSValueRef::Undefined(vm);
1825 }
1826
SetOnDidDelete(ArkUIRuntimeCallInfo * runtimeCallInfo)1827 ArkUINativeModuleValue SearchBridge::SetOnDidDelete(ArkUIRuntimeCallInfo* runtimeCallInfo)
1828 {
1829 EcmaVM *vm = runtimeCallInfo->GetVM();
1830 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1831 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1832 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1833 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1834 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1835 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1836 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1837 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1838 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnDidDelete(nativeNode);
1839 return panda::JSValueRef::Undefined(vm);
1840 }
1841 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1842 std::function<void(const DeleteValueInfo&)> callback = [vm, frameNode,
1843 func = panda::CopyableGlobal(vm, func)](const DeleteValueInfo& deleteValue) {
1844 panda::LocalScope pandaScope(vm);
1845 panda::TryCatch trycatch(vm);
1846 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1847 const char* keys[] = { "deleteOffset", "direction", "deleteValue" };
1848 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, deleteValue.deleteOffset),
1849 panda::NumberRef::New(vm, static_cast<int32_t>(deleteValue.direction)),
1850 panda::StringRef::NewFromUtf16(vm, deleteValue.deleteValue.c_str()) };
1851 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1852 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
1853 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1854 };
1855 GetArkUINodeModifiers()->getSearchModifier()->setSearchOnDidDelete(nativeNode,
1856 reinterpret_cast<intptr_t>(&callback));
1857 return panda::JSValueRef::Undefined(vm);
1858 }
1859
ResetOnDidDelete(ArkUIRuntimeCallInfo * runtimeCallInfo)1860 ArkUINativeModuleValue SearchBridge::ResetOnDidDelete(ArkUIRuntimeCallInfo* runtimeCallInfo)
1861 {
1862 EcmaVM* vm = runtimeCallInfo->GetVM();
1863 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1864 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1865 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1866 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1867 GetArkUINodeModifiers()->getSearchModifier()->resetSearchOnDidDelete(nativeNode);
1868 return panda::JSValueRef::Undefined(vm);
1869 }
1870
SetEnablePreviewText(ArkUIRuntimeCallInfo * runtimeCallInfo)1871 ArkUINativeModuleValue SearchBridge::SetEnablePreviewText(ArkUIRuntimeCallInfo* runtimeCallInfo)
1872 {
1873 EcmaVM *vm = runtimeCallInfo->GetVM();
1874 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1875 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1876 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1877 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1878 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1879
1880 if (secondArg->IsBoolean()) {
1881 uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
1882 GetArkUINodeModifiers()->getSearchModifier()->setSearchEnablePreviewText(nativeNode, value);
1883 } else {
1884 GetArkUINodeModifiers()->getSearchModifier()->resetSearchEnablePreviewText(nativeNode);
1885 }
1886 return panda::JSValueRef::Undefined(vm);
1887 }
1888
ResetEnablePreviewText(ArkUIRuntimeCallInfo * runtimeCallInfo)1889 ArkUINativeModuleValue SearchBridge::ResetEnablePreviewText(ArkUIRuntimeCallInfo* runtimeCallInfo)
1890 {
1891 EcmaVM* vm = runtimeCallInfo->GetVM();
1892 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1893 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1894 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1895 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1896 GetArkUINodeModifiers()->getSearchModifier()->resetSearchEnablePreviewText(nativeNode);
1897 return panda::JSValueRef::Undefined(vm);
1898 }
1899
SetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)1900 ArkUINativeModuleValue SearchBridge::SetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
1901 {
1902 EcmaVM* vm = runtimeCallInfo->GetVM();
1903 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1904 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1905 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1906 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1907 NG::OnCreateMenuCallback onCreateMenuCallback;
1908 NG::OnMenuItemClickCallback onMenuItemClickCallback;
1909 NG::OnPrepareMenuCallback onPrepareMenuCallback;
1910 if (!ArkTSUtils::ParseSelectionMenuOptions(
1911 runtimeCallInfo, vm, onCreateMenuCallback, onMenuItemClickCallback, onPrepareMenuCallback)) {
1912 GetArkUINodeModifiers()->getSearchModifier()->resetSearchSelectionMenuOptions(nativeNode);
1913 return panda::JSValueRef::Undefined(vm);
1914 }
1915 GetArkUINodeModifiers()->getSearchModifier()->setSearchSelectionMenuOptions(nativeNode,
1916 reinterpret_cast<void*>(&onCreateMenuCallback), reinterpret_cast<void*>(&onMenuItemClickCallback),
1917 reinterpret_cast<void*>(&onPrepareMenuCallback));
1918 return panda::JSValueRef::Undefined(vm);
1919 }
1920
ResetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)1921 ArkUINativeModuleValue SearchBridge::ResetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
1922 {
1923 EcmaVM* vm = runtimeCallInfo->GetVM();
1924 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1925 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1926 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1927 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1928 GetArkUINodeModifiers()->getSearchModifier()->resetSearchSelectionMenuOptions(nativeNode);
1929 return panda::JSValueRef::Undefined(vm);
1930 }
1931
SetSearchInspectorId(ArkUIRuntimeCallInfo * runtimeCallInfo)1932 ArkUINativeModuleValue SearchBridge::SetSearchInspectorId(ArkUIRuntimeCallInfo* runtimeCallInfo)
1933 {
1934 EcmaVM* vm = runtimeCallInfo->GetVM();
1935 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1936 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1937 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1938 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1939 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1940 if (secondArg->IsString(vm)) {
1941 std::string stringValue = secondArg->ToString(vm)->ToString(vm);
1942 GetArkUINodeModifiers()->getSearchModifier()->setSearchInspectorId(nativeNode, stringValue.c_str());
1943 } else {
1944 GetArkUINodeModifiers()->getSearchModifier()->resetSearchInspectorId(nativeNode);
1945 }
1946 return panda::JSValueRef::Undefined(vm);
1947 }
1948
ResetSearchInspectorId(ArkUIRuntimeCallInfo * runtimeCallInfo)1949 ArkUINativeModuleValue SearchBridge::ResetSearchInspectorId(ArkUIRuntimeCallInfo* runtimeCallInfo)
1950 {
1951 EcmaVM* vm = runtimeCallInfo->GetVM();
1952 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1953 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1954 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1955 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1956 GetArkUINodeModifiers()->getSearchModifier()->resetSearchInspectorId(nativeNode);
1957 return panda::JSValueRef::Undefined(vm);
1958 }
1959
SetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)1960 ArkUINativeModuleValue SearchBridge::SetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
1961 {
1962 EcmaVM* vm = runtimeCallInfo->GetVM();
1963 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1964 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1965 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1966 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1967 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1968
1969 if (secondArg->IsBoolean()) {
1970 uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
1971 GetArkUINodeModifiers()->getSearchModifier()->setSearchEnableHapticFeedback(nativeNode, value);
1972 } else {
1973 GetArkUINodeModifiers()->getSearchModifier()->resetSearchEnableHapticFeedback(nativeNode);
1974 }
1975 return panda::JSValueRef::Undefined(vm);
1976 }
1977
ResetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)1978 ArkUINativeModuleValue SearchBridge::ResetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
1979 {
1980 EcmaVM* vm = runtimeCallInfo->GetVM();
1981 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1982 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1983 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1984 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1985 GetArkUINodeModifiers()->getSearchModifier()->resetSearchEnableHapticFeedback(nativeNode);
1986 return panda::JSValueRef::Undefined(vm);
1987 }
1988
SetStopBackPress(ArkUIRuntimeCallInfo * runtimeCallInfo)1989 ArkUINativeModuleValue SearchBridge::SetStopBackPress(ArkUIRuntimeCallInfo* runtimeCallInfo)
1990 {
1991 EcmaVM* vm = runtimeCallInfo->GetVM();
1992 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1993 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1994 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1995 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1996 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1997
1998 if (secondArg->IsBoolean()) {
1999 uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2000 GetArkUINodeModifiers()->getSearchModifier()->setStopBackPress(nativeNode, value);
2001 } else {
2002 GetArkUINodeModifiers()->getSearchModifier()->resetStopBackPress(nativeNode);
2003 }
2004 return panda::JSValueRef::Undefined(vm);
2005 }
2006
ResetStopBackPress(ArkUIRuntimeCallInfo * runtimeCallInfo)2007 ArkUINativeModuleValue SearchBridge::ResetStopBackPress(ArkUIRuntimeCallInfo* runtimeCallInfo)
2008 {
2009 EcmaVM* vm = runtimeCallInfo->GetVM();
2010 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2011 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2012 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2013 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2014 GetArkUINodeModifiers()->getSearchModifier()->resetStopBackPress(nativeNode);
2015 return panda::JSValueRef::Undefined(vm);
2016 }
2017
SetKeyboardAppearance(ArkUIRuntimeCallInfo * runtimeCallInfo)2018 ArkUINativeModuleValue SearchBridge::SetKeyboardAppearance(ArkUIRuntimeCallInfo* runtimeCallInfo)
2019 {
2020 EcmaVM* vm = runtimeCallInfo->GetVM();
2021 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2022 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2023 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2024 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2025 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2026 if (secondArg->IsNumber()) {
2027 uint32_t keyboardAppearance = secondArg->Uint32Value(vm);
2028 if (keyboardAppearance >= static_cast<uint32_t>(KeyboardAppearance::NONE_IMMERSIVE) &&
2029 keyboardAppearance <= static_cast<uint32_t>(KeyboardAppearance::DARK_IMMERSIVE)) {
2030 GetArkUINodeModifiers()->getSearchModifier()->
2031 setSearchKeyboardAppearance(nativeNode, keyboardAppearance); // when input is valid
2032 return panda::JSValueRef::Undefined(vm);
2033 }
2034 }
2035 GetArkUINodeModifiers()->getSearchModifier()->
2036 setSearchKeyboardAppearance(nativeNode, static_cast<int32_t>(KeyboardAppearance::NONE_IMMERSIVE));
2037 return panda::JSValueRef::Undefined(vm);
2038 }
2039
ResetKeyboardAppearance(ArkUIRuntimeCallInfo * runtimeCallInfo)2040 ArkUINativeModuleValue SearchBridge::ResetKeyboardAppearance(ArkUIRuntimeCallInfo* runtimeCallInfo)
2041 {
2042 EcmaVM* vm = runtimeCallInfo->GetVM();
2043 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2044 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2045 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2046 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2047 GetArkUINodeModifiers()->getSearchModifier()->resetSearchKeyboardAppearance(nativeNode);
2048 return panda::JSValueRef::Undefined(vm);
2049 }
2050
SetStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2051 ArkUINativeModuleValue SearchBridge::SetStrokeWidth(ArkUIRuntimeCallInfo *runtimeCallInfo)
2052 {
2053 EcmaVM* vm = runtimeCallInfo->GetVM();
2054 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2055 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2056 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2057 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2058 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2059
2060 CalcDimension value;
2061 if (!ArkTSUtils::ParseJsLengthMetrics(vm, secondArg, value)) {
2062 GetArkUINodeModifiers()->getSearchModifier()->resetSearchStrokeWidth(nativeNode);
2063 } else {
2064 GetArkUINodeModifiers()->getSearchModifier()->setSearchStrokeWidth(
2065 nativeNode, value.Value(), static_cast<int>(value.Unit()));
2066 }
2067 return panda::JSValueRef::Undefined(vm);
2068 }
2069
ResetStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2070 ArkUINativeModuleValue SearchBridge::ResetStrokeWidth(ArkUIRuntimeCallInfo *runtimeCallInfo)
2071 {
2072 EcmaVM* vm = runtimeCallInfo->GetVM();
2073 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2074 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2075 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2076 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2077 GetArkUINodeModifiers()->getSearchModifier()->resetSearchStrokeWidth(nativeNode);
2078 return panda::JSValueRef::Undefined(vm);
2079 }
2080
SetStrokeColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2081 ArkUINativeModuleValue SearchBridge::SetStrokeColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2082 {
2083 EcmaVM *vm = runtimeCallInfo->GetVM();
2084 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2085 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2086 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2087 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2088 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2089 Color color;
2090 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
2091 GetArkUINodeModifiers()->getSearchModifier()->resetSearchStrokeColor(nativeNode);
2092 } else {
2093 GetArkUINodeModifiers()->getSearchModifier()->setSearchStrokeColor(nativeNode, color.GetValue());
2094 }
2095 return panda::JSValueRef::Undefined(vm);
2096 }
2097
ResetStrokeColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2098 ArkUINativeModuleValue SearchBridge::ResetStrokeColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2099 {
2100 EcmaVM* vm = runtimeCallInfo->GetVM();
2101 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2102 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2103 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2104 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2105 GetArkUINodeModifiers()->getSearchModifier()->resetSearchStrokeColor(nativeNode);
2106 return panda::JSValueRef::Undefined(vm);
2107 }
2108
SetSearchAutoCapitalizationMode(ArkUIRuntimeCallInfo * runtimeCallInfo)2109 ArkUINativeModuleValue SearchBridge::SetSearchAutoCapitalizationMode(ArkUIRuntimeCallInfo *runtimeCallInfo)
2110 {
2111 EcmaVM *vm = runtimeCallInfo->GetVM();
2112 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2113 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2114
2115 if (firstArg->IsUndefined() || firstArg->IsNull()) {
2116 return panda::JSValueRef::Undefined(vm);
2117 }
2118
2119 if (!(firstArg->IsNativePointer(vm))) {
2120 return panda::JSValueRef::Undefined(vm);
2121 }
2122
2123 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2124 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2125
2126 if (!(secondArg->IsUndefined()) && !(secondArg->IsNull()) && secondArg->IsNumber()) {
2127 int32_t value = secondArg->Int32Value(vm);
2128 GetArkUINodeModifiers()->getSearchModifier()->setSearchAutoCapitalizationMode(nativeNode, value);
2129 } else {
2130 GetArkUINodeModifiers()->getSearchModifier()->resetSearchAutoCapitalizationMode(nativeNode);
2131 }
2132 return panda::JSValueRef::Undefined(vm);
2133 }
2134
ResetSearchAutoCapitalizationMode(ArkUIRuntimeCallInfo * runtimeCallInfo)2135 ArkUINativeModuleValue SearchBridge::ResetSearchAutoCapitalizationMode(ArkUIRuntimeCallInfo *runtimeCallInfo)
2136 {
2137 EcmaVM *vm = runtimeCallInfo->GetVM();
2138 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2139 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2140
2141 if (firstArg->IsUndefined() || firstArg->IsNull()) {
2142 return panda::JSValueRef::Undefined(vm);
2143 }
2144
2145 if (!(firstArg->IsNativePointer(vm))) {
2146 return panda::JSValueRef::Undefined(vm);
2147 }
2148
2149 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2150 GetArkUINodeModifiers()->getSearchModifier()->resetSearchAutoCapitalizationMode(nativeNode);
2151 return panda::JSValueRef::Undefined(vm);
2152 }
2153
SetEnableAutoSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)2154 ArkUINativeModuleValue SearchBridge::SetEnableAutoSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
2155 {
2156 EcmaVM* vm = runtimeCallInfo->GetVM();
2157 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2158 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2159 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2160 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2161 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2162 uint32_t enableAutoSpacing = false;
2163 if (secondArg->IsBoolean()) {
2164 enableAutoSpacing = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2165 }
2166 GetArkUINodeModifiers()->getSearchModifier()->setEnableAutoSpacing(nativeNode, enableAutoSpacing);
2167 return panda::JSValueRef::Undefined(vm);
2168 }
2169
ResetEnableAutoSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)2170 ArkUINativeModuleValue SearchBridge::ResetEnableAutoSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
2171 {
2172 EcmaVM* vm = runtimeCallInfo->GetVM();
2173 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2174 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2175 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2176 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2177 GetArkUINodeModifiers()->getSearchModifier()->resetEnableAutoSpacing(nativeNode);
2178 return panda::JSValueRef::Undefined(vm);
2179 }
2180
SetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)2181 ArkUINativeModuleValue SearchBridge::SetMargin(ArkUIRuntimeCallInfo* runtimeCallInfo)
2182 {
2183 EcmaVM* vm = runtimeCallInfo->GetVM();
2184 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2185 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2186 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2187 CommonBridge::SetMargin(runtimeCallInfo);
2188 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2189 CHECK_NULL_RETURN(nativeNode, panda::JSValueRef::Undefined(vm));
2190 GetArkUINodeModifiers()->getSearchModifier()->setSearchMargin(nativeNode);
2191 return panda::JSValueRef::Undefined(vm);
2192 }
2193
ResetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)2194 ArkUINativeModuleValue SearchBridge::ResetMargin(ArkUIRuntimeCallInfo* runtimeCallInfo)
2195 {
2196 EcmaVM* vm = runtimeCallInfo->GetVM();
2197 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2198 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2199 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2200 CommonBridge::ResetMargin(runtimeCallInfo);
2201 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2202 GetArkUINodeModifiers()->getSearchModifier()->resetSearchMargin(nativeNode);
2203 return panda::JSValueRef::Undefined(vm);
2204 }
2205 } // namespace OHOS::Ace::NG
2206