fix(iOS): activityState
regression check false-positive
#2404
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
We had an issue introduced in #2389 that added the preload. We temporarily
have an assumption in native stack, that the
activityState
can only progress whenScreen
component is rendered (directly) inside native stack navigator. This invariantwas enforced with appropriate checks on native side. It turns out that we were wrong in our
way of checking whether the
Screen
belongs to native stack or not - we have forgotten aboutRNSContainerNavigationController
class that is used when renderingScreenContainer
withhasTwoStates: true
and which inherits from
RNSNavigationController
.Changes
Added aisNativeStackViewController
method toRNSNavigationController
and overrode it in subclass.Added
RNSScreenView#isNativeStackScreen
method, which checks whether our direct react superview is aRNSScreenStackView
.I've found checking for
_controller.navigationController
not reliable, asnavigationController
can be found arbitrarily high in the view hierarchy.Test code and steps to reproduce
Reported by Expo. If you want to reproduce this: create a JS stack navigator with bottom tabs inside (with
hasTwoStates: true
),and then a regular JS stack inside & try to navigate to any screen.
We have not caught that earlier, because we're not testing regular JS stack at all.
Checklist