chore(Android, Stack): remove legacy architecture related code#3775
chore(Android, Stack): remove legacy architecture related code#3775
Conversation
There was a problem hiding this comment.
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_ENABLEDbranching in several Stack-related classes and always wires state wrappers / Fabric setup. - Renamed
updateScreenSizeFabric→updateScreenSizeand 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 updateScreenSizeFabric → updateScreenSize. |
💡 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.
| @@ -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) | |||
| } | |||
kmichalikk
left a comment
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 relatedcreateShadowNodeInstancehooks. - Removes
BuildConfig.IS_NEW_ARCHITECTURE_ENABLEDbranching across multiple managers/modules and routes state updates through Fabric-only mechanisms. - Renames/remodels the screen size/state update path (replacing
dispatchShadowStateUpdate/updateScreenSizeFabricusage withupdateShadowNodeScreenSize).
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.
| override fun initialize() { | ||
| super.initialize() | ||
| if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { | ||
| proxy = NativeProxy() | ||
|
|
||
| reactContext.addLifecycleEventListener(this) | ||
|
|
||
| setupFabric() | ||
| } | ||
| proxy = NativeProxy() | ||
| reactContext.addLifecycleEventListener(this) | ||
| setupFabric() | ||
| } |
There was a problem hiding this comment.
it is unrelated to this PR
| @@ -53,8 +51,6 @@ class ScreenContainerViewManager : | |||
| index: Int, | |||
| ): View = parent.getScreenAt(index) | |||
|
|
|||
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
ScreensShadowNode.kt,PaddingBundle.ktandScreenStackHeaderConfigShadowNode.ktdispatchShadowStateUpdateupdateScreenSizeFabrictoupdateShadowNodeScreenSize- could be a breaking change but it is not likely someone overrides itAfter - 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
Stackwork properly.Checklist