react-native-screens 5.0.0-alpha.2 → 5.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +87 -0
- package/README.md +0 -11
- package/android/build.gradle +1 -0
- package/android/consumer-rules.pro +3 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderConfigViewGroup.kt +2 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderSubviewViewGroup.kt +2 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledViewGroup.kt +18 -3
- package/android/src/main/cpp/NativeProxy.cpp +30 -6
- package/android/src/main/cpp/NativeProxy.h +7 -1
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +7 -3
- package/android/src/main/java/com/swmansion/rnscreens/common/colorscheme/ColorSchemeCoordinator.kt +11 -1
- package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/container/ContainerItem.kt +13 -1
- package/android/src/main/java/com/swmansion/rnscreens/common/text/ReactTextAppearance.kt +62 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearance.kt +20 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearanceDefaults.kt +65 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetAppearanceCoordinator.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetBehaviorController.kt +51 -20
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetDimensionsCoordinator.kt +159 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetNativeDismissCoordinator.kt +2 -8
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetAvailableHeightProvider.kt +44 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetContainer.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialog.kt +36 -4
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetDialogManager.kt +107 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeDelegate.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeProvider.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetDialogEventEmitter.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetConfig.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/model/FormSheetDetents.kt +152 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetAnimatorFactory.kt +9 -10
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDimmingManager.kt +103 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDismissalOrigin.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentation.kt +173 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentationManager.kt +290 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationState.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetStackRegistry.kt +28 -0
- package/android/src/main/java/com/swmansion/rnscreens/ext/FragmentManagerExt.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/helpers/FragmentManagerHelper.kt +0 -3
- package/android/src/main/java/com/swmansion/rnscreens/helpers/NoTintDrawable.kt +31 -0
- package/android/src/main/java/com/swmansion/rnscreens/helpers/PropIconResolver.kt +17 -23
- package/android/src/main/java/com/swmansion/rnscreens/helpers/ViewFinder.kt +0 -17
- package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +32 -3
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenContainer.kt +35 -3
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderConfig.kt +7 -1
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderSubviewManager.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackViewManager.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/DimmingView.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/stack/views/ScreensCoordinatorLayout.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapper.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapperViewManager.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDetentChangedEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidAppearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidDisappearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/react/modals/formsheet/event/FormSheetDismissEvent.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissPreventedEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetSyncFlushEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillAppearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillDisappearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetContentView.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHost.kt +5 -3
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostEventEmitter.kt +17 -10
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostViewManager.kt +11 -9
- package/android/src/main/java/com/swmansion/rnscreens/safearea/OnInterfaceInsetsChangeListener.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaProvider.kt +8 -8
- package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaView.kt +3 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +360 -101
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +211 -113
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +156 -24
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderContentScrimDrawable.kt +36 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderToolbar.kt +74 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderCollapsedTitleGravityMode.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +162 -228
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +385 -12
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +5 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +29 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderDelegate.kt +0 -7
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +8 -7
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +27 -280
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuController.kt +448 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuDelegate.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +28 -20
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +3 -55
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +1 -10
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuItemConfig.kt +1 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuModel.kt +180 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +57 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +4 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueue.kt +23 -9
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperation.kt +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperationExecutor.kt +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +159 -21
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerDelegate.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerUpdateCoordinator.kt +5 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +27 -5
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackUpdateBatchStateProviding.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/PreventNativeDismissCallback.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +50 -10
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceApplicator.kt +106 -10
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +46 -7
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceModel.kt +3 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/CustomBottomNavigationView.kt +21 -1
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/MenuHelpers.kt +5 -23
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +72 -36
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainerDelegate.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +22 -2
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHostA11yCoordinator.kt +23 -2
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +58 -17
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenDelegate.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIcon.kt +82 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIconTinting.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenViewManager.kt +26 -19
- package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +20 -6
- package/android/src/main/java/com/swmansion/rnscreens/utils/RNSLog.kt +22 -6
- package/android/src/main/java/com/swmansion/rnscreens/utils/StyleUtils.kt +22 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_available_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_entire_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_available_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_entire_space.xml +8 -0
- package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
- package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
- package/ios/RNSEnums.h +16 -1
- package/ios/conversion/RNSConversions.h +7 -108
- package/ios/helpers/image/RNSImageLoadingHelper.h +7 -0
- package/ios/helpers/image/RNSImageLoadingHelper.mm +9 -0
- package/ios/legacy/RNSBarButtonItem.mm +15 -0
- package/ios/legacy/RNSConvert.h +6 -0
- package/ios/legacy/RNSConvert.mm +17 -0
- package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
- package/ios/legacy/RNSModalScreen.mm +1 -1
- package/ios/legacy/RNSNavigationBar.h +31 -0
- package/ios/legacy/RNSNavigationBar.mm +15 -0
- package/ios/legacy/RNSScreen.mm +130 -31
- package/ios/legacy/RNSScreenContentWrapper.mm +4 -1
- package/ios/legacy/RNSScreenStack.mm +202 -15
- package/ios/legacy/RNSScreenStackHeaderConfig.h +30 -0
- package/ios/legacy/RNSScreenStackHeaderConfig.mm +72 -17
- package/ios/legacy/RNSScreenStackHeaderSubview.mm +34 -1
- package/ios/legacy/RNSScreenWindowTraits.mm +5 -13
- package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.h +1 -3
- package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.mm +11 -22
- package/ios/modals/form-sheet/RNSFormSheetContentController.h +1 -1
- package/ios/modals/form-sheet/RNSFormSheetContentController.mm +7 -18
- package/ios/modals/form-sheet/RNSFormSheetHostComponentView.mm +4 -4
- package/ios/modals/form-sheet/RNSFormSheetHostShadowStateProxy.mm +2 -2
- package/ios/modals/form-sheet/RNSFormSheetUpdateFlags.h +3 -0
- package/ios/safe-area/RNSSafeAreaViewComponentView.mm +3 -14
- package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
- package/ios/split/RNSSplitAppearanceApplicator.h +4 -4
- package/ios/split/RNSSplitAppearanceApplicator.mm +53 -56
- package/ios/split/RNSSplitHostComponentEventEmitter.h +1 -0
- package/ios/split/RNSSplitHostComponentEventEmitter.mm +1 -1
- package/ios/split/RNSSplitHostComponentView.h +5 -15
- package/ios/split/RNSSplitHostComponentView.mm +55 -6
- package/ios/split/RNSSplitHostController.h +25 -6
- package/ios/split/RNSSplitHostController.mm +24 -92
- package/ios/split/RNSSplitHostProviders.h +67 -0
- package/ios/split/RNSSplitScreenComponentView.h +0 -39
- package/ios/split/RNSSplitScreenComponentView.mm +27 -10
- package/ios/split/RNSSplitScreenController.h +26 -3
- package/ios/split/RNSSplitScreenController.mm +13 -30
- package/ios/split/RNSSplitScreenShadowStateProxy.h +1 -40
- package/ios/split/RNSSplitScreenShadowStateProxy.mm +1 -26
- package/ios/split/conversion/RNSConversions-SplitView.h +56 -0
- package/ios/{conversion → split/conversion}/RNSConversions-SplitView.mm +4 -1
- package/ios/stack/conversion/RNSConversions-Stack.h +62 -0
- package/ios/stack/conversion/RNSConversions-Stack.mm +134 -0
- package/ios/stack/header/RNSHeaderItemVisibilityPriority.h +9 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.h +14 -1
- package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +103 -37
- package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +11 -0
- package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderContentFactory.mm +3 -0
- package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
- package/ios/stack/header/RNSStackHeaderItemComponentView.h +12 -3
- package/ios/stack/header/RNSStackHeaderItemComponentView.mm +72 -5
- package/ios/stack/header/RNSStackHeaderItemDataProviding.h +7 -0
- package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +13 -0
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +24 -0
- package/ios/stack/header/RNSStackHeaderMenuFinder.h +8 -1
- package/ios/stack/header/RNSStackHeaderMenuFinder.mm +26 -9
- package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
- package/ios/stack/host/RNSStackNavigationBar.h +25 -0
- package/ios/stack/host/RNSStackNavigationBar.mm +80 -0
- package/ios/stack/host/RNSStackNavigationBarCoordinator.h +8 -0
- package/ios/stack/host/RNSStackNavigationBarCoordinator.mm +11 -0
- package/ios/stack/host/RNSStackNavigationController.mm +13 -5
- package/ios/stack/host/RNSStackOperation.h +0 -2
- package/ios/stack/screen/RNSStackScreenComponentView.h +2 -1
- package/ios/stack/screen/RNSStackScreenComponentView.mm +32 -2
- package/ios/stack/screen/RNSStackScreenController.mm +12 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +8 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +179 -24
- package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +110 -16
- package/ios/tabs/RNSTabBarItemCoordinator.h +16 -0
- package/ios/tabs/RNSTabBarItemCoordinator.mm +143 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.h +24 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.mm +22 -0
- package/ios/tabs/conversion/RNSConversions-Tabs.h +100 -0
- package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +105 -74
- package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
- package/ios/tabs/host/RNSTabBarController.h +16 -0
- package/ios/tabs/host/RNSTabBarController.mm +516 -107
- package/ios/tabs/host/RNSTabsHostComponentView.h +4 -0
- package/ios/tabs/host/RNSTabsHostComponentView.mm +41 -4
- package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
- package/ios/tabs/screen/RNSTabsScreenComponentView.h +21 -0
- package/ios/tabs/screen/RNSTabsScreenComponentView.mm +56 -56
- package/ios/tabs/screen/RNSTabsScreenViewController.mm +1 -0
- package/ios/utils/RNSDefines.h +15 -7
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +37 -21
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +41 -4
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.js +17 -0
- package/lib/commonjs/components/stack/header/StackHeaderConfig.js.map +1 -0
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/commonjs/components/stack/host/StackHost.js +17 -7
- package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
- package/lib/commonjs/components/stack/host/StackHost.web.js +0 -2
- package/lib/commonjs/components/stack/host/StackHost.web.js.map +1 -1
- package/lib/commonjs/components/stack/index.js.map +1 -1
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js +3 -0
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/lib/commonjs/components/tabs/host/{TabsHost.web.js → TabsHost.js} +1 -1
- package/lib/commonjs/components/tabs/host/TabsHost.js.map +1 -0
- package/lib/commonjs/components/tabs/index.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.js +3 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js +10 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/{TabsScreen.web.js → TabsScreen.js} +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.js.map +1 -0
- package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js → tabs/screen/TabsScreenIcon.types.js} +1 -1
- package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/legacy/components/ScreenStackItem.js +31 -11
- package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.android.js +39 -23
- package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js +43 -6
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.js +10 -0
- package/lib/module/components/stack/header/StackHeaderConfig.js.map +1 -0
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/module/components/stack/host/StackHost.js +18 -8
- package/lib/module/components/stack/host/StackHost.js.map +1 -1
- package/lib/module/components/stack/host/StackHost.web.js +0 -3
- package/lib/module/components/stack/host/StackHost.web.js.map +1 -1
- package/lib/module/components/stack/index.js.map +1 -1
- package/lib/module/components/tabs/host/TabsHost.ios.js +3 -0
- package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/{src/components/tabs/host/TabsHost.web.tsx → lib/module/components/tabs/host/TabsHost.js} +1 -2
- package/lib/module/components/tabs/host/TabsHost.js.map +1 -0
- package/lib/module/components/tabs/index.js.map +1 -1
- package/lib/module/components/tabs/screen/TabsScreen.android.js +3 -1
- package/lib/module/components/tabs/screen/TabsScreen.android.js.map +1 -1
- package/lib/module/components/tabs/screen/TabsScreen.ios.js +10 -1
- package/lib/module/components/tabs/screen/TabsScreen.ios.js.map +1 -1
- package/{src/components/tabs/screen/TabsScreen.web.tsx → lib/module/components/tabs/screen/TabsScreen.js} +1 -2
- package/lib/module/components/tabs/screen/TabsScreen.js.map +1 -0
- package/lib/module/components/tabs/screen/TabsScreenIcon.types.js +2 -0
- package/lib/module/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
- package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
- package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/module/legacy/components/ScreenStackItem.js +31 -11
- package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts +6 -3
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +620 -24
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts +8 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts.map +1 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts +6 -3
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +361 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +4 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +7 -0
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.d.ts +1 -1
- package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.types.d.ts +47 -0
- package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.web.d.ts +1 -3
- package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
- package/lib/typescript/components/stack/index.d.ts +4 -3
- package/lib/typescript/components/stack/index.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.d.ts +5 -0
- package/lib/typescript/components/tabs/host/TabsHost.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +72 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/index.d.ts +4 -6
- package/lib/typescript/components/tabs/index.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.android.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts +42 -7
- package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.d.ts +5 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts +78 -13
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts +91 -0
- package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/index.d.ts +1 -0
- package/lib/typescript/components/tabs/screen/index.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -0
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +52 -0
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +29 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +8 -0
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +3 -1
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +4 -0
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +6 -0
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +10 -1
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts +25 -0
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +4 -0
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
- package/lib/typescript/legacy/types.d.ts +30 -0
- package/lib/typescript/legacy/types.d.ts.map +1 -1
- package/package.json +11 -8
- package/react-native.config.js +3 -0
- package/src/components/modals/form-sheet/FormSheet.types.ts +1 -1
- package/src/components/stack/header/StackHeaderConfig.android.tsx +54 -43
- package/src/components/stack/header/StackHeaderConfig.android.types.ts +641 -24
- package/src/components/stack/header/StackHeaderConfig.ios.tsx +55 -17
- package/src/components/stack/header/StackHeaderConfig.ios.types.ts +384 -2
- package/src/components/stack/header/StackHeaderConfig.tsx +12 -0
- package/src/components/stack/header/StackHeaderConfig.types.ts +4 -2
- package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +9 -1
- package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +7 -0
- package/src/components/stack/host/StackHost.tsx +12 -3
- package/src/components/stack/host/StackHost.types.ts +50 -0
- package/src/components/stack/host/StackHost.web.tsx +1 -4
- package/src/components/stack/index.ts +14 -1
- package/src/components/tabs/host/TabsHost.ios.tsx +3 -0
- package/src/components/tabs/host/TabsHost.ios.types.ts +76 -0
- package/src/components/tabs/host/TabsHost.tsx +7 -0
- package/src/components/tabs/host/TabsHost.types.ts +3 -0
- package/src/components/tabs/index.ts +9 -0
- package/src/components/tabs/screen/TabsScreen.android.tsx +8 -3
- package/src/components/tabs/screen/TabsScreen.android.types.ts +42 -7
- package/src/components/tabs/screen/TabsScreen.ios.tsx +22 -5
- package/src/components/tabs/screen/TabsScreen.ios.types.ts +79 -17
- package/src/components/tabs/screen/TabsScreen.tsx +7 -0
- package/src/components/tabs/screen/TabsScreenIcon.types.ts +117 -0
- package/src/components/tabs/screen/index.ts +1 -0
- package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -0
- package/src/fabric/legacy/ScreenStackNativeComponent.ts +2 -0
- package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +78 -0
- package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +43 -0
- package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +13 -0
- package/src/fabric/stack/StackHostNativeComponent.ts +11 -2
- package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +8 -0
- package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +9 -0
- package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +20 -2
- package/src/legacy/components/ScreenStackItem.tsx +59 -12
- package/src/legacy/types.ts +31 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenModalFragment.kt +0 -281
- package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogRootView.kt +0 -104
- package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogScreen.kt +0 -26
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +0 -134
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +0 -162
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +0 -106
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +0 -198
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +0 -83
- package/ios/conversion/RNSConversions-Stack.h +0 -32
- package/ios/conversion/RNSConversions-Stack.mm +0 -41
- package/ios/conversion/always_false.h +0 -31
- package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js +0 -10
- package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js.map +0 -1
- package/lib/commonjs/components/tabs/host/TabsHost.d.js +0 -2
- package/lib/commonjs/components/tabs/host/TabsHost.d.js.map +0 -1
- package/lib/commonjs/components/tabs/host/TabsHost.web.js.map +0 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.d.js +0 -2
- package/lib/commonjs/components/tabs/screen/TabsScreen.d.js.map +0 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.web.js.map +0 -1
- package/lib/module/components/stack/header/StackHeaderConfig.d.js +0 -2
- package/lib/module/components/stack/header/StackHeaderConfig.web.js +0 -4
- package/lib/module/components/stack/header/StackHeaderConfig.web.js.map +0 -1
- package/lib/module/components/tabs/host/TabsHost.d.js +0 -2
- package/lib/module/components/tabs/host/TabsHost.d.js.map +0 -1
- package/lib/module/components/tabs/host/TabsHost.web.js +0 -4
- package/lib/module/components/tabs/host/TabsHost.web.js.map +0 -1
- package/lib/module/components/tabs/screen/TabsScreen.d.js +0 -2
- package/lib/module/components/tabs/screen/TabsScreen.d.js.map +0 -1
- package/lib/module/components/tabs/screen/TabsScreen.web.js +0 -4
- package/lib/module/components/tabs/screen/TabsScreen.web.js.map +0 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +0 -7
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +0 -1
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +0 -7
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +0 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +0 -7
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +0 -1
- package/src/components/stack/header/StackHeaderConfig.d.ts +0 -22
- package/src/components/stack/header/StackHeaderConfig.web.tsx +0 -5
- package/src/components/tabs/host/TabsHost.d.ts +0 -12
- package/src/components/tabs/screen/TabsScreen.d.ts +0 -12
- /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
|
@@ -2,18 +2,25 @@ package com.swmansion.rnscreens.stack.host
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
5
|
+
import android.content.res.Configuration
|
|
5
6
|
import android.util.Log
|
|
6
7
|
import android.view.ViewGroup
|
|
7
8
|
import android.widget.FrameLayout
|
|
8
9
|
import androidx.fragment.app.Fragment
|
|
9
10
|
import androidx.fragment.app.FragmentManager
|
|
11
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorScheme
|
|
12
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeCoordinator
|
|
13
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeListener
|
|
14
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeProviding
|
|
10
15
|
import com.swmansion.rnscreens.common.container.Container
|
|
16
|
+
import com.swmansion.rnscreens.common.container.ContainerItem
|
|
11
17
|
import com.swmansion.rnscreens.common.container.ParentContainerItemRegistry
|
|
12
18
|
import com.swmansion.rnscreens.ext.isMeasured
|
|
13
|
-
import com.swmansion.rnscreens.helpers.FragmentManagerHelper
|
|
14
19
|
import com.swmansion.rnscreens.helpers.ViewIdGenerator
|
|
20
|
+
import com.swmansion.rnscreens.stack.header.StackHeaderBackPressHandler
|
|
15
21
|
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
16
22
|
import com.swmansion.rnscreens.stack.screen.StackScreenFragment
|
|
23
|
+
import com.swmansion.rnscreens.stack.screen.StackScreenFragmentDelegate
|
|
17
24
|
import com.swmansion.rnscreens.utils.RNSLog
|
|
18
25
|
import java.lang.ref.WeakReference
|
|
19
26
|
|
|
@@ -23,7 +30,11 @@ internal class StackContainer(
|
|
|
23
30
|
private val delegate: WeakReference<StackContainerDelegate>,
|
|
24
31
|
) : FrameLayout(context),
|
|
25
32
|
Container,
|
|
26
|
-
FragmentManager.OnBackStackChangedListener
|
|
33
|
+
FragmentManager.OnBackStackChangedListener,
|
|
34
|
+
ColorSchemeProviding,
|
|
35
|
+
StackHeaderBackPressHandler,
|
|
36
|
+
StackScreenFragmentDelegate,
|
|
37
|
+
StackUpdateBatchStateProviding {
|
|
27
38
|
private var fragmentManager: FragmentManager? = null
|
|
28
39
|
|
|
29
40
|
private fun requireFragmentManager(): FragmentManager =
|
|
@@ -51,6 +62,20 @@ internal class StackContainer(
|
|
|
51
62
|
private val fragmentOpExecutor: FragmentOperationExecutor = FragmentOperationExecutor()
|
|
52
63
|
private val fragmentOps: MutableList<FragmentOperation> = arrayListOf()
|
|
53
64
|
|
|
65
|
+
// region Color Scheme
|
|
66
|
+
|
|
67
|
+
private val colorSchemeCoordinator = ColorSchemeCoordinator()
|
|
68
|
+
|
|
69
|
+
internal var colorScheme: ColorScheme by colorSchemeCoordinator::colorScheme
|
|
70
|
+
|
|
71
|
+
override fun getResolvedUiNightMode() = colorSchemeCoordinator.getResolvedUiNightMode()
|
|
72
|
+
|
|
73
|
+
override fun addColorSchemeListener(listener: ColorSchemeListener) = colorSchemeCoordinator.addColorSchemeListener(listener)
|
|
74
|
+
|
|
75
|
+
override fun removeColorSchemeListener(listener: ColorSchemeListener) = colorSchemeCoordinator.removeColorSchemeListener(listener)
|
|
76
|
+
|
|
77
|
+
// endregion
|
|
78
|
+
|
|
54
79
|
init {
|
|
55
80
|
id = ViewIdGenerator.generateViewId()
|
|
56
81
|
}
|
|
@@ -60,7 +85,11 @@ internal class StackContainer(
|
|
|
60
85
|
super.onAttachedToWindow()
|
|
61
86
|
|
|
62
87
|
parentContainerRegistry.attach(this)
|
|
63
|
-
|
|
88
|
+
setupFragmentManager()
|
|
89
|
+
|
|
90
|
+
// StackContainer only provides container-level color scheme configuration for its screens
|
|
91
|
+
// but doesn't use any color scheme-dependent views, so we don't need the callback.
|
|
92
|
+
colorSchemeCoordinator.setup(this, null)
|
|
64
93
|
|
|
65
94
|
// Following line works with a couple of assumptions.
|
|
66
95
|
// First, that this view is laid out by our parent view, which is a component view.
|
|
@@ -81,27 +110,60 @@ internal class StackContainer(
|
|
|
81
110
|
requireFragmentManager().removeOnBackStackChangedListener(this)
|
|
82
111
|
fragmentManager = null
|
|
83
112
|
parentContainerRegistry.detach(this)
|
|
113
|
+
colorSchemeCoordinator.teardown()
|
|
84
114
|
}
|
|
85
115
|
|
|
86
|
-
|
|
116
|
+
override fun onConfigurationChanged(newConfig: Configuration?) {
|
|
117
|
+
super.onConfigurationChanged(newConfig)
|
|
118
|
+
colorSchemeCoordinator.onConfigurationChanged(newConfig)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
override fun onFragmentConfigurationChanged(config: Configuration) = onConfigurationChanged(config)
|
|
122
|
+
|
|
123
|
+
internal fun setupFragmentManager() {
|
|
87
124
|
fragmentManager =
|
|
88
|
-
checkNotNull(
|
|
89
|
-
"[RNScreens]
|
|
90
|
-
}.also {
|
|
125
|
+
checkNotNull(delegate.get()) {
|
|
126
|
+
"[RNScreens] StackContainer has no delegate to resolve the fragment manager from"
|
|
127
|
+
}.resolveFragmentManager().also {
|
|
91
128
|
it.addOnBackStackChangedListener(this)
|
|
92
129
|
}
|
|
93
130
|
}
|
|
94
131
|
|
|
132
|
+
// region Update batch
|
|
133
|
+
|
|
134
|
+
override var isUpdatePending: Boolean = false
|
|
135
|
+
private set
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Announces that more updates are coming. Header updates raised until [endUpdateBatch]
|
|
139
|
+
* are held and applied together with the navigation operations of the batch.
|
|
140
|
+
*/
|
|
141
|
+
internal fun beginUpdateBatch() {
|
|
142
|
+
isUpdatePending = true
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
internal fun endUpdateBatch() {
|
|
146
|
+
isUpdatePending = false
|
|
147
|
+
performContainerUpdateIfNeeded()
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// endregion
|
|
151
|
+
|
|
95
152
|
/**
|
|
96
|
-
*
|
|
153
|
+
* Applies pending navigation operations and then pending header updates of the screens
|
|
154
|
+
* remaining in the stack.
|
|
97
155
|
*/
|
|
98
156
|
internal fun performContainerUpdateIfNeeded() {
|
|
99
157
|
// If container update is requested before container is attached to window, we ignore
|
|
100
158
|
// the call because we don't have valid fragmentManager yet.
|
|
101
159
|
// Update will be eventually executed in onAttachedToWindow().
|
|
102
|
-
if (
|
|
160
|
+
if (!isAttachedToWindow) {
|
|
161
|
+
return
|
|
162
|
+
}
|
|
163
|
+
if (hasPendingOperations) {
|
|
103
164
|
performOperations(requireFragmentManager())
|
|
104
165
|
}
|
|
166
|
+
stackModel.forEach { it.flushPendingHeaderUpdates() }
|
|
105
167
|
}
|
|
106
168
|
|
|
107
169
|
internal fun enqueuePushOperation(stackScreen: StackScreen) {
|
|
@@ -164,13 +226,15 @@ internal class StackContainer(
|
|
|
164
226
|
}
|
|
165
227
|
|
|
166
228
|
pendingPushOperations.forEach { operation ->
|
|
167
|
-
val newFragment =
|
|
229
|
+
val newFragment =
|
|
230
|
+
createFragmentForScreen(operation.screen, canNavigateBack = stackModel.isNotEmpty())
|
|
168
231
|
|
|
169
232
|
fragmentOps.add(
|
|
170
233
|
AddAndSetAsPrimaryOp(
|
|
171
234
|
newFragment,
|
|
172
235
|
containerViewId = this.id,
|
|
173
236
|
addToBackStack = stackModel.isNotEmpty(),
|
|
237
|
+
coveredFragment = stackModel.lastOrNull(),
|
|
174
238
|
),
|
|
175
239
|
)
|
|
176
240
|
stackModel.add(newFragment)
|
|
@@ -195,9 +259,9 @@ internal class StackContainer(
|
|
|
195
259
|
}
|
|
196
260
|
|
|
197
261
|
private fun dumpStackModel() {
|
|
198
|
-
|
|
262
|
+
RNSLog.d(TAG, "StackContainer [$id] MODEL BEGIN")
|
|
199
263
|
stackModel.forEach {
|
|
200
|
-
|
|
264
|
+
RNSLog.d(TAG, "${it.stackScreen.screenKey}")
|
|
201
265
|
}
|
|
202
266
|
}
|
|
203
267
|
|
|
@@ -205,21 +269,27 @@ internal class StackContainer(
|
|
|
205
269
|
screen: StackScreen,
|
|
206
270
|
canNavigateBack: Boolean,
|
|
207
271
|
): StackScreenFragment =
|
|
208
|
-
StackScreenFragment(
|
|
209
|
-
|
|
272
|
+
StackScreenFragment(
|
|
273
|
+
screen,
|
|
274
|
+
canNavigateBack,
|
|
275
|
+
WeakReference(this),
|
|
276
|
+
backPressHandler = WeakReference(this),
|
|
277
|
+
updateBatchStateProvider = WeakReference(this),
|
|
278
|
+
colorSchemeProvider = WeakReference(this),
|
|
279
|
+
).also {
|
|
280
|
+
RNSLog.d(TAG, "Created Fragment $it for screen ${screen.screenKey}")
|
|
210
281
|
}
|
|
211
282
|
|
|
212
283
|
private fun updateTopFragment() {
|
|
213
|
-
//
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
fragments.last().onBecomeTopFragment()
|
|
284
|
+
// Covered fragments are detached, so FragmentManager's added list holds only the top
|
|
285
|
+
// fragment - the model is the only place all of them can be resigned from.
|
|
286
|
+
check(stackModel.isNotEmpty()) { "[RNScreens] Empty stack model while attempting to update top fragment" }
|
|
287
|
+
stackModel.forEach { it.onResignTopFragment() }
|
|
288
|
+
stackModel.last().onBecomeTopFragment()
|
|
219
289
|
|
|
220
290
|
// This assumes that the updateTopFragment is called already after primary nav frag. is updated.
|
|
221
291
|
// If this needs to be changed in the future, just remove this assertion.
|
|
222
|
-
check(
|
|
292
|
+
check(requireFragmentManager().primaryNavigationFragment === stackModel.last()) {
|
|
223
293
|
"[RNScreens] Top fragment different from primary navigation fragment"
|
|
224
294
|
}
|
|
225
295
|
}
|
|
@@ -290,6 +360,74 @@ internal class StackContainer(
|
|
|
290
360
|
?.stackScreen
|
|
291
361
|
?.findContentScrollView()
|
|
292
362
|
|
|
363
|
+
// Asked when this container's whole subtree is about to be dismissed (the screen
|
|
364
|
+
// hosting this container is popped) - every item gets a vote, back-to-front, so
|
|
365
|
+
// the deepest preventing screen wins.
|
|
366
|
+
override fun wantsToPreventStackNativeDismiss(): ContainerItem? =
|
|
367
|
+
stackModel
|
|
368
|
+
.asReversed()
|
|
369
|
+
.firstNotNullOfOrNull { it.stackScreen.wantsToPreventStackNativeDismiss() }
|
|
370
|
+
|
|
371
|
+
// Pop-to-root is not implemented for the v5 stack yet - the request is forwarded to the top screen's
|
|
372
|
+
// nested container.
|
|
373
|
+
override fun requestPopToRoot(): Boolean {
|
|
374
|
+
RNSLog.w(TAG, "[RNScreens] Pop-to-root special effect is not implemented for v5 stack yet")
|
|
375
|
+
return stackModel
|
|
376
|
+
.lastOrNull()
|
|
377
|
+
?.stackScreen
|
|
378
|
+
?.resolveNestedContainer()
|
|
379
|
+
?.requestPopToRoot() == true
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// endregion
|
|
383
|
+
|
|
384
|
+
// region Header back button
|
|
385
|
+
|
|
386
|
+
override fun handleHeaderBackButtonPress(pressedScreen: StackScreen) {
|
|
387
|
+
val fragmentManager = fragmentManager
|
|
388
|
+
if (fragmentManager == null) {
|
|
389
|
+
Log.w(TAG, "[RNScreens] Ignoring header back button press - container is detached")
|
|
390
|
+
return
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
val topScreen = stackModel.lastOrNull()?.stackScreen
|
|
394
|
+
if (topScreen !== pressedScreen || stackModel.size <= 1) {
|
|
395
|
+
Log.w(
|
|
396
|
+
TAG,
|
|
397
|
+
"[RNScreens] Ignoring header back button press for non-top screen ${pressedScreen.screenKey}",
|
|
398
|
+
)
|
|
399
|
+
return
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// This pop dismisses only the top screen (together with its subtree), therefore
|
|
403
|
+
// only the top item is asked - screens below the top get no vote at this level.
|
|
404
|
+
val vetoingItem = topScreen.wantsToPreventStackNativeDismiss()
|
|
405
|
+
if (vetoingItem != null) {
|
|
406
|
+
// Only a StackScreen can veto - TabsScreen has no own flag and only forwards.
|
|
407
|
+
val vetoingScreen = vetoingItem as? StackScreen
|
|
408
|
+
if (vetoingScreen != null) {
|
|
409
|
+
vetoingScreen.onNativeDismissPrevented()
|
|
410
|
+
} else {
|
|
411
|
+
Log.w(
|
|
412
|
+
TAG,
|
|
413
|
+
"[RNScreens] Unexpected vetoing item type: ${vetoingItem.javaClass.simpleName}",
|
|
414
|
+
)
|
|
415
|
+
}
|
|
416
|
+
return
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// Mirrors FragmentManager's internal OnBackPressedCallback, which also runs
|
|
420
|
+
// popBackStackImmediate. The synchronous pop makes the top-screen guard above
|
|
421
|
+
// reliable against double taps: onBackStackChangeCommitted -> onNativeFragmentPop
|
|
422
|
+
// updates stackModel before this call returns.
|
|
423
|
+
fragmentManager.popBackStackImmediate(
|
|
424
|
+
// key MUST BE present, otherwise the navigation action will be delegated to child primary navigation
|
|
425
|
+
// fragment.
|
|
426
|
+
checkNotNull(pressedScreen.screenKey) { "[RNScreens] Screen key is required" },
|
|
427
|
+
FragmentManager.POP_BACK_STACK_INCLUSIVE,
|
|
428
|
+
)
|
|
429
|
+
}
|
|
430
|
+
|
|
293
431
|
// endregion
|
|
294
432
|
|
|
295
433
|
companion object {
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.stack.host
|
|
2
2
|
|
|
3
|
+
import androidx.fragment.app.FragmentManager
|
|
3
4
|
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
4
5
|
|
|
5
6
|
internal interface StackContainerDelegate {
|
|
6
7
|
fun onScreenDismissCommitted(stackScreen: StackScreen)
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the fragment manager the container should run its operations on. Called every time the container
|
|
11
|
+
* is attached to a window, as the result may differ between attachments.
|
|
12
|
+
*/
|
|
13
|
+
fun resolveFragmentManager(): FragmentManager
|
|
7
14
|
}
|
package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerUpdateCoordinator.kt
CHANGED
|
@@ -16,7 +16,11 @@ internal class StackContainerUpdateCoordinator {
|
|
|
16
16
|
pendingPopOperations.add(PopOperation(stackScreen))
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Hands the pending operations to the container in stack order. The container applies
|
|
21
|
+
* them on its next update.
|
|
22
|
+
*/
|
|
23
|
+
internal fun enqueuePendingOperations(
|
|
20
24
|
container: StackContainer,
|
|
21
25
|
renderedScreens: List<StackScreen>,
|
|
22
26
|
) {
|
|
@@ -35,8 +39,6 @@ internal class StackContainerUpdateCoordinator {
|
|
|
35
39
|
.sortedBy { it.first }
|
|
36
40
|
.forEach { (_, operation) -> container.enqueuePushOperation(operation.screen) }
|
|
37
41
|
|
|
38
|
-
container.performContainerUpdateIfNeeded()
|
|
39
|
-
|
|
40
42
|
pendingPopOperations.clear()
|
|
41
43
|
pendingPushOperations.clear()
|
|
42
44
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.stack.host
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
|
-
import android.util.Log
|
|
5
4
|
import android.view.ViewGroup
|
|
5
|
+
import androidx.fragment.app.FragmentManager
|
|
6
6
|
import com.facebook.react.bridge.UIManager
|
|
7
7
|
import com.facebook.react.bridge.UIManagerListener
|
|
8
8
|
import com.facebook.react.common.annotations.UnstableReactNativeAPI
|
|
9
9
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
10
10
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
11
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorScheme
|
|
12
|
+
import com.swmansion.rnscreens.helpers.FragmentManagerHelper
|
|
11
13
|
import com.swmansion.rnscreens.helpers.getFabricUIManagerNotNull
|
|
12
14
|
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
13
15
|
import com.swmansion.rnscreens.utils.RNSLog
|
|
@@ -26,6 +28,8 @@ class StackHost(
|
|
|
26
28
|
private val containerUpdateCoordinator = StackContainerUpdateCoordinator()
|
|
27
29
|
private var isLayoutEnqueued = false
|
|
28
30
|
|
|
31
|
+
internal var colorScheme: ColorScheme by container::colorScheme
|
|
32
|
+
|
|
29
33
|
init {
|
|
30
34
|
addView(container)
|
|
31
35
|
|
|
@@ -77,7 +81,7 @@ class StackHost(
|
|
|
77
81
|
// This shouldn't happen in typical scenarios but it can happen with fast-refresh.
|
|
78
82
|
containerUpdateCoordinator.addPopOperation(stackScreen)
|
|
79
83
|
} else {
|
|
80
|
-
|
|
84
|
+
RNSLog.d(TAG, "Ignoring pop operation of ${stackScreen.screenKey}, already not attached or natively dismissed")
|
|
81
85
|
}
|
|
82
86
|
}
|
|
83
87
|
|
|
@@ -94,6 +98,11 @@ class StackHost(
|
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
|
|
101
|
+
override fun resolveFragmentManager(): FragmentManager =
|
|
102
|
+
checkNotNull(FragmentManagerHelper.findFragmentManagerForView(this)) {
|
|
103
|
+
"[RNScreens] Nullish fragment manager - can't run container operations"
|
|
104
|
+
}
|
|
105
|
+
|
|
97
106
|
override fun onMeasure(
|
|
98
107
|
widthMeasureSpec: Int,
|
|
99
108
|
heightMeasureSpec: Int,
|
|
@@ -119,6 +128,16 @@ class StackHost(
|
|
|
119
128
|
refreshLayout()
|
|
120
129
|
}
|
|
121
130
|
|
|
131
|
+
// On window configuration changes ViewRootImpl calls forceLayout() recursively on every view
|
|
132
|
+
// in the hierarchy, bypassing requestLayout(). React views never lay out their children during
|
|
133
|
+
// framework traversals, so nothing would clear the force-layout flags in our subtree — and once
|
|
134
|
+
// they are set, any subsequent requestLayout() from a descendant short-circuits before reaching
|
|
135
|
+
// the override above, permanently disabling the manual pass. Schedule it from here as well.
|
|
136
|
+
override fun forceLayout() {
|
|
137
|
+
super.forceLayout()
|
|
138
|
+
refreshLayout()
|
|
139
|
+
}
|
|
140
|
+
|
|
122
141
|
private fun refreshLayout() {
|
|
123
142
|
if (!isLayoutEnqueued) {
|
|
124
143
|
isLayoutEnqueued = true
|
|
@@ -148,14 +167,17 @@ class StackHost(
|
|
|
148
167
|
container.layout(left, top, right, bottom)
|
|
149
168
|
}
|
|
150
169
|
|
|
170
|
+
override fun willMountItems(uiManager: UIManager) {
|
|
171
|
+
container.beginUpdateBatch()
|
|
172
|
+
}
|
|
173
|
+
|
|
151
174
|
override fun didMountItems(uiManager: UIManager) {
|
|
152
|
-
containerUpdateCoordinator.
|
|
175
|
+
containerUpdateCoordinator.enqueuePendingOperations(container, renderedScreens)
|
|
176
|
+
container.endUpdateBatch()
|
|
153
177
|
}
|
|
154
178
|
|
|
155
179
|
override fun willDispatchViewUpdates(uiManager: UIManager) = Unit
|
|
156
180
|
|
|
157
|
-
override fun willMountItems(uiManager: UIManager) = Unit
|
|
158
|
-
|
|
159
181
|
override fun didDispatchMountItems(uiManager: UIManager) = Unit
|
|
160
182
|
|
|
161
183
|
override fun didScheduleMountItems(uiManager: UIManager) = Unit
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.stack.host
|
|
2
2
|
|
|
3
3
|
import android.view.View
|
|
4
|
+
import com.facebook.react.bridge.JSApplicationIllegalArgumentException
|
|
4
5
|
import com.facebook.react.module.annotations.ReactModule
|
|
5
6
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
7
|
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
8
|
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
8
9
|
import com.facebook.react.viewmanagers.RNSStackHostManagerDelegate
|
|
9
10
|
import com.facebook.react.viewmanagers.RNSStackHostManagerInterface
|
|
11
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorScheme
|
|
10
12
|
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
11
13
|
|
|
12
14
|
@ReactModule(name = StackHostViewManager.REACT_CLASS)
|
|
@@ -70,6 +72,18 @@ class StackHostViewManager :
|
|
|
70
72
|
*/
|
|
71
73
|
override fun needsCustomLayoutForChildren() = true
|
|
72
74
|
|
|
75
|
+
override fun setColorScheme(
|
|
76
|
+
view: StackHost,
|
|
77
|
+
value: String?,
|
|
78
|
+
) {
|
|
79
|
+
when (value) {
|
|
80
|
+
null, "inherit" -> view.colorScheme = ColorScheme.INHERIT
|
|
81
|
+
"light" -> view.colorScheme = ColorScheme.LIGHT
|
|
82
|
+
"dark" -> view.colorScheme = ColorScheme.DARK
|
|
83
|
+
else -> throw JSApplicationIllegalArgumentException("[RNScreens] Invalid color scheme: $value.")
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
73
87
|
companion object {
|
|
74
88
|
const val REACT_CLASS = "RNSStackHost"
|
|
75
89
|
}
|
package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackUpdateBatchStateProviding.kt
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.host
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Tells whether the owner has begun an update batch that has not ended yet.
|
|
5
|
+
* Consumers hold their pending updates while it is `true`; the owner applies
|
|
6
|
+
* them all in one pass when the batch ends.
|
|
7
|
+
*/
|
|
8
|
+
internal interface StackUpdateBatchStateProviding {
|
|
9
|
+
val isUpdatePending: Boolean
|
|
10
|
+
}
|
package/android/src/main/java/com/swmansion/rnscreens/stack/screen/PreventNativeDismissCallback.kt
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.stack.screen
|
|
2
2
|
|
|
3
|
-
import android.util.Log
|
|
4
3
|
import androidx.activity.OnBackPressedCallback
|
|
5
4
|
import androidx.lifecycle.Lifecycle
|
|
6
5
|
import androidx.lifecycle.LifecycleEventObserver
|
|
7
6
|
import androidx.lifecycle.LifecycleOwner
|
|
7
|
+
import com.swmansion.rnscreens.utils.RNSLog
|
|
8
8
|
|
|
9
9
|
internal class PreventNativeDismissCallback(
|
|
10
10
|
lifecycleOwner: LifecycleOwner,
|
|
@@ -31,7 +31,7 @@ internal class PreventNativeDismissCallback(
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
override fun handleOnBackPressed() {
|
|
34
|
-
|
|
34
|
+
RNSLog.i("RNScreens", "PreventNativeDismissCallback called for screen ${screen.screenKey}")
|
|
35
35
|
screen.onNativeDismissPrevented()
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -175,4 +175,8 @@ class StackScreen(
|
|
|
175
175
|
override fun resolveNestedContainer(): Container? = containerItemSupport.resolveNestedContainer()
|
|
176
176
|
|
|
177
177
|
override fun findContentScrollView(): ViewGroup? = containerItemSupport.findContentScrollView(this)
|
|
178
|
+
|
|
179
|
+
override fun wantsToPreventStackNativeDismiss(): ContainerItem? =
|
|
180
|
+
resolveNestedContainer()?.wantsToPreventStackNativeDismiss()
|
|
181
|
+
?: takeIf { isPreventNativeDismissEnabled }
|
|
178
182
|
}
|
|
@@ -1,20 +1,37 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.stack.screen
|
|
2
2
|
|
|
3
|
+
import android.content.res.Configuration
|
|
3
4
|
import android.os.Bundle
|
|
5
|
+
import android.util.Log
|
|
4
6
|
import android.view.Gravity
|
|
5
7
|
import android.view.LayoutInflater
|
|
6
8
|
import android.view.View
|
|
7
9
|
import android.view.ViewGroup
|
|
8
10
|
import androidx.fragment.app.Fragment
|
|
9
11
|
import androidx.transition.Slide
|
|
12
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeProviding
|
|
13
|
+
import com.swmansion.rnscreens.stack.header.StackHeaderBackPressHandler
|
|
10
14
|
import com.swmansion.rnscreens.stack.header.StackHeaderCoordinatorLayout
|
|
15
|
+
import com.swmansion.rnscreens.stack.host.StackUpdateBatchStateProviding
|
|
16
|
+
import java.lang.ref.WeakReference
|
|
11
17
|
|
|
12
18
|
internal class StackScreenFragment(
|
|
13
19
|
internal val stackScreen: StackScreen,
|
|
14
20
|
private val canNavigateBack: Boolean,
|
|
21
|
+
private val delegate: WeakReference<StackScreenFragmentDelegate>,
|
|
22
|
+
private val backPressHandler: WeakReference<StackHeaderBackPressHandler>,
|
|
23
|
+
private val updateBatchStateProvider: WeakReference<StackUpdateBatchStateProviding>,
|
|
24
|
+
private val colorSchemeProvider: WeakReference<ColorSchemeProviding>,
|
|
15
25
|
) : Fragment() {
|
|
16
26
|
private var screenLifecycleEventEmitter: StackScreenAppearanceEventsEmitter? = null
|
|
17
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Retained across fragment view destruction (e.g. tab switches detaching the fragment), so that
|
|
30
|
+
* the app bar scroll offset and the built header survive reattachment. FragmentManager removes
|
|
31
|
+
* the view from its container before `onDestroyView`, so `onCreateView` can return it as-is.
|
|
32
|
+
*/
|
|
33
|
+
private var headerCoordinatorLayout: StackHeaderCoordinatorLayout? = null
|
|
34
|
+
|
|
18
35
|
/**
|
|
19
36
|
* This holds the screen strongly for now. Beware of retain cycle.
|
|
20
37
|
*
|
|
@@ -35,17 +52,34 @@ internal class StackScreenFragment(
|
|
|
35
52
|
allowEnterTransitionOverlap = true
|
|
36
53
|
allowReturnTransitionOverlap = true
|
|
37
54
|
|
|
38
|
-
enterTransition = Slide(Gravity.
|
|
39
|
-
exitTransition = Slide(Gravity.
|
|
40
|
-
returnTransition = Slide(Gravity.
|
|
41
|
-
reenterTransition = Slide(Gravity.
|
|
55
|
+
enterTransition = Slide(Gravity.END)
|
|
56
|
+
exitTransition = Slide(Gravity.START)
|
|
57
|
+
returnTransition = Slide(Gravity.END)
|
|
58
|
+
reenterTransition = Slide(Gravity.START)
|
|
42
59
|
}
|
|
43
60
|
|
|
44
61
|
override fun onCreateView(
|
|
45
62
|
inflater: LayoutInflater,
|
|
46
63
|
container: ViewGroup?,
|
|
47
64
|
savedInstanceState: Bundle?,
|
|
48
|
-
): View
|
|
65
|
+
): View {
|
|
66
|
+
headerCoordinatorLayout?.let { return it }
|
|
67
|
+
|
|
68
|
+
return StackHeaderCoordinatorLayout(
|
|
69
|
+
requireContext(),
|
|
70
|
+
stackScreen,
|
|
71
|
+
canNavigateBack,
|
|
72
|
+
updateBatchStateProvider,
|
|
73
|
+
colorSchemeProvider,
|
|
74
|
+
) { pressedScreen ->
|
|
75
|
+
backPressHandler.get()?.handleHeaderBackButtonPress(pressedScreen)
|
|
76
|
+
?: Log.w(TAG, "[RNScreens] Header back button press dropped - handler is gone")
|
|
77
|
+
}.also { headerCoordinatorLayout = it }
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
internal fun flushPendingHeaderUpdates() {
|
|
81
|
+
headerCoordinatorLayout?.flushPendingUpdates()
|
|
82
|
+
}
|
|
49
83
|
|
|
50
84
|
override fun onViewCreated(
|
|
51
85
|
view: View,
|
|
@@ -56,21 +90,23 @@ internal class StackScreenFragment(
|
|
|
56
90
|
}
|
|
57
91
|
|
|
58
92
|
override fun onDestroyView() {
|
|
59
|
-
val coordinatorLayout = view
|
|
60
|
-
check(coordinatorLayout is StackHeaderCoordinatorLayout) {
|
|
61
|
-
"[RNScreens] Unexpected fragment view type: $view"
|
|
62
|
-
}
|
|
63
|
-
coordinatorLayout.tearDown()
|
|
64
93
|
super.onDestroyView()
|
|
65
94
|
screenLifecycleEventEmitter = null
|
|
66
95
|
}
|
|
67
96
|
|
|
68
97
|
override fun onDestroy() {
|
|
69
98
|
super.onDestroy()
|
|
99
|
+
headerCoordinatorLayout?.tearDown()
|
|
100
|
+
headerCoordinatorLayout = null
|
|
70
101
|
stackScreen.onDismiss()
|
|
71
102
|
teardownPreventNativeDismissCallback()
|
|
72
103
|
}
|
|
73
104
|
|
|
105
|
+
override fun onConfigurationChanged(newConfig: Configuration) {
|
|
106
|
+
super.onConfigurationChanged(newConfig)
|
|
107
|
+
delegate.get()?.onFragmentConfigurationChanged(newConfig)
|
|
108
|
+
}
|
|
109
|
+
|
|
74
110
|
/**
|
|
75
111
|
* Notifies this fragment that it has become "top fragment" in its fragment manager.
|
|
76
112
|
* Call this only if the lifecycle of the fragment is at least at CREATED.
|
|
@@ -109,4 +145,8 @@ internal class StackScreenFragment(
|
|
|
109
145
|
requireNativeDismissBackPressedCallback.remove()
|
|
110
146
|
preventNativeDismissBackPressedCallback = null
|
|
111
147
|
}
|
|
148
|
+
|
|
149
|
+
companion object {
|
|
150
|
+
private const val TAG = "StackScreenFragment"
|
|
151
|
+
}
|
|
112
152
|
}
|
package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.screen
|
|
2
|
+
|
|
3
|
+
import android.content.res.Configuration
|
|
4
|
+
|
|
5
|
+
internal interface StackScreenFragmentDelegate {
|
|
6
|
+
/**
|
|
7
|
+
* Notifies the delegate that the fragment received a configuration update,
|
|
8
|
+
* e.g. theme change from JS via Appearance.setColorScheme. Fragments are
|
|
9
|
+
* the only place where such updates are delivered reliably.
|
|
10
|
+
*/
|
|
11
|
+
fun onFragmentConfigurationChanged(config: Configuration)
|
|
12
|
+
}
|