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