Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -55,29 +55,39 @@ internal class MindboxSdkLifecycleListener private constructor(

private var activityEventListener: ActivityEventListener? = null
private var reactInstanceEventListener: ReactInstanceEventListener? = null
private var reactInstanceEventListenerActivity: Activity? = null
Comment thread
enotniy marked this conversation as resolved.

private fun onReactContextAvailable(reactContext: ReactContext, activity: Activity) {
Mindbox.writeLog("[RN] ReactContext ready", Level.INFO)
addActivityEventListener(reactContext)
subscriber.onEvent(MindboxSdkLifecycleEvent.ActivityCreated(reactContext, activity))
}

private fun registerReactContextListener(onReady: (ReactContext) -> Unit) {
private fun registerReactContextListener(activity: Activity, onReady: (ReactContext) -> Unit) {
val host = getReactHost(application) ?: run {
Mindbox.writeLog(
"[RN] registerReactContextListener: ReactHost is null, skip listener.",
Level.WARN
)
return
}
reactInstanceEventListener?.let { host.removeReactInstanceEventListener(it) }
reactInstanceEventListener?.let { previousListener ->
host.removeReactInstanceEventListener(previousListener)
}
reactInstanceEventListenerActivity = null
val listener = object : ReactInstanceEventListener {
override fun onReactContextInitialized(context: ReactContext) {
Mindbox.writeLog("[RN] ReactContext initialized (listener)", Level.INFO)
host.removeReactInstanceEventListener(this)
if (reactInstanceEventListener === this) {
reactInstanceEventListener = null
reactInstanceEventListenerActivity = null
}
onReady(context)
}
}
reactInstanceEventListener = listener
reactInstanceEventListenerActivity = activity
host.addReactInstanceEventListener(listener)
}

Expand All @@ -86,7 +96,7 @@ internal class MindboxSdkLifecycleListener private constructor(

val hasConsumedReactContext = AtomicBoolean(false)

registerReactContextListener { reactContext ->
registerReactContextListener(activity) { reactContext ->
if (hasConsumedReactContext.compareAndSet(false, true)) {
onReactContextAvailable(reactContext, activity)
}
Expand Down Expand Up @@ -127,13 +137,14 @@ internal class MindboxSdkLifecycleListener private constructor(

override fun onActivityDestroyed(activity: Activity) {
if (!isMainActivity(activity)) return
subscriber.onEvent(MindboxSdkLifecycleEvent.ActivityDestroyed(activity))
getReactContext()?.removeActivityEventListener(activityEventListener)
activityEventListener = null
reactInstanceEventListener?.let { listener ->
getReactHost(application)?.removeReactInstanceEventListener(listener)
if (reactInstanceEventListenerActivity === activity) {
Comment thread
enotniy marked this conversation as resolved.
reactInstanceEventListener?.let { listener ->
getReactHost(application)?.removeReactInstanceEventListener(listener)
}
reactInstanceEventListener = null
reactInstanceEventListenerActivity = null
}
reactInstanceEventListener = null
subscriber.onEvent(MindboxSdkLifecycleEvent.ActivityDestroyed(activity))
}
Comment thread
sergeysozinov marked this conversation as resolved.
Comment thread
sergeysozinov marked this conversation as resolved.

override fun onActivityStarted(activity: Activity) {}
Expand Down
Loading