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