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