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