Skip to content

chore(Android, Stack): remove legacy architecture related code#3775

Merged
sgaczol merged 6 commits intomainfrom
@sgaczol/android-stack-paper-removal
Mar 26, 2026
Merged

chore(Android, Stack): remove legacy architecture related code#3775
sgaczol merged 6 commits intomainfrom
@sgaczol/android-stack-paper-removal

Conversation

@sgaczol
Copy link
Copy Markdown
Collaborator

@sgaczol sgaczol commented Mar 18, 2026

Description

This PR removes legacy architecture related code from Stack related files.

Closes https://github.com/software-mansion/react-native-screens-labs/issues/1029

Changes

  • remove ScreensShadowNode.kt, PaddingBundle.kt and ScreenStackHeaderConfigShadowNode.kt
  • remove unnecessary imports, conditions and dispatchShadowStateUpdate
  • rename updateScreenSizeFabric to updateShadowNodeScreenSize - could be a breaking change but it is not likely someone overrides it
  • update comments

After - visual documentation

test1.webm
prevent-native-dismiss.mov
prevent-native-dismiss-nested.mov
android-animation.mov

Test Plan

Check if app builds and tests for Stack work properly.

Checklist

  • Included code example that can be used to test this change.
  • Updated / created local changelog entries in relevant test files.
  • For visual changes, included screenshots / GIFs / recordings documenting the change.
  • For API changes, updated relevant public types.
  • Ensured that CI passes

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR removes Android “legacy architecture” (Paper) code paths from the Stack implementation, simplifying Stack-related view managers/shadow-node plumbing and standardizing on Fabric-style state updates.

Changes:

  • Deleted Paper-only shadow-node helpers (ScreensShadowNode, ScreenStackHeaderConfigShadowNode, PaddingBundle).
  • Removed BuildConfig.IS_NEW_ARCHITECTURE_ENABLED branching in several Stack-related classes and always wires state wrappers / Fabric setup.
  • Renamed updateScreenSizeFabricupdateScreenSize and updated call sites.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
android/src/main/java/com/swmansion/rnscreens/utils/PaddingBundle.kt Removed Paper-only local data container for header padding.
android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt Removed Paper-only shadow node that scheduled container updates via UIBlock.
android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt Removes new-arch gating and always initializes NativeProxy / Fabric mutations listener.
android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt Always sets StateWrapper during updateState.
android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt Removes Paper-only createShadowNodeInstance.
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt Always sets StateWrapper during updateState.
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt Always updates subview frame state on layout change (no arch gating).
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt Removes Paper-only createShadowNodeInstance; always sets StateWrapper.
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigShadowNode.kt Removed Paper-only header config shadow node.
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt Uses reactHost dev menu path unconditionally.
android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt Removes Paper-only createShadowNodeInstance.
android/src/main/java/com/swmansion/rnscreens/Screen.kt Removes Paper size update path; always calls unified updateScreenSize.
android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt Always creates ScreenDummyLayoutHelper; marks module as Turbo unconditionally.
android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt Renames updateScreenSizeFabricupdateScreenSize.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment thread android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt
Comment thread android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt
Comment thread android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt
Comment on lines 393 to 402
@@ -415,11 +398,7 @@ class Screen(
height: Int,
offsetY: Int,
) {
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
updateScreenSizeFabric(width, height, offsetY)
} else {
updateScreenSizePaper(width, height)
}
updateScreenSize(width, height, offsetY)
}
Copy link
Copy Markdown
Contributor

@kmichalikk kmichalikk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Didn't test the runtime. I think there's more to remove here still. You can use LLM for double checking later. Please also look into the other PRs for the cleanup & compare the things that are removed there.

Comment thread android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt Outdated
Comment thread android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt
Comment thread android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR removes remaining Android “Paper”/legacy-architecture plumbing from the Stack/screens implementation, simplifying codepaths to assume Fabric-only behavior.

Changes:

  • Deletes legacy ShadowNode/Paper data-passing classes (ScreensShadowNode, ScreenStackHeaderConfigShadowNode, PaddingBundle) and removes related createShadowNodeInstance hooks.
  • Removes BuildConfig.IS_NEW_ARCHITECTURE_ENABLED branching across multiple managers/modules and routes state updates through Fabric-only mechanisms.
  • Renames/remodels the screen size/state update path (replacing dispatchShadowStateUpdate/updateScreenSizeFabric usage with updateShadowNodeScreenSize).

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
android/src/main/java/com/swmansion/rnscreens/utils/PaddingBundle.kt Deletes Paper-only padding transfer data class.
android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt Removes legacy ShadowNode that scheduled performUpdates() via UIBlocks.
android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt Makes proxy/fabric setup unconditional (Fabric-only assumption).
android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt Removes old-arch gating and @ReactProp annotations in favor of codegen delegate path.
android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt Removes legacy createShadowNodeInstance.
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt Removes old-arch gating and @ReactProp annotations; always sets state wrapper.
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt Removes new-arch-only condition for layout-driven state updates.
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt Removes Paper shadow node creation and @ReactProp annotations; always sets state wrapper.
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigShadowNode.kt Deletes Paper-only shadow node handling header padding/position via setLocalData.
android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt Removes architecture-specific commentary and Paper fallback dev-menu invocation.
android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt Removes legacy createShadowNodeInstance.
android/src/main/java/com/swmansion/rnscreens/Screen.kt Removes Paper size updates + shadow-state dispatch; consolidates to Fabric state updates.
android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt Makes Fabric helper creation unconditional; hardcodes TurboModule info.
android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt Removes updateScreenSizeFabric wrapper (direct updateState path).
android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt Removes “differs between arch” comments; keeps Fabric-only state update path.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment on lines 50 to 55
override fun initialize() {
super.initialize()
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
proxy = NativeProxy()

reactContext.addLifecycleEventListener(this)

setupFabric()
}
proxy = NativeProxy()
reactContext.addLifecycleEventListener(this)
setupFabric()
}
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is unrelated to this PR

@@ -53,8 +51,6 @@ class ScreenContainerViewManager :
index: Int,
): View = parent.getScreenAt(index)

Copy link
Copy Markdown
Collaborator Author

@sgaczol sgaczol Mar 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed: 0c84733

@sgaczol sgaczol merged commit 8205d0e into main Mar 26, 2026
5 checks passed
@sgaczol sgaczol deleted the @sgaczol/android-stack-paper-removal branch March 26, 2026 11:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants