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