• 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_navigation_bridge.h"
16 
17 #include "core/interfaces/native/node/api.h"
18 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
19 #include "bridge/declarative_frontend/jsview/js_utils.h"
20 #include "core/components_ng/pattern/navigation/navigation_declaration.h"
21 #include "core/components_ng/pattern/navigation/navigation_model_ng.h"
22 #include "frameworks/bridge/declarative_frontend/engine/js_types.h"
23 namespace OHOS::Ace::NG {} // namespace OHOS::Ace::NG
24 namespace OHOS::Ace::NG {
SetHideToolBar(ArkUIRuntimeCallInfo * runtimeCallInfo)25 ArkUINativeModuleValue NavigationBridge::SetHideToolBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
26 {
27     EcmaVM* vm = runtimeCallInfo->GetVM();
28     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
29     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
30     Local<JSValueRef> hideArg = runtimeCallInfo->GetCallArgRef(1);
31     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
32     if (hideArg->IsNull() || hideArg->IsUndefined() || !hideArg->IsBoolean()) {
33         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetHideToolBar(nativeNode);
34     } else {
35         bool hide = hideArg->ToBoolean(vm)->Value();
36         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetHideToolBar(nativeNode, hide);
37     }
38     return panda::JSValueRef::Undefined(vm);
39 }
40 
ResetHideToolBar(ArkUIRuntimeCallInfo * runtimeCallInfo)41 ArkUINativeModuleValue NavigationBridge::ResetHideToolBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
42 {
43     EcmaVM* vm = runtimeCallInfo->GetVM();
44     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
45     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
46     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
47     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetHideToolBar(nativeNode);
48     return panda::JSValueRef::Undefined(vm);
49 }
50 
SetTitleMode(ArkUIRuntimeCallInfo * runtimeCallInfo)51 ArkUINativeModuleValue NavigationBridge::SetTitleMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
52 {
53     EcmaVM* vm = runtimeCallInfo->GetVM();
54     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
55     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
56     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
57     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
58     int32_t value;
59     if (valueArg->IsNull() || valueArg->IsUndefined() || !ArkTSUtils::ParseJsInteger(vm, valueArg, value)) {
60         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetTitleMode(nativeNode);
61     } else {
62         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetTitleMode(nativeNode, value);
63     }
64     return panda::JSValueRef::Undefined(vm);
65 }
66 
ResetTitleMode(ArkUIRuntimeCallInfo * runtimeCallInfo)67 ArkUINativeModuleValue NavigationBridge::ResetTitleMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
68 {
69     EcmaVM* vm = runtimeCallInfo->GetVM();
70     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
71     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
72     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
73     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetTitleMode(nativeNode);
74     return panda::JSValueRef::Undefined(vm);
75 }
76 
SetHideBackButton(ArkUIRuntimeCallInfo * runtimeCallInfo)77 ArkUINativeModuleValue NavigationBridge::SetHideBackButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
78 {
79     EcmaVM* vm = runtimeCallInfo->GetVM();
80     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
81     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
82     Local<JSValueRef> hideArg = runtimeCallInfo->GetCallArgRef(1);
83     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
84     if (hideArg->IsBoolean()) {
85         bool hide = hideArg->ToBoolean(vm)->Value();
86         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetHideBackButton(nativeNode, hide);
87     } else {
88         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetHideBackButton(nativeNode);
89     }
90     return panda::JSValueRef::Undefined(vm);
91 }
92 
ResetHideBackButton(ArkUIRuntimeCallInfo * runtimeCallInfo)93 ArkUINativeModuleValue NavigationBridge::ResetHideBackButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
94 {
95     EcmaVM* vm = runtimeCallInfo->GetVM();
96     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
97     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
98     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
99     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetHideBackButton(nativeNode);
100     return panda::JSValueRef::Undefined(vm);
101 }
102 
SetSubtitle(ArkUIRuntimeCallInfo * runtimeCallInfo)103 ArkUINativeModuleValue NavigationBridge::SetSubtitle(ArkUIRuntimeCallInfo* runtimeCallInfo)
104 {
105     EcmaVM* vm = runtimeCallInfo->GetVM();
106     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
107     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
108     Local<JSValueRef> subtitleArg = runtimeCallInfo->GetCallArgRef(1);
109     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
110     if (subtitleArg->IsString()) {
111         std::string subtitle = subtitleArg->ToString(vm)->ToString();
112         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetSubtitle(nativeNode, subtitle.c_str());
113     } else {
114         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetSubtitle(nativeNode);
115     }
116     return panda::JSValueRef::Undefined(vm);
117 }
118 
ResetSubtitle(ArkUIRuntimeCallInfo * runtimeCallInfo)119 ArkUINativeModuleValue NavigationBridge::ResetSubtitle(ArkUIRuntimeCallInfo* runtimeCallInfo)
120 {
121     EcmaVM* vm = runtimeCallInfo->GetVM();
122     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
123     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
124     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
125     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetSubtitle(nativeNode);
126     return panda::JSValueRef::Undefined(vm);
127 }
128 
SetHideNavBar(ArkUIRuntimeCallInfo * runtimeCallInfo)129 ArkUINativeModuleValue NavigationBridge::SetHideNavBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
130 {
131     EcmaVM* vm = runtimeCallInfo->GetVM();
132     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
133     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
134     Local<JSValueRef> hideArg = runtimeCallInfo->GetCallArgRef(1);
135     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
136     if (hideArg->IsBoolean()) {
137         bool hide = hideArg->ToBoolean(vm)->Value();
138         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetHideNavBar(nativeNode, hide);
139     } else {
140         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetHideNavBar(nativeNode);
141     }
142 
143     return panda::JSValueRef::Undefined(vm);
144 }
145 
ResetHideNavBar(ArkUIRuntimeCallInfo * runtimeCallInfo)146 ArkUINativeModuleValue NavigationBridge::ResetHideNavBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
147 {
148     EcmaVM* vm = runtimeCallInfo->GetVM();
149     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
150     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
151     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
152     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetHideNavBar(nativeNode);
153     return panda::JSValueRef::Undefined(vm);
154 }
155 
SetUsrNavigationMode(ArkUIRuntimeCallInfo * runtimeCallInfo)156 ArkUINativeModuleValue NavigationBridge::SetUsrNavigationMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
157 {
158     EcmaVM* vm = runtimeCallInfo->GetVM();
159     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
160     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
161     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
162     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
163     if (valueArg->IsUndefined() || !valueArg->IsNumber()) {
164         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetUsrNavigationMode(nativeNode);
165         return panda::JSValueRef::Undefined(vm);
166     }
167     uint32_t value = valueArg->Uint32Value(vm);
168     GetArkUIInternalNodeAPI()->GetNavigationModifier().SetUsrNavigationMode(nativeNode, value);
169     return panda::JSValueRef::Undefined(vm);
170 }
171 
ResetUsrNavigationMode(ArkUIRuntimeCallInfo * runtimeCallInfo)172 ArkUINativeModuleValue NavigationBridge::ResetUsrNavigationMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
173 {
174     EcmaVM* vm = runtimeCallInfo->GetVM();
175     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
176     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
177     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
178     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetUsrNavigationMode(nativeNode);
179     return panda::JSValueRef::Undefined(vm);
180 }
181 
SetHideTitleBar(ArkUIRuntimeCallInfo * runtimeCallInfo)182 ArkUINativeModuleValue NavigationBridge::SetHideTitleBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
183 {
184     EcmaVM* vm = runtimeCallInfo->GetVM();
185     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
186     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
187     Local<JSValueRef> hideArg = runtimeCallInfo->GetCallArgRef(1);
188     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
189     if (hideArg->IsBoolean()) {
190         bool hide = hideArg->ToBoolean(vm)->Value();
191         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetNavHideTitleBar(nativeNode, hide);
192     } else {
193         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetNavHideTitleBar(nativeNode);
194     }
195     return panda::JSValueRef::Undefined(vm);
196 }
197 
ResetHideTitleBar(ArkUIRuntimeCallInfo * runtimeCallInfo)198 ArkUINativeModuleValue NavigationBridge::ResetHideTitleBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
199 {
200     EcmaVM* vm = runtimeCallInfo->GetVM();
201     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
202     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
203     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
204     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetNavHideTitleBar(nativeNode);
205     return panda::JSValueRef::Undefined(vm);
206 }
207 
SetNavBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)208 ArkUINativeModuleValue NavigationBridge::SetNavBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
209 {
210     EcmaVM* vm = runtimeCallInfo->GetVM();
211     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
212     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
213     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
214     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
215     if (valueArg->IsUndefined() || !valueArg->IsNumber()) {
216         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetNavBarPosition(nativeNode);
217         return panda::JSValueRef::Undefined(vm);
218     }
219     int32_t value = valueArg->Int32Value(vm);
220     GetArkUIInternalNodeAPI()->GetNavigationModifier().SetNavBarPosition(nativeNode, value);
221     return panda::JSValueRef::Undefined(vm);
222 }
223 
ResetNavBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)224 ArkUINativeModuleValue NavigationBridge::ResetNavBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
225 {
226     EcmaVM* vm = runtimeCallInfo->GetVM();
227     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
228     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
229     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
230     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetNavBarPosition(nativeNode);
231     return panda::JSValueRef::Undefined(vm);
232 }
233 
SetNavBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)234 ArkUINativeModuleValue NavigationBridge::SetNavBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
235 {
236     EcmaVM* vm = runtimeCallInfo->GetVM();
237     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
238     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
239     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
240     Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(1);
241 
242     CalcDimension width;
243     if (jsValue->IsNull() || jsValue->IsUndefined() || !ArkTSUtils::ParseJsDimensionVpNG(vm, jsValue, width)) {
244         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetNavBarWidth(nativeNode);
245     } else {
246         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetNavBarWidth(
247             nativeNode, width.Value(), static_cast<int>(width.Unit()));
248     }
249     return panda::JSValueRef::Undefined(vm);
250 }
251 
ResetNavBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)252 ArkUINativeModuleValue NavigationBridge::ResetNavBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
253 {
254     EcmaVM* vm = runtimeCallInfo->GetVM();
255     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
256     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
257     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
258     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetNavBarWidth(nativeNode);
259     return panda::JSValueRef::Undefined(vm);
260 }
261 
SetNavBarWidthRange(ArkUIRuntimeCallInfo * runtimeCallInfo)262 ArkUINativeModuleValue NavigationBridge::SetNavBarWidthRange(ArkUIRuntimeCallInfo* runtimeCallInfo)
263 {
264     EcmaVM* vm = runtimeCallInfo->GetVM();
265     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
266     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
267     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
268     Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(1);
269     if (jsValue->IsNull() || jsValue->IsUndefined() || !jsValue->IsArray(vm)) {
270         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetMinNavBarWidth(nativeNode);
271         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetMaxNavBarWidth(nativeNode);
272         return panda::JSValueRef::Undefined(vm);
273     }
274     auto rangeArray = panda::Local<panda::ArrayRef>(jsValue);
275     auto minNavBarWidth = panda::ArrayRef::GetValueAt(vm, rangeArray, 0);
276     CalcDimension minWidth;
277     if (minNavBarWidth->IsNull() || minNavBarWidth->IsUndefined() ||
278         !ArkTSUtils::ParseJsDimensionVp(vm, minNavBarWidth, minWidth)) {
279         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetMinNavBarWidth(nativeNode);
280     } else {
281         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetMinNavBarWidth(
282             nativeNode, minWidth.Value(), static_cast<int>(minWidth.Unit()));
283     }
284     auto maxNavBarWidth = panda::ArrayRef::GetValueAt(vm, rangeArray, 1);
285     CalcDimension maxWidth;
286     if (maxNavBarWidth->IsNull() || maxNavBarWidth->IsUndefined() ||
287         !ArkTSUtils::ParseJsDimensionVp(vm, maxNavBarWidth, maxWidth)) {
288         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetMaxNavBarWidth(nativeNode);
289     } else {
290         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetMaxNavBarWidth(
291             nativeNode, maxWidth.Value(), static_cast<int>(maxWidth.Unit()));
292     }
293     return panda::JSValueRef::Undefined(vm);
294 }
295 
ResetNavBarWidthRange(ArkUIRuntimeCallInfo * runtimeCallInfo)296 ArkUINativeModuleValue NavigationBridge::ResetNavBarWidthRange(ArkUIRuntimeCallInfo* runtimeCallInfo)
297 {
298     EcmaVM* vm = runtimeCallInfo->GetVM();
299     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
300     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
301     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
302     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetMinNavBarWidth(nativeNode);
303     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetMaxNavBarWidth(nativeNode);
304     return panda::JSValueRef::Undefined(vm);
305 }
306 
SetMinContentWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)307 ArkUINativeModuleValue NavigationBridge::SetMinContentWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
308 {
309     EcmaVM* vm = runtimeCallInfo->GetVM();
310     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
311     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
312     void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
313     Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(1);
314 
315     CalcDimension width;
316     if (jsValue->IsNull() || jsValue->IsUndefined() || !ArkTSUtils::ParseJsDimensionVpNG(vm, jsValue, width)) {
317         GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetMinContentWidth(nativeNode);
318     } else {
319         GetArkUIInternalNodeAPI()->GetNavigationModifier().SetMinContentWidth(
320             nativeNode, width.Value(), static_cast<int>(width.Unit()));
321     }
322     return panda::JSValueRef::Undefined(vm);
323 }
324 
ResetMinContentWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)325 ArkUINativeModuleValue NavigationBridge::ResetMinContentWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
326 {
327     EcmaVM* vm = runtimeCallInfo->GetVM();
328     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
329     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
330     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
331     GetArkUIInternalNodeAPI()->GetNavigationModifier().ResetMinContentWidth(nativeNode);
332     return panda::JSValueRef::Undefined(vm);
333 }
334 
SetBackButtonIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)335 ArkUINativeModuleValue NavigationBridge::SetBackButtonIcon(ArkUIRuntimeCallInfo* runtimeCallInfo)
336 {
337     EcmaVM* vm = runtimeCallInfo->GetVM();
338     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
339     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
340     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
341     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
342 
343     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
344     std::string src;
345     auto noPixMap = Framework::JSViewAbstract::ParseJsMedia(info[1], src);
346 
347     RefPtr<PixelMap> pixMap = nullptr;
348 #if defined(PIXEL_MAP_SUPPORTED)
349     if (!noPixMap) {
350         pixMap = CreatePixelMapFromNapiValue(info[1]);
351     }
352 #endif
353     std::string bundleName;
354     std::string moduleName;
355     Framework::JSViewAbstract::GetJsMediaBundleInfo(info[1], bundleName, moduleName);
356 
357     NavigationModelNG::SetBackButtonIcon(frameNode, src, noPixMap, pixMap);
358     return panda::JSValueRef::Undefined(vm);
359 }
360 
ResetBackButtonIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)361 ArkUINativeModuleValue NavigationBridge::ResetBackButtonIcon(ArkUIRuntimeCallInfo* runtimeCallInfo)
362 {
363     EcmaVM* vm = runtimeCallInfo->GetVM();
364     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
365     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
366     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
367     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
368     bool noPixMap = false;
369     RefPtr<PixelMap> pixMap = nullptr;
370     std::string src;
371     NavigationModelNG::SetBackButtonIcon(frameNode, src, noPixMap, pixMap);
372     return panda::JSValueRef::Undefined(vm);
373 }
374 } // namespace OHOS::Ace::NG
375