Skip to content
Open
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 @@ -66,6 +66,7 @@ import com.facebook.react.uimanager.events.BlackHoleEventDispatcher
import com.facebook.react.uimanager.events.EventDispatcher
import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper
import java.lang.ref.WeakReference
import java.util.WeakHashMap
import java.util.concurrent.CopyOnWriteArrayList
import java.util.concurrent.Executor
import java.util.concurrent.Executors
Expand Down Expand Up @@ -137,6 +138,7 @@ public class ReactHostImpl(
private val reactLifecycleStateManager = ReactLifecycleStateManager(stateTracker)
private var memoryPressureListener: MemoryPressureListener? = null
private var defaultHardwareBackBtnHandler: DefaultHardwareBackBtnHandler? = null
private val activeActivitiesMap = WeakHashMap<Activity, Boolean>();

private val reactInstanceEventListeners: MutableList<ReactInstanceEventListener> =
CopyOnWriteArrayList()
Expand Down Expand Up @@ -241,6 +243,10 @@ public class ReactHostImpl(
override fun onHostResume(activity: Activity?) {
stateTracker.enterState("onHostResume(activity)")

if (activity != null) {
activeActivitiesMap[activity] = true
}

currentActivity = activity

maybeEnableDevSupport(true)
Expand All @@ -259,25 +265,17 @@ public class ReactHostImpl(
val method = "onHostPause(activity)"
stateTracker.enterState(method)

val currentActivity = this.currentActivity
if (currentActivity != null) {
val isSameActivity = activity === currentActivity
if (!isSameActivity) {
val currentActivityClass = currentActivity.javaClass.simpleName
val activityClass = if (activity == null) "null" else activity.javaClass.simpleName
val isNotSameActivityMessage =
"Pausing an activity that is not the current activity, this is incorrect! Current activity: $currentActivityClass Paused activity: $activityClass"
if (ReactNativeFeatureFlags.skipActivityIdentityAssertionOnHostPause()) {
FLog.w(TAG, method, isNotSameActivityMessage)
} else {
Assertions.assertCondition(isSameActivity, isNotSameActivityMessage)
}
if (activity != null) {
activeActivitiesMap.remove(activity)
if (activeActivitiesMap.size > 0) {
FLog.w(TAG, "Called $method by activity $activity but there are still active activities, not pausing yet.")
return
}
}

maybeEnableDevSupport(false)
defaultHardwareBackBtnHandler = null
reactLifecycleStateManager.moveToOnHostPause(currentReactContext, currentActivity)
reactLifecycleStateManager.moveToOnHostPause(currentReactContext, activity)
}

/** To be called when the host activity is paused. */
Expand Down
Loading