• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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_indicator_component_bridge.h"
16 
17 #include "jsnapi_expo.h"
18 
19 #include "bridge/declarative_frontend/engine/jsi/jsi_types.h"
20 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
21 #include "core/components/common/layout/constants.h"
22 
23 namespace OHOS::Ace::NG {
24 
25 namespace {
26 constexpr int32_t CALL_ARG_NODE_INDEX = 0;
27 constexpr int32_t CALL_ARG_VALUE_INDEX = 1;
28 constexpr int32_t FUNC_PARAM_LENGTH_1 = 1;
29 constexpr int32_t DIGIT_INDICATOR_FONT_COLOR = 2;
30 constexpr int32_t DIGIT_INDICATOR_SELECTED_FONT_COLOR = 3;
31 constexpr int32_t DIGIT_INDICATOR_DIGIT_FONT_SIZE = 4;
32 constexpr int32_t DIGIT_INDICATOR_DIGIT_FONT_WEIGHT = 5;
33 constexpr int32_t DIGIT_INDICATOR_SELECTED_DIGIT_FONT_SIZE = 6;
34 constexpr int32_t DIGIT_INDICATOR_SELECTED_DIGIT_FONT_WEIGHT = 7;
35 constexpr int32_t DIGIT_INDICATOR_LEFT = 8;
36 constexpr int32_t DIGIT_INDICATOR_TOP = 9;
37 constexpr int32_t DIGIT_INDICATOR_RIGHT = 10;
38 constexpr int32_t DIGIT_INDICATOR_BOTTOM = 11;
39 constexpr int32_t DOT_INDICATOR_ITEM_WIDTH = 2;
40 constexpr int32_t DOT_INDICATOR_ITEM_HEIGHT = 3;
41 constexpr int32_t DOT_INDICATOR_SELECTED_ITEM_WIDTH = 4;
42 constexpr int32_t DOT_INDICATOR_SELECTED_ITEM_HEIGHT = 5;
43 constexpr int32_t DOT_INDICATOR_MASK = 6;
44 constexpr int32_t DOT_INDICATOR_COLOR = 7;
45 constexpr int32_t DOT_INDICATOR_SELECTED_COLOR = 8;
46 constexpr int32_t DOT_INDICATOR_LEFT = 9;
47 constexpr int32_t DOT_INDICATOR_TOP = 10;
48 constexpr int32_t DOT_INDICATOR_RIGHT = 11;
49 constexpr int32_t DOT_INDICATOR_BOTTOM = 12;
50 constexpr int32_t DOT_INDICATOR_MAX_DISPLAY_COUNT = 13;
51 constexpr int32_t DOT_INDICATOR_SPACE = 14;
52 constexpr int32_t DEFAULT_INDICATOR_COUNT = 2;
53 constexpr int32_t DOT_INDICATOR_RESOURCE_ITEM_WIDTH = 0;
54 constexpr int32_t DOT_INDICATOR_RESOURCE_ITEM_HEIGHT = 1;
55 constexpr int32_t DOT_INDICATOR_RESOURCE_SELECTED_ITEM_WIDTH = 2;
56 constexpr int32_t DOT_INDICATOR_RESOURCE_SELECTED_ITEM_HEIGHT = 3;
57 constexpr int32_t DOT_INDICATOR_RESOURCE_COLOR = 4;
58 constexpr int32_t DOT_INDICATOR_RESOURCE_SELECTED_COLOR = 5;
59 constexpr int32_t INDICATOR_RESOURCE_VECTOR_LENGTH = 6;
60 constexpr int32_t DIGIT_INDICATOR_RESOURCE_FONT_COLOR = 0;
61 constexpr int32_t DIGIT_INDICATOR_RESOURCE_FONT_SELECTED_COLOR = 1;
62 constexpr int32_t DIGIT_INDICATOR_RESOURCE_FONT_SIZE = 2;
63 constexpr int32_t DIGIT_INDICATOR_RESOURCE_SELECTED_FONT_SIZE = 3;
64 constexpr double DEFAULT_PERCENT_VALUE = 100.0;
65 
GetDimensionUnitString(DimensionUnit unit)66 std::string GetDimensionUnitString(DimensionUnit unit)
67 {
68     switch (unit) {
69         case DimensionUnit::VP:
70             return "vp";
71         case DimensionUnit::PX:
72             return "px";
73         case DimensionUnit::FP:
74             return "fp";
75         case DimensionUnit::CALC:
76             return "calc";
77         default:
78             return "px";
79     }
80 }
81 
GetStringByValueRef(const EcmaVM * vm,const Local<JSValueRef> & jsValue)82 std::string GetStringByValueRef(const EcmaVM* vm, const Local<JSValueRef>& jsValue)
83 {
84     std::string result = "-";
85     if (jsValue->IsUndefined()) {
86         return result;
87     }
88     CalcDimension calc;
89     result = ArkTSUtils::ParseJsDimension(vm, jsValue, calc, DimensionUnit::VP, true)
90                  ? (calc.Unit() == DimensionUnit::PERCENT
91                            ? (std::to_string(calc.Value() * DEFAULT_PERCENT_VALUE) + "%")
92                            : (std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())))
93                  : "0.0_vp";
94     return result;
95 }
96 
GetIntStringByValueRef(const EcmaVM * vm,const Local<JSValueRef> & jsValue)97 std::string GetIntStringByValueRef(const EcmaVM* vm, const Local<JSValueRef>& jsValue)
98 {
99     std::string result = "-";
100     if (jsValue->IsUndefined()) {
101         return result;
102     }
103     int32_t intValue;
104     result = ArkTSUtils::ParseJsInteger(vm, jsValue, intValue) ? std::to_string(intValue) : "0";
105     return result;
106 }
107 
ParseSpace(const EcmaVM * vm,const Local<JSValueRef> & jsValue)108 std::string ParseSpace(const EcmaVM* vm, const Local<JSValueRef>& jsValue)
109 {
110     std::string result = "-";
111     if (jsValue->IsUndefined()) {
112         return result;
113     }
114     CalcDimension calc;
115     bool parseOK =  ArkTSUtils::ParseJsLengthMetrics(vm, jsValue, calc);
116     calc = (parseOK && !(calc < 0.0_vp) && calc.Unit() != DimensionUnit::PERCENT) ?
117         calc : 8.0_vp;
118     return calc.ToString();
119 }
120 
GetDotIndicator(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::vector<RefPtr<ResourceObject>> & resObjs,const NodeInfo & nodeInfo)121 std::string GetDotIndicator(ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm,
122     std::vector<RefPtr<ResourceObject>>& resObjs, const NodeInfo& nodeInfo)
123 {
124     Local<JSValueRef> itemWidthArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_ITEM_WIDTH);
125     Local<JSValueRef> itemHeightArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_ITEM_HEIGHT);
126     Local<JSValueRef> selectedItemWidthArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SELECTED_ITEM_WIDTH);
127     Local<JSValueRef> selectedItemHeightArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SELECTED_ITEM_HEIGHT);
128     Local<JSValueRef> maskArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_MASK);
129     Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_COLOR);
130     Local<JSValueRef> selectedColorArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SELECTED_COLOR);
131     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_LEFT);
132     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_TOP);
133     Local<JSValueRef> rightArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_RIGHT);
134     Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_BOTTOM);
135     Local<JSValueRef> spaceArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SPACE);
136     CalcDimension calc;
137 
138     std::string itemWidth = ArkTSUtils::ParseJsDimension(vm, itemWidthArg, calc, DimensionUnit::VP,
139         resObjs.at(DOT_INDICATOR_RESOURCE_ITEM_WIDTH), false)
140         ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit()) : "-";
141     std::string itemHeight = ArkTSUtils::ParseJsDimension(vm, itemHeightArg, calc, DimensionUnit::VP,
142         resObjs.at(DOT_INDICATOR_RESOURCE_ITEM_HEIGHT), false)
143         ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit()) : "-";
144     std::string selectedItemWidth = ArkTSUtils::ParseJsDimension(vm, selectedItemWidthArg, calc, DimensionUnit::VP,
145         resObjs.at(DOT_INDICATOR_RESOURCE_SELECTED_ITEM_WIDTH), false)
146         ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit()) : "-";
147     std::string selectedItemHeight = ArkTSUtils::ParseJsDimension(vm, selectedItemHeightArg, calc, DimensionUnit::VP,
148         resObjs.at(DOT_INDICATOR_RESOURCE_SELECTED_ITEM_HEIGHT), false)
149         ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit()) : "-";
150     std::string mask = "2";
151     if (!maskArg->IsUndefined()) {
152         mask = maskArg->ToBoolean(vm)->Value() ? "1" : "0";
153     }
154     Color color;
155     std::string colorStr = ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color,
156         resObjs.at(DOT_INDICATOR_RESOURCE_COLOR), nodeInfo) ? std::to_string(color.GetValue()) : "-";
157     std::string selectedColor = ArkTSUtils::ParseJsColorAlpha(vm, selectedColorArg, color,
158         resObjs.at(DOT_INDICATOR_RESOURCE_SELECTED_COLOR), nodeInfo) ? std::to_string(color.GetValue()) : "-";
159     std::string left = GetStringByValueRef(vm, leftArg);
160     std::string top = GetStringByValueRef(vm, topArg);
161     std::string right = GetStringByValueRef(vm, rightArg);
162     std::string bottom = GetStringByValueRef(vm, bottomArg);
163     std::string space = ParseSpace(vm, spaceArg);
164     Local<JSValueRef> maxDisplayCountArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_MAX_DISPLAY_COUNT);
165     auto maxDisplayCount = GetIntStringByValueRef(vm, maxDisplayCountArg);
166     std::string indicatorStr = itemWidth + "|" + itemHeight + "|" + selectedItemWidth + "|" + selectedItemHeight + "|" +
167                                mask + "|" + colorStr + "|" + selectedColor + "|" + left + "|" + top + "|" + right +
168                                "|" + bottom + "|" + maxDisplayCount + "|" + space;
169     return indicatorStr;
170 }
171 
GetDigitIndicator(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::vector<RefPtr<ResourceObject>> & resObjs,const NodeInfo & nodeInfo)172 std::string GetDigitIndicator(ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm,
173     std::vector<RefPtr<ResourceObject>>& resObjs, const NodeInfo& nodeInfo)
174 {
175     Local<JSValueRef> fontColorArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_FONT_COLOR);
176     Local<JSValueRef> selectedFontColorArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SELECTED_FONT_COLOR);
177     Local<JSValueRef> digitFontSizeArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_DIGIT_FONT_SIZE);
178     Local<JSValueRef> digitFontWeightArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_DIGIT_FONT_WEIGHT);
179     Local<JSValueRef> selectedDigitFontSizeArg =
180         runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SELECTED_DIGIT_FONT_SIZE);
181     Local<JSValueRef> selectedDigitFontWeightArg =
182         runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SELECTED_DIGIT_FONT_WEIGHT);
183     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_LEFT);
184     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_TOP);
185     Local<JSValueRef> rightArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_RIGHT);
186     Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_BOTTOM);
187     Color color;
188     CalcDimension calc;
189     std::string fontColor = ArkTSUtils::ParseJsColorAlpha(vm, fontColorArg, color,
190         resObjs.at(DIGIT_INDICATOR_RESOURCE_FONT_COLOR), nodeInfo) ? std::to_string(color.GetValue()) : "-";
191     std::string selectedFontColor = ArkTSUtils::ParseJsColorAlpha(vm, selectedFontColorArg, color,
192         resObjs.at(DIGIT_INDICATOR_RESOURCE_FONT_SELECTED_COLOR), nodeInfo) ? std::to_string(color.GetValue()) : "-";
193     std::string digitFontSize = ArkTSUtils::ParseJsDimension(vm, digitFontSizeArg, calc, DimensionUnit::FP,
194         resObjs.at(DIGIT_INDICATOR_RESOURCE_FONT_SIZE), false)
195         ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit()) : "-";
196     std::string digitFontWeight = digitFontWeightArg->ToString(vm)->ToString(vm);
197     std::string selectedDigitFontSize = ArkTSUtils::ParseJsDimension(vm, selectedDigitFontSizeArg, calc,
198         DimensionUnit::FP, resObjs.at(DIGIT_INDICATOR_RESOURCE_SELECTED_FONT_SIZE), false)
199         ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit()) : "-";
200 
201     std::string selectedDigitFontWeight = selectedDigitFontWeightArg->ToString(vm)->ToString(vm);
202     std::string left = GetStringByValueRef(vm, leftArg);
203     std::string top = GetStringByValueRef(vm, topArg);
204     std::string right = GetStringByValueRef(vm, rightArg);
205     std::string bottom = GetStringByValueRef(vm, bottomArg);
206     std::string indicatorStr = fontColor + "|" + selectedFontColor + "|" + digitFontSize + "|" + digitFontWeight + "|" +
207                                selectedDigitFontSize + "|" + selectedDigitFontWeight + "|" + left + "|" + top + "|" +
208                                right + "|" + bottom;
209     return indicatorStr;
210 }
211 } // namespace
212 
SetInitialIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)213 ArkUINativeModuleValue IndicatorComponentBridge::SetInitialIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
214 {
215     EcmaVM* vm = runtimeCallInfo->GetVM();
216     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
217     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
218     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
219     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
220     if (valueArg->IsNumber()) {
221         int32_t index = valueArg->Int32Value(vm);
222         GetArkUINodeModifiers()->getIndicatorComponentModifier()->setInitialIndex(nativeNode, index);
223     } else {
224         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetInitialIndex(nativeNode);
225     }
226     return panda::JSValueRef::Undefined(vm);
227 }
228 
ResetInitialIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)229 ArkUINativeModuleValue IndicatorComponentBridge::ResetInitialIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
230 {
231     EcmaVM* vm = runtimeCallInfo->GetVM();
232     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
233     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
234     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
235     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetInitialIndex(nativeNode);
236     return panda::JSValueRef::Undefined(vm);
237 }
238 
SetCount(ArkUIRuntimeCallInfo * runtimeCallInfo)239 ArkUINativeModuleValue IndicatorComponentBridge::SetCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
240 {
241     EcmaVM* vm = runtimeCallInfo->GetVM();
242     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
243     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
244     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
245     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
246     if (valueArg->IsNumber()) {
247         int32_t count = std::max(DEFAULT_INDICATOR_COUNT, valueArg->Int32Value(vm));
248         GetArkUINodeModifiers()->getIndicatorComponentModifier()->setCount(nativeNode, count);
249     } else {
250         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetCount(nativeNode);
251     }
252     return panda::JSValueRef::Undefined(vm);
253 }
254 
ResetCount(ArkUIRuntimeCallInfo * runtimeCallInfo)255 ArkUINativeModuleValue IndicatorComponentBridge::ResetCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
256 {
257     EcmaVM* vm = runtimeCallInfo->GetVM();
258     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
259     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
260     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
261     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetCount(nativeNode);
262     return panda::JSValueRef::Undefined(vm);
263 }
264 
SetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)265 ArkUINativeModuleValue IndicatorComponentBridge::SetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
266 {
267     EcmaVM* vm = runtimeCallInfo->GetVM();
268     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
269     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
270     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
271     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
272     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
273     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
274     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
275         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetOnChange(nativeNode);
276         return panda::JSValueRef::Undefined(vm);
277     }
278     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
279     std::function<void(const BaseEventInfo* info)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
280                                                                   const BaseEventInfo* info) {
281         panda::LocalScope pandaScope(vm);
282         panda::TryCatch trycatch(vm);
283         const auto* swiperInfo = TypeInfoHelper::DynamicCast<SwiperChangeEvent>(info);
284         if (!swiperInfo) {
285             TAG_LOGW(AceLogTag::ACE_INDICATOR, "IndicatorComponent onChange callback execute failed.");
286             return;
287         }
288         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
289         panda::Local<panda::JSValueRef> params[FUNC_PARAM_LENGTH_1] = { panda::NumberRef::New(
290             vm, swiperInfo->GetIndex()) };
291         func->Call(vm, func.ToLocal(), params, FUNC_PARAM_LENGTH_1);
292     };
293     GetArkUINodeModifiers()->getIndicatorComponentModifier()->setOnChange(
294         nativeNode, reinterpret_cast<void*>(&callback));
295     return panda::JSValueRef::Undefined(vm);
296 }
297 
ResetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)298 ArkUINativeModuleValue IndicatorComponentBridge::ResetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
299 {
300     EcmaVM* vm = runtimeCallInfo->GetVM();
301     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
302     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
303     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
304     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetOnChange(nativeNode);
305     return panda::JSValueRef::Undefined(vm);
306 }
307 
SetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)308 ArkUINativeModuleValue IndicatorComponentBridge::SetStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
309 {
310     EcmaVM* vm = runtimeCallInfo->GetVM();
311     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
312     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
313     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
314     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
315     std::vector<RefPtr<ResourceObject>> resObjs;
316     std::string type = valueArg->ToString(vm)->ToString(vm);
317     resObjs.resize(INDICATOR_RESOURCE_VECTOR_LENGTH);
318     std::string indicatorStr = "";
319     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
320     if (type == "ArkDigitIndicator") {
321         indicatorStr = type + "|" + GetDigitIndicator(runtimeCallInfo, vm, resObjs, nodeInfo);
322     } else {
323         indicatorStr = type + "|" + GetDotIndicator(runtimeCallInfo, vm, resObjs, nodeInfo);
324     }
325     GetArkUINodeModifiers()->getIndicatorComponentModifier()->setStyle(nativeNode, indicatorStr.c_str(),
326         static_cast<void*>(&resObjs));
327     return panda::JSValueRef::Undefined(vm);
328 }
329 
ResetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)330 ArkUINativeModuleValue IndicatorComponentBridge::ResetStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
331 {
332     EcmaVM* vm = runtimeCallInfo->GetVM();
333     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
334     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
335     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
336     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetStyle(nativeNode);
337     return panda::JSValueRef::Undefined(vm);
338 }
339 
SetLoop(ArkUIRuntimeCallInfo * runtimeCallInfo)340 ArkUINativeModuleValue IndicatorComponentBridge::SetLoop(ArkUIRuntimeCallInfo* runtimeCallInfo)
341 {
342     EcmaVM* vm = runtimeCallInfo->GetVM();
343     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
344     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
345     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
346     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
347     if (valueArg->IsBoolean()) {
348         bool loop = valueArg->ToBoolean(vm)->Value();
349         GetArkUINodeModifiers()->getIndicatorComponentModifier()->setLoop(nativeNode, loop);
350     } else {
351         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetLoop(nativeNode);
352     }
353     return panda::JSValueRef::Undefined(vm);
354 }
355 
ResetLoop(ArkUIRuntimeCallInfo * runtimeCallInfo)356 ArkUINativeModuleValue IndicatorComponentBridge::ResetLoop(ArkUIRuntimeCallInfo* runtimeCallInfo)
357 {
358     EcmaVM* vm = runtimeCallInfo->GetVM();
359     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
360     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
361     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
362     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetLoop(nativeNode);
363     return panda::JSValueRef::Undefined(vm);
364 }
365 
SetVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)366 ArkUINativeModuleValue IndicatorComponentBridge::SetVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
367 {
368     EcmaVM* vm = runtimeCallInfo->GetVM();
369     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
370     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
371     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
372     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
373     if (valueArg->IsBoolean()) {
374         bool isVertical = valueArg->ToBoolean(vm)->Value();
375         GetArkUINodeModifiers()->getIndicatorComponentModifier()->setVertical(nativeNode, isVertical);
376     } else {
377         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetVertical(nativeNode);
378     }
379     return panda::JSValueRef::Undefined(vm);
380 }
381 
ResetVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)382 ArkUINativeModuleValue IndicatorComponentBridge::ResetVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
383 {
384     EcmaVM* vm = runtimeCallInfo->GetVM();
385     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
386     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
387     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
388     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetVertical(nativeNode);
389     return panda::JSValueRef::Undefined(vm);
390 }
391 
392 } // namespace OHOS::Ace::NG
393