Skip to content

Commit b0cb3fb

Browse files
gosha212d4vidi
andauthored
Fixed crash in Android (#8104)
--------- Co-authored-by: d4vidi <[email protected]>
1 parent c189cd5 commit b0cb3fb

File tree

1 file changed

+43
-30
lines changed

1 file changed

+43
-30
lines changed

lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationTurboModule.kt

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,22 @@ class NavigationTurboModule(
3636
override fun onHostPause() {
3737
super.onHostPause()
3838
UiUtils.runOnMainThread {
39-
navigator().onHostPause()
39+
navigator()?.onHostPause()
4040
}
4141
}
4242

4343
override fun onHostResume() {
4444
eventEmitter = EventEmitter(reactContext)
45-
navigator().setEventEmitter(eventEmitter)
46-
layoutFactory.init(
47-
activity(),
48-
eventEmitter,
49-
navigator().getChildRegistry(),
50-
(activity().application as NavigationApplication).externalComponents
51-
)
52-
UiUtils.runOnMainThread { navigator().onHostResume() }
45+
navigator()?.let { navigator: Navigator ->
46+
navigator.setEventEmitter(eventEmitter)
47+
layoutFactory.init(
48+
activity(),
49+
eventEmitter,
50+
navigator.childRegistry,
51+
(reactApplicationContext.applicationContext as NavigationApplication).externalComponents
52+
)
53+
UiUtils.runOnMainThread { navigator.onHostResume() }
54+
}
5355
}
5456
})
5557
}
@@ -82,7 +84,7 @@ class NavigationTurboModule(
8284
handle {
8385
Log.d("NavigationTurboModule", "setRoot handle ${Thread.currentThread()}")
8486
val viewController = layoutFactory.create(layoutTree)
85-
navigator().setRoot(
87+
navigator()?.setRoot(
8688
viewController,
8789
NativeCommandListener("setRoot", commandId, promise, eventEmitter, now)
8890
)
@@ -93,12 +95,12 @@ class NavigationTurboModule(
9395
handle {
9496
val defaultOptions = parse(options)
9597
layoutFactory.defaultOptions = defaultOptions
96-
navigator().defaultOptions = defaultOptions
98+
navigator()?.defaultOptions = defaultOptions
9799
}
98100
}
99101

100102
override fun mergeOptions(componentId: String?, options: ReadableMap?) {
101-
handle { navigator().mergeOptions(componentId, parse(options)) }
103+
handle { navigator()?.mergeOptions(componentId, parse(options)) }
102104
}
103105

104106
override fun push(
@@ -110,7 +112,7 @@ class NavigationTurboModule(
110112
val layoutTree = LayoutNodeParser.parse(jsonParser.parse(layout))
111113
handle {
112114
val viewController = layoutFactory.create(layoutTree)
113-
navigator().push(
115+
navigator()?.push(
114116
componentId,
115117
viewController,
116118
NativeCommandListener("push", commandId, promise, eventEmitter, now)
@@ -125,7 +127,7 @@ class NavigationTurboModule(
125127
promise: Promise
126128
) {
127129
handle {
128-
navigator().pop(
130+
navigator()?.pop(
129131
componentId,
130132
parse(options),
131133
NativeCommandListener("pop", commandId, promise, eventEmitter, now)
@@ -140,7 +142,7 @@ class NavigationTurboModule(
140142
promise: Promise
141143
) {
142144
handle {
143-
navigator().popTo(
145+
navigator()?.popTo(
144146
componentId,
145147
parse(options),
146148
NativeCommandListener("popTo", commandId, promise, eventEmitter, now)
@@ -155,7 +157,7 @@ class NavigationTurboModule(
155157
promise: Promise
156158
) {
157159
handle {
158-
navigator().popToRoot(
160+
navigator()?.popToRoot(
159161
componentId,
160162
parse(options),
161163
NativeCommandListener("popToRoot", commandId, promise, eventEmitter, now)
@@ -175,7 +177,7 @@ class NavigationTurboModule(
175177
val layoutTree = LayoutNodeParser.parse(jsonParser.parse(children.getMap(i)))
176178
_children.add(layoutFactory.create(layoutTree))
177179
}
178-
navigator().setStackRoot(
180+
navigator()?.setStackRoot(
179181
componentId,
180182
_children,
181183
NativeCommandListener("setStackRoot", commandId, promise, eventEmitter, now)
@@ -187,7 +189,7 @@ class NavigationTurboModule(
187189
val layoutTree = LayoutNodeParser.parse(jsonParser.parse(layout))
188190
handle {
189191
val viewController = layoutFactory.create(layoutTree)
190-
navigator().showModal(
192+
navigator()?.showModal(
191193
viewController,
192194
NativeCommandListener("showModal", commandId, promise, eventEmitter, now)
193195
)
@@ -201,8 +203,8 @@ class NavigationTurboModule(
201203
promise: Promise
202204
) {
203205
handle {
204-
navigator().mergeOptions(componentId, parse(options))
205-
navigator().dismissModal(
206+
navigator()?.mergeOptions(componentId, parse(options))
207+
navigator()?.dismissModal(
206208
componentId,
207209
NativeCommandListener("dismissModal", commandId, promise, eventEmitter, now)
208210
)
@@ -211,7 +213,7 @@ class NavigationTurboModule(
211213

212214
override fun dismissAllModals(commandId: String, options: ReadableMap?, promise: Promise) {
213215
handle {
214-
navigator().dismissAllModals(
216+
navigator()?.dismissAllModals(
215217
parse(options),
216218
NativeCommandListener("dismissAllModals", commandId, promise, eventEmitter, now)
217219
)
@@ -222,7 +224,7 @@ class NavigationTurboModule(
222224
val layoutTree = LayoutNodeParser.parse(jsonParser.parse(layout))
223225
handle {
224226
val viewController = layoutFactory.create(layoutTree)
225-
navigator().showOverlay(
227+
navigator()?.showOverlay(
226228
viewController,
227229
NativeCommandListener("showOverlay", commandId, promise, eventEmitter, now)
228230
)
@@ -231,7 +233,7 @@ class NavigationTurboModule(
231233

232234
override fun dismissOverlay(commandId: String, componentId: String, promise: Promise) {
233235
handle {
234-
navigator().dismissOverlay(
236+
navigator()?.dismissOverlay(
235237
componentId,
236238
NativeCommandListener("dismissOverlay", commandId, promise, eventEmitter, now)
237239
)
@@ -240,7 +242,7 @@ class NavigationTurboModule(
240242

241243
override fun dismissAllOverlays(commandId: String, promise: Promise) {
242244
handle {
243-
navigator().dismissAllOverlays(
245+
navigator()?.dismissAllOverlays(
244246
NativeCommandListener(
245247
"dismissAllOverlays",
246248
commandId,
@@ -263,25 +265,36 @@ class NavigationTurboModule(
263265
null
264266
) Options.EMPTY else Options.parse(
265267
ctx,
266-
TypefaceLoader(activity()),
268+
TypefaceLoader(reactApplicationContext),
267269
jsonParser.parse(mergeOptions)
268270
)
269271
}
270272

271-
private fun navigator(): Navigator {
272-
return activity().navigator
273+
private fun navigator(): Navigator? {
274+
val navigator = activity()?.navigator
275+
if (navigator == null) {
276+
Log.e("NavigationTurboModule", "navigator is null!")
277+
}
278+
return navigator
273279
}
274280

275281
private fun handle(task: Runnable) {
276282
UiThread.post {
277-
if (currentActivity != null && !activity().isFinishing) {
283+
activity()?.let {
284+
if (it.isFinishing) {
285+
return@let
286+
}
278287
task.run()
279288
}
280289
}
281290
}
282291

283-
private fun activity(): NavigationActivity {
284-
return currentActivity as NavigationActivity
292+
private fun activity(): NavigationActivity? {
293+
val activity = reactApplicationContext.currentActivity as NavigationActivity?
294+
if (activity == null) {
295+
Log.e("NavigationTurboModule", "current activity is null!")
296+
}
297+
return currentActivity as NavigationActivity?
285298
}
286299

287300
companion object {

0 commit comments

Comments
 (0)