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