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_alphabet_indexer_bridge.h"
16 
17 #include "core/interfaces/native/node/node_api.h"
18 #include "bridge/declarative_frontend/jsview/models/indexer_model_impl.h"
19 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
20 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.h"
21 namespace OHOS::Ace::NG {
22 namespace {
23 constexpr int NUM_0 = 0;
24 constexpr int NUM_1 = 1;
25 constexpr int NUM_2 = 2;
26 constexpr int NUM_3 = 3;
27 constexpr int NUM_4 = 4;
28 const std::string FORMAT_FONT = "%s|%s|%s";
29 const std::string DEFAULT_FAMILY = "HarmonyOS Sans";
30 constexpr double DEFAULT_POPUP_ITEM_FONT_SIZE = 24.0;
31 constexpr Dimension DEFAULT_FONT_SIZE_VAL = 12.0_fp;
32 const std::string DEFAULT_POPUP_ITEM_FONT_WEIGHT = "medium";
33 constexpr Dimension DEFAULT_POPUP_POSITION_X = 60.0_vp;
34 constexpr Dimension DEFAULT_POPUP_POSITION_Y = 48.0_vp;
35 constexpr double RADIUS_OFFSET = 4.0;
36 } // namespace
37 
SetPopupItemFont(ArkUIRuntimeCallInfo * runtimeCallInfo)38 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupItemFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
39 {
40     EcmaVM* vm = runtimeCallInfo->GetVM();
41     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
42     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
43     Local<JSValueRef> fontSizeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
44     Local<JSValueRef> weightArg = runtimeCallInfo->GetCallArgRef(NUM_2);
45     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
46     CalcDimension fontSize;
47     if (!fontSizeArg->IsNull()) {
48         CalcDimension fontSizeData;
49         if (ArkTSUtils::ParseJsDimensionFp(vm, fontSizeArg, fontSizeData) && !fontSizeData.IsNegative() &&
50             fontSizeData.Unit() != DimensionUnit::PERCENT) {
51             fontSize = fontSizeData;
52         }
53     }
54     std::string weight = DEFAULT_POPUP_ITEM_FONT_WEIGHT;
55     if (!weightArg->IsNull() && !weightArg->IsUndefined()) {
56         if (weightArg->IsNumber()) {
57             weight = std::to_string(weightArg->Int32Value(vm));
58         } else {
59             if (!ArkTSUtils::ParseJsString(vm, weightArg, weight) || weight.empty()) {
60                 weight = DEFAULT_POPUP_ITEM_FONT_WEIGHT;
61             }
62         }
63     }
64 
65     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupItemFont(
66         nativeNode, fontSize.Value(), static_cast<int>(fontSize.Unit()), weight.c_str());
67     return panda::JSValueRef::Undefined(vm);
68 }
69 
ResetPopupItemFont(ArkUIRuntimeCallInfo * runtimeCallInfo)70 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupItemFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
71 {
72     EcmaVM* vm = runtimeCallInfo->GetVM();
73     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
74     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
75     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
76     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupItemFont(nativeNode);
77     return panda::JSValueRef::Undefined(vm);
78 }
79 
SetSelectedFont(ArkUIRuntimeCallInfo * runtimeCallInfo)80 ArkUINativeModuleValue AlphabetIndexerBridge::SetSelectedFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
81 {
82     EcmaVM* vm = runtimeCallInfo->GetVM();
83     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
84     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
85     Local<JSValueRef> fontSizeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
86     Local<JSValueRef> weightArg = runtimeCallInfo->GetCallArgRef(NUM_2);
87     Local<JSValueRef> fontFamilyArg = runtimeCallInfo->GetCallArgRef(NUM_3);
88     Local<JSValueRef> styleValArg = runtimeCallInfo->GetCallArgRef(NUM_4);
89     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
90     if ((fontSizeArg->IsNull() || fontSizeArg->IsUndefined()) && (weightArg->IsNull() || weightArg->IsUndefined()) &&
91         (fontFamilyArg->IsNull() || fontFamilyArg->IsUndefined()) &&
92         (styleValArg->IsNull() || styleValArg->IsUndefined())) {
93         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetSelectedFont(nativeNode);
94     }
95     CalcDimension fontSizeData(DEFAULT_FONT_SIZE_VAL);
96     std::string fontSize = fontSizeData.ToString();
97     if (!fontSizeArg->IsNull() && !fontSizeArg->IsUndefined() &&
98         ArkTSUtils::ParseJsDimensionFp(vm, fontSizeArg, fontSizeData) && !fontSizeData.IsNegative() &&
99         fontSizeData.Unit() != DimensionUnit::PERCENT) {
100         fontSize = fontSizeData.ToString();
101     }
102     std::string weight = "normal";
103     if (!weightArg->IsNull() && !weightArg->IsUndefined() && (weightArg->IsString(vm) || weightArg->IsNumber())) {
104         weight = weightArg->ToString(vm)->ToString(vm);
105     }
106     std::string fontFamily;
107     if (!ArkTSUtils::ParseJsFontFamiliesToString(vm, fontFamilyArg, fontFamily) || fontFamily.empty()) {
108         fontFamily = DEFAULT_FAMILY;
109     }
110     int32_t styleVal = 0;
111     if (!styleValArg->IsNull() && !styleValArg->IsUndefined() && styleValArg->IsNumber()) {
112         styleVal = styleValArg->Int32Value(vm);
113     }
114     std::string fontInfo =
115         StringUtils::FormatString(FORMAT_FONT.c_str(), fontSize.c_str(), weight.c_str(), fontFamily.c_str());
116     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setSelectedFont(nativeNode, fontInfo.c_str(), styleVal);
117     return panda::JSValueRef::Undefined(vm);
118 }
119 
ResetSelectedFont(ArkUIRuntimeCallInfo * runtimeCallInfo)120 ArkUINativeModuleValue AlphabetIndexerBridge::ResetSelectedFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
121 {
122     EcmaVM* vm = runtimeCallInfo->GetVM();
123     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
124     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
125     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
126     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetSelectedFont(nativeNode);
127     return panda::JSValueRef::Undefined(vm);
128 }
129 
SetPopupFont(ArkUIRuntimeCallInfo * runtimeCallInfo)130 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
131 {
132     EcmaVM* vm = runtimeCallInfo->GetVM();
133     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
134     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
135     Local<JSValueRef> fontSizeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
136     Local<JSValueRef> weightArg = runtimeCallInfo->GetCallArgRef(NUM_2);
137     Local<JSValueRef> fontFamilyArg = runtimeCallInfo->GetCallArgRef(NUM_3);
138     Local<JSValueRef> styleValArg = runtimeCallInfo->GetCallArgRef(NUM_4);
139     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
140     if ((fontSizeArg->IsNull() || fontSizeArg->IsUndefined()) && (weightArg->IsNull() || weightArg->IsUndefined()) &&
141         (fontFamilyArg->IsNull() || fontFamilyArg->IsUndefined()) &&
142         (styleValArg->IsNull() || styleValArg->IsUndefined())) {
143         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupFont(nativeNode);
144     }
145     CalcDimension fontSizeData(Dimension(DEFAULT_POPUP_ITEM_FONT_SIZE, DimensionUnit::FP));
146     std::string fontSize = fontSizeData.ToString();
147     if (!fontSizeArg->IsNull() && !fontSizeArg->IsUndefined() &&
148         ArkTSUtils::ParseJsDimensionFp(vm, fontSizeArg, fontSizeData) && !fontSizeData.IsNegative() &&
149         fontSizeData.Unit() != DimensionUnit::PERCENT) {
150         fontSize = fontSizeData.ToString();
151     }
152     std::string weight = "normal";
153     if (!weightArg->IsNull() && !weightArg->IsUndefined() && (weightArg->IsString(vm) || weightArg->IsNumber())) {
154         weight = weightArg->ToString(vm)->ToString(vm);
155     }
156     std::string fontFamily;
157     if (!ArkTSUtils::ParseJsFontFamiliesToString(vm, fontFamilyArg, fontFamily) || fontFamily.empty()) {
158         fontFamily = DEFAULT_FAMILY;
159     }
160     int32_t styleVal = 0;
161     if (!styleValArg->IsNull() && !styleValArg->IsUndefined() && styleValArg->IsNumber()) {
162         styleVal = styleValArg->Int32Value(vm);
163     }
164     std::string fontInfo =
165         StringUtils::FormatString(FORMAT_FONT.c_str(), fontSize.c_str(), weight.c_str(), fontFamily.c_str());
166     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupFont(nativeNode, fontInfo.c_str(), styleVal);
167     return panda::JSValueRef::Undefined(vm);
168 }
169 
ResetPopupFont(ArkUIRuntimeCallInfo * runtimeCallInfo)170 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupFont(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     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
176     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupFont(nativeNode);
177     return panda::JSValueRef::Undefined(vm);
178 }
179 
SetFont(ArkUIRuntimeCallInfo * runtimeCallInfo)180 ArkUINativeModuleValue AlphabetIndexerBridge::SetFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
181 {
182     EcmaVM* vm = runtimeCallInfo->GetVM();
183     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
184     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
185     Local<JSValueRef> fontSizeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
186     Local<JSValueRef> weightArg = runtimeCallInfo->GetCallArgRef(NUM_2);
187     Local<JSValueRef> fontFamilyArg = runtimeCallInfo->GetCallArgRef(NUM_3);
188     Local<JSValueRef> styleValArg = runtimeCallInfo->GetCallArgRef(NUM_4);
189     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
190     if ((fontSizeArg->IsNull() || fontSizeArg->IsUndefined()) && (weightArg->IsNull() || weightArg->IsUndefined()) &&
191         (fontFamilyArg->IsNull() || fontFamilyArg->IsUndefined()) &&
192         (styleValArg->IsNull() || styleValArg->IsUndefined())) {
193         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlphabetIndexerFont(nativeNode);
194     }
195     CalcDimension fontSizeData(DEFAULT_FONT_SIZE_VAL);
196     std::string fontSize = fontSizeData.ToString();
197     if (!fontSizeArg->IsNull() && !fontSizeArg->IsUndefined() &&
198         ArkTSUtils::ParseJsDimensionFp(vm, fontSizeArg, fontSizeData) && !fontSizeData.IsNegative() &&
199         fontSizeData.Unit() != DimensionUnit::PERCENT) {
200         fontSize = fontSizeData.ToString();
201     }
202     std::string weight = "normal";
203     if (!weightArg->IsNull() && !weightArg->IsUndefined() && (weightArg->IsString(vm) || weightArg->IsNumber())) {
204         weight = weightArg->ToString(vm)->ToString(vm);
205     }
206     std::string fontFamily;
207     if (!ArkTSUtils::ParseJsFontFamiliesToString(vm, fontFamilyArg, fontFamily) || fontFamily.empty()) {
208         fontFamily = DEFAULT_FAMILY;
209     }
210     int32_t styleVal = 0;
211     if (!styleValArg->IsNull() && !styleValArg->IsUndefined() && styleValArg->IsNumber()) {
212         styleVal = styleValArg->Int32Value(vm);
213     }
214     std::string fontInfo =
215         StringUtils::FormatString(FORMAT_FONT.c_str(), fontSize.c_str(), weight.c_str(), fontFamily.c_str());
216     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setAlphabetIndexerFont(
217         nativeNode, fontInfo.c_str(), styleVal);
218     return panda::JSValueRef::Undefined(vm);
219 }
220 
ResetFont(ArkUIRuntimeCallInfo * runtimeCallInfo)221 ArkUINativeModuleValue AlphabetIndexerBridge::ResetFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
222 {
223     EcmaVM* vm = runtimeCallInfo->GetVM();
224     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
225     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
226     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
227     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlphabetIndexerFont(nativeNode);
228     return panda::JSValueRef::Undefined(vm);
229 }
230 
SetPopupItemBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)231 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupItemBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
232 {
233     EcmaVM* vm = runtimeCallInfo->GetVM();
234     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
235     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
236     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
237     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
238     Color color;
239     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
240         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupItemBackgroundColor(nativeNode);
241     } else {
242         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupItemBackgroundColor(
243             nativeNode, color.GetValue());
244     }
245     return panda::JSValueRef::Undefined(vm);
246 }
247 
ResetPopupItemBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)248 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupItemBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
249 {
250     EcmaVM* vm = runtimeCallInfo->GetVM();
251     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
252     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
253     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
254     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupItemBackgroundColor(nativeNode);
255     return panda::JSValueRef::Undefined(vm);
256 }
257 
SetColor(ArkUIRuntimeCallInfo * runtimeCallInfo)258 ArkUINativeModuleValue AlphabetIndexerBridge::SetColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
259 {
260     EcmaVM* vm = runtimeCallInfo->GetVM();
261     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
262     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
263     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
264     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
265     Color color;
266     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
267         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlphabetIndexerColor(nativeNode);
268     } else {
269         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setAlphabetIndexerColor(nativeNode, color.GetValue());
270     }
271     return panda::JSValueRef::Undefined(vm);
272 }
273 
ResetColor(ArkUIRuntimeCallInfo * runtimeCallInfo)274 ArkUINativeModuleValue AlphabetIndexerBridge::ResetColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
275 {
276     EcmaVM* vm = runtimeCallInfo->GetVM();
277     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
278     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
279     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
280     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlphabetIndexerColor(nativeNode);
281     return panda::JSValueRef::Undefined(vm);
282 }
283 
SetPopupColor(ArkUIRuntimeCallInfo * runtimeCallInfo)284 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
285 {
286     EcmaVM* vm = runtimeCallInfo->GetVM();
287     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
288     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
289     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
290     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
291     Color color;
292     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
293         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupColor(nativeNode);
294     } else {
295         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupColor(nativeNode, color.GetValue());
296     }
297     return panda::JSValueRef::Undefined(vm);
298 }
299 
ResetPopupColor(ArkUIRuntimeCallInfo * runtimeCallInfo)300 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
301 {
302     EcmaVM* vm = runtimeCallInfo->GetVM();
303     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
304     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
305     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
306     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupColor(nativeNode);
307     return panda::JSValueRef::Undefined(vm);
308 }
309 
SetSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)310 ArkUINativeModuleValue AlphabetIndexerBridge::SetSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
311 {
312     EcmaVM* vm = runtimeCallInfo->GetVM();
313     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
314     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
315     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
316     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
317     Color color;
318     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
319         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlphabetIndexerSelectedColor(nativeNode);
320     } else {
321         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setAlphabetIndexerSelectedColor(
322             nativeNode, color.GetValue());
323     }
324     return panda::JSValueRef::Undefined(vm);
325 }
326 
ResetSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)327 ArkUINativeModuleValue AlphabetIndexerBridge::ResetSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
328 {
329     EcmaVM* vm = runtimeCallInfo->GetVM();
330     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
331     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
332     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
333     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlphabetIndexerSelectedColor(nativeNode);
334     return panda::JSValueRef::Undefined(vm);
335 }
336 
SetPopupBackground(ArkUIRuntimeCallInfo * runtimeCallInfo)337 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupBackground(ArkUIRuntimeCallInfo* runtimeCallInfo)
338 {
339     EcmaVM* vm = runtimeCallInfo->GetVM();
340     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
341     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
342     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
343     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
344     Color color;
345     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
346         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupBackground(nativeNode);
347     } else {
348         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupBackground(nativeNode, color.GetValue());
349     }
350     return panda::JSValueRef::Undefined(vm);
351 }
352 
ResetPopupBackground(ArkUIRuntimeCallInfo * runtimeCallInfo)353 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupBackground(ArkUIRuntimeCallInfo* runtimeCallInfo)
354 {
355     EcmaVM* vm = runtimeCallInfo->GetVM();
356     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
357     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
358     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
359     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupBackground(nativeNode);
360     return panda::JSValueRef::Undefined(vm);
361 }
362 
SetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)363 ArkUINativeModuleValue AlphabetIndexerBridge::SetSelectedBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
364 {
365     EcmaVM* vm = runtimeCallInfo->GetVM();
366     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
367     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
368     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
369     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
370     Color color;
371     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
372         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetSelectedBackgroundColor(nativeNode);
373     } else {
374         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setSelectedBackgroundColor(
375             nativeNode, color.GetValue());
376     }
377     return panda::JSValueRef::Undefined(vm);
378 }
379 
ResetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)380 ArkUINativeModuleValue AlphabetIndexerBridge::ResetSelectedBackgroundColor(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()->getAlphabetIndexerModifier()->resetSelectedBackgroundColor(nativeNode);
387     return panda::JSValueRef::Undefined(vm);
388 }
389 
SetPopupUnselectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)390 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupUnselectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
391 {
392     EcmaVM* vm = runtimeCallInfo->GetVM();
393     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
394     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
395     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
396     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
397     Color color;
398     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
399         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupUnselectedColor(nativeNode);
400     } else {
401         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupUnselectedColor(nativeNode, color.GetValue());
402     }
403     return panda::JSValueRef::Undefined(vm);
404 }
405 
ResetPopupUnselectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)406 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupUnselectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
407 {
408     EcmaVM* vm = runtimeCallInfo->GetVM();
409     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
410     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
411     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
412     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupUnselectedColor(nativeNode);
413     return panda::JSValueRef::Undefined(vm);
414 }
415 
SetAlignStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)416 ArkUINativeModuleValue AlphabetIndexerBridge::SetAlignStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
417 {
418     EcmaVM* vm = runtimeCallInfo->GetVM();
419     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
420     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
421     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
422     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
423     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
424     if (!secondArg->IsNumber()) {
425         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlignStyle(nativeNode);
426     } else {
427         int32_t alignValue = secondArg->Int32Value(vm);
428         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setAlignStyle(nativeNode, alignValue);
429     }
430     CalcDimension popupHorizontalSpace;
431     if (!thirdArg->IsNull() && !thirdArg->IsUndefined() &&
432         ArkTSUtils::ParseJsDimensionVp(vm, thirdArg, popupHorizontalSpace)) {
433         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupHorizontalSpace(
434             nativeNode, popupHorizontalSpace.Value(), static_cast<int>(popupHorizontalSpace.Unit()));
435     } else {
436         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupHorizontalSpace(nativeNode);
437     }
438     return panda::JSValueRef::Undefined(vm);
439 }
440 
ResetAlignStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)441 ArkUINativeModuleValue AlphabetIndexerBridge::ResetAlignStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
442 {
443     EcmaVM* vm = runtimeCallInfo->GetVM();
444     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
445     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
446     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
447     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlignStyle(nativeNode);
448     return panda::JSValueRef::Undefined(vm);
449 }
450 
SetPopupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)451 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
452 {
453     EcmaVM* vm = runtimeCallInfo->GetVM();
454     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
455     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
456     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
457     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
458     Color color;
459     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
460         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupSelectedColor(nativeNode);
461     } else {
462         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupSelectedColor(nativeNode, color.GetValue());
463     }
464     return panda::JSValueRef::Undefined(vm);
465 }
466 
ResetPopupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)467 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
468 {
469     EcmaVM* vm = runtimeCallInfo->GetVM();
470     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
471     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
472     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
473     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupSelectedColor(nativeNode);
474     return panda::JSValueRef::Undefined(vm);
475 }
476 
SetUsingPopup(ArkUIRuntimeCallInfo * runtimeCallInfo)477 ArkUINativeModuleValue AlphabetIndexerBridge::SetUsingPopup(ArkUIRuntimeCallInfo* runtimeCallInfo)
478 {
479     EcmaVM* vm = runtimeCallInfo->GetVM();
480     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
481     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
482     Local<JSValueRef> usingPopupArg = runtimeCallInfo->GetCallArgRef(1);
483     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
484     if (usingPopupArg->IsNull() || usingPopupArg->IsUndefined()) {
485         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetUsingPopup(nativeNode);
486     } else {
487         bool usingPopup = usingPopupArg->ToBoolean(vm)->Value();
488         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setUsingPopup(nativeNode, usingPopup);
489     }
490     return panda::JSValueRef::Undefined(vm);
491 }
492 
ResetUsingPopup(ArkUIRuntimeCallInfo * runtimeCallInfo)493 ArkUINativeModuleValue AlphabetIndexerBridge::ResetUsingPopup(ArkUIRuntimeCallInfo* runtimeCallInfo)
494 {
495     EcmaVM* vm = runtimeCallInfo->GetVM();
496     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
497     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
498     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
499     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetUsingPopup(nativeNode);
500     return panda::JSValueRef::Undefined(vm);
501 }
502 
SetSelected(ArkUIRuntimeCallInfo * runtimeCallInfo)503 ArkUINativeModuleValue AlphabetIndexerBridge::SetSelected(ArkUIRuntimeCallInfo* runtimeCallInfo)
504 {
505     EcmaVM* vm = runtimeCallInfo->GetVM();
506     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
507     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
508     Local<JSValueRef> selectedArg = runtimeCallInfo->GetCallArgRef(1);
509     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
510     int32_t selected = 0;
511     if (selectedArg->IsNull() || selectedArg->IsUndefined() || !ArkTSUtils::ParseJsInteger(vm, selectedArg, selected)) {
512         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlphabetIndexerSelected(nativeNode);
513     } else {
514         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setAlphabetIndexerSelected(nativeNode, selected);
515     }
516     return panda::JSValueRef::Undefined(vm);
517 }
518 
ResetSelected(ArkUIRuntimeCallInfo * runtimeCallInfo)519 ArkUINativeModuleValue AlphabetIndexerBridge::ResetSelected(ArkUIRuntimeCallInfo* runtimeCallInfo)
520 {
521     EcmaVM* vm = runtimeCallInfo->GetVM();
522     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
523     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
524     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
525     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAlphabetIndexerSelected(nativeNode);
526     return panda::JSValueRef::Undefined(vm);
527 }
528 
SetItemSize(ArkUIRuntimeCallInfo * runtimeCallInfo)529 ArkUINativeModuleValue AlphabetIndexerBridge::SetItemSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
530 {
531     EcmaVM* vm = runtimeCallInfo->GetVM();
532     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
533     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
534     Local<JSValueRef> itemSizeArg = runtimeCallInfo->GetCallArgRef(1);
535     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
536     CalcDimension itemSize;
537 
538     if (itemSizeArg->IsNull() || itemSizeArg->IsUndefined()) {
539         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetItemSize(nativeNode);
540     }
541 
542     if (ArkTSUtils::ParseJsDimensionVp(vm, itemSizeArg, itemSize) && GreatNotEqual(itemSize.Value(), 0.0) &&
543         itemSize.Unit() != DimensionUnit::PERCENT) {
544         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setItemSize(
545             nativeNode, itemSize.Value(), static_cast<int>(itemSize.Unit()));
546     } else {
547         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetItemSize(nativeNode);
548     }
549     return panda::JSValueRef::Undefined(vm);
550 }
551 
ResetItemSize(ArkUIRuntimeCallInfo * runtimeCallInfo)552 ArkUINativeModuleValue AlphabetIndexerBridge::ResetItemSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
553 {
554     EcmaVM* vm = runtimeCallInfo->GetVM();
555     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
556     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
557     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
558     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetItemSize(nativeNode);
559     return panda::JSValueRef::Undefined(vm);
560 }
561 
SetPopupPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)562 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
563 {
564     EcmaVM* vm = runtimeCallInfo->GetVM();
565     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
566     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
567     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
568     Local<JSValueRef> sizeX = runtimeCallInfo->GetCallArgRef(NUM_1);
569     Local<JSValueRef> sizeY = runtimeCallInfo->GetCallArgRef(NUM_2);
570     CalcDimension x;
571     CalcDimension y;
572     if (sizeX->IsNull() || sizeX->IsUndefined() || !ArkTSUtils::ParseJsDimensionVp(vm, sizeX, x)) {
573         x = DEFAULT_POPUP_POSITION_X;
574     }
575     if (sizeY->IsNull() || sizeY->IsUndefined() || !ArkTSUtils::ParseJsDimensionVp(vm, sizeY, y)) {
576         y = DEFAULT_POPUP_POSITION_Y;
577     }
578     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupPosition(
579         nativeNode, x.Value(), static_cast<int>(x.Unit()), y.Value(), static_cast<int>(y.Unit()));
580     return panda::JSValueRef::Undefined(vm);
581 }
582 
ResetPopupPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)583 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
584 {
585     EcmaVM* vm = runtimeCallInfo->GetVM();
586     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
587     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
588     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
589     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupPosition(nativeNode);
590     return panda::JSValueRef::Undefined(vm);
591 }
592 
SetPopupItemBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)593 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupItemBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
594 {
595     EcmaVM* vm = runtimeCallInfo->GetVM();
596     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
597     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
598     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
599     Local<JSValueRef> radiusArg = runtimeCallInfo->GetCallArgRef(NUM_1);
600 
601     CalcDimension radius;
602     CalcDimension popupRadius;
603     if (radiusArg->IsNull() || radiusArg->IsUndefined() || !radiusArg->IsNumber()) {
604         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupItemBorderRadius(nativeNode);
605     } else {
606         ArkTSUtils::ParseJsDimensionVp(vm, radiusArg, radius);
607         popupRadius.SetValue(radius.Value() + RADIUS_OFFSET);
608         popupRadius.SetUnit(DimensionUnit::VP);
609         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupItemBorderRadius(nativeNode, radius.Value(),
610             static_cast<int>(radius.Unit()), popupRadius.Value(), static_cast<int>(popupRadius.Unit()));
611     }
612     return panda::JSValueRef::Undefined(vm);
613 }
614 
ResetPopupItemBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)615 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupItemBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
616 {
617     EcmaVM* vm = runtimeCallInfo->GetVM();
618     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
619     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
620     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
621     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupItemBorderRadius(nativeNode);
622     return panda::JSValueRef::Undefined(vm);
623 }
624 
SetItemBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)625 ArkUINativeModuleValue AlphabetIndexerBridge::SetItemBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
626 {
627     EcmaVM* vm = runtimeCallInfo->GetVM();
628     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
629     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
630     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
631     Local<JSValueRef> radiusArg = runtimeCallInfo->GetCallArgRef(NUM_1);
632     auto radius = CalcDimension(ZERO_RADIUS, DimensionUnit::VP);
633     auto indexerRadius = Dimension(ZERO_RADIUS, DimensionUnit::VP);
634     if (radiusArg->IsNull() || radiusArg->IsUndefined() || !radiusArg->IsNumber()) {
635         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetItemBorderRadius(nativeNode);
636     } else {
637         ArkTSUtils::ParseJsDimensionVp(vm, radiusArg, radius);
638         indexerRadius.SetValue(radius.Value() + RADIUS_OFFSET);
639         indexerRadius.SetUnit(DimensionUnit::VP);
640         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setItemBorderRadius(nativeNode, radius.Value(),
641             static_cast<int>(radius.Unit()), indexerRadius.Value(), static_cast<int>(indexerRadius.Unit()));
642     }
643     return panda::JSValueRef::Undefined(vm);
644 }
645 
ResetItemBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)646 ArkUINativeModuleValue AlphabetIndexerBridge::ResetItemBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
647 {
648     EcmaVM* vm = runtimeCallInfo->GetVM();
649     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
650     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
651     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
652     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetItemBorderRadius(nativeNode);
653     return panda::JSValueRef::Undefined(vm);
654 }
655 
SetPopupBackgroundBlurStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)656 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupBackgroundBlurStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
657 {
658     EcmaVM* vm = runtimeCallInfo->GetVM();
659     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
660     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
661     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
662     Local<JSValueRef> blurStyleArg = runtimeCallInfo->GetCallArgRef(NUM_1);
663     int32_t blurStyle = blurStyleArg->Int32Value(vm);
664     if (!ArkTSUtils::ParseJsInteger(vm, blurStyleArg, blurStyle)) {
665         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupBackgroundBlurStyle(nativeNode);
666     } else {
667         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupBackgroundBlurStyle(nativeNode, blurStyle);
668     }
669     return panda::JSValueRef::Undefined(vm);
670 }
671 
ResetPopupBackgroundBlurStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)672 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupBackgroundBlurStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
673 {
674     EcmaVM* vm = runtimeCallInfo->GetVM();
675     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
676     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
677     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
678     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupBackgroundBlurStyle(nativeNode);
679     return panda::JSValueRef::Undefined(vm);
680 }
SetPopupTitleBackground(ArkUIRuntimeCallInfo * runtimeCallInfo)681 ArkUINativeModuleValue AlphabetIndexerBridge::SetPopupTitleBackground(ArkUIRuntimeCallInfo* runtimeCallInfo)
682 {
683     EcmaVM* vm = runtimeCallInfo->GetVM();
684     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
685     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
686     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
687     Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(NUM_1);
688     Color color;
689     if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color)) {
690         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupTitleBackground(nativeNode);
691     } else {
692         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setPopupTitleBackground(nativeNode, color.GetValue());
693     }
694     return panda::JSValueRef::Undefined(vm);
695 }
ResetPopupTitleBackground(ArkUIRuntimeCallInfo * runtimeCallInfo)696 ArkUINativeModuleValue AlphabetIndexerBridge::ResetPopupTitleBackground(ArkUIRuntimeCallInfo* runtimeCallInfo)
697 {
698     EcmaVM* vm = runtimeCallInfo->GetVM();
699     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
700     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
701     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
702     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetPopupTitleBackground(nativeNode);
703     return panda::JSValueRef::Undefined(vm);
704 }
705 
SetAdaptiveWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)706 ArkUINativeModuleValue AlphabetIndexerBridge::SetAdaptiveWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
707 {
708     EcmaVM* vm = runtimeCallInfo->GetVM();
709     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
710     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
711     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
712     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
713 
714     CalcDimension width;
715     ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, width);
716     if (width.Unit() == DimensionUnit::AUTO) {
717         CommonBridge::SetWidth(runtimeCallInfo);
718         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setAdaptiveWidth(nativeNode);
719         return panda::JSValueRef::Undefined(vm);
720     } else {
721         CommonBridge::SetWidth(runtimeCallInfo);
722         GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAdaptiveWidth(nativeNode);
723     }
724     CommonBridge::SetWidth(runtimeCallInfo);
725     return panda::JSValueRef::Undefined(vm);
726 }
727 
ResetAdaptiveWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)728 ArkUINativeModuleValue AlphabetIndexerBridge::ResetAdaptiveWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
729 {
730     CommonBridge::ResetWidth(runtimeCallInfo);
731     EcmaVM* vm = runtimeCallInfo->GetVM();
732     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
733     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
734     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
735     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAdaptiveWidth(nativeNode);
736     return panda::JSValueRef::Undefined(vm);
737 }
738 
SetAutoCollapse(ArkUIRuntimeCallInfo * runtimeCallInfo)739 ArkUINativeModuleValue AlphabetIndexerBridge::SetAutoCollapse(ArkUIRuntimeCallInfo* runtimeCallInfo)
740 {
741     EcmaVM* vm = runtimeCallInfo->GetVM();
742     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
743     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
744     Local<JSValueRef> autoCollapseArg = runtimeCallInfo->GetCallArgRef(1);
745     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
746     bool autoCollapse = true;
747     if (autoCollapseArg->IsBoolean()) {
748         autoCollapse = autoCollapseArg->ToBoolean(vm)->Value();
749     }
750     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setAutoCollapse(nativeNode, autoCollapse);
751     return panda::JSValueRef::Undefined(vm);
752 }
753 
ResetAutoCollapse(ArkUIRuntimeCallInfo * runtimeCallInfo)754 ArkUINativeModuleValue AlphabetIndexerBridge::ResetAutoCollapse(ArkUIRuntimeCallInfo* runtimeCallInfo)
755 {
756     EcmaVM* vm = runtimeCallInfo->GetVM();
757     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
758     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
759     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
760     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetAutoCollapse(nativeNode);
761     return panda::JSValueRef::Undefined(vm);
762 }
763 
SetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)764 ArkUINativeModuleValue AlphabetIndexerBridge::SetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
765 {
766     EcmaVM* vm = runtimeCallInfo->GetVM();
767     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
768     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
769     Local<JSValueRef> hapticFeedbackArg = runtimeCallInfo->GetCallArgRef(1);
770     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
771     bool isHapticEnable = true;
772     if (hapticFeedbackArg->IsBoolean()) {
773         isHapticEnable = hapticFeedbackArg->ToBoolean(vm)->Value();
774     }
775     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->setEnableHapticFeedback(nativeNode, isHapticEnable);
776     return panda::JSValueRef::Undefined(vm);
777 }
778 
ResetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)779 ArkUINativeModuleValue AlphabetIndexerBridge::ResetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
780 {
781     EcmaVM* vm = runtimeCallInfo->GetVM();
782     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
783     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
784     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
785     GetArkUINodeModifiers()->getAlphabetIndexerModifier()->resetEnableHapticFeedback(nativeNode);
786     return panda::JSValueRef::Undefined(vm);
787 }
788 } // namespace OHOS::Ace::NG
789