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
package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt
CHANGED
|
@@ -2,16 +2,18 @@ package com.swmansion.rnscreens.stack.header
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
5
|
-
import android.
|
|
5
|
+
import android.content.res.Configuration
|
|
6
|
+
import android.os.Parcelable
|
|
7
|
+
import android.util.SparseArray
|
|
6
8
|
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
|
7
9
|
import android.widget.FrameLayout
|
|
8
|
-
import androidx.activity.OnBackPressedDispatcherOwner
|
|
9
10
|
import androidx.appcompat.view.ContextThemeWrapper
|
|
10
11
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
|
11
|
-
import com.facebook.react.bridge.ReactContext
|
|
12
12
|
import com.google.android.material.R
|
|
13
13
|
import com.google.android.material.appbar.AppBarLayout
|
|
14
|
-
import com.
|
|
14
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeCoordinator
|
|
15
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeListener
|
|
16
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeProviding
|
|
15
17
|
import com.swmansion.rnscreens.stack.header.appbar.StackHeaderAppBarLayout
|
|
16
18
|
import com.swmansion.rnscreens.stack.header.appbar.StackHeaderScrollingViewBehavior
|
|
17
19
|
import com.swmansion.rnscreens.stack.header.config.OnHeaderConfigurationAttachListener
|
|
@@ -19,10 +21,9 @@ import com.swmansion.rnscreens.stack.header.config.StackHeaderConfigurationObser
|
|
|
19
21
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderConfigurationProviding
|
|
20
22
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderDelegate
|
|
21
23
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderInvalidationFlags
|
|
22
|
-
import com.swmansion.rnscreens.stack.
|
|
23
|
-
import com.swmansion.rnscreens.stack.header.toolbar.StackHeaderToolbarMenuSelectionController
|
|
24
|
-
import com.swmansion.rnscreens.stack.header.toolbar.update.StackHeaderToolbarMenuElementUpdate
|
|
24
|
+
import com.swmansion.rnscreens.stack.host.StackUpdateBatchStateProviding
|
|
25
25
|
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
26
|
+
import java.lang.ref.WeakReference
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* Root CoordinatorLayout for a screen's header: hosts the app bar and the
|
|
@@ -34,7 +35,11 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
34
35
|
context: Context,
|
|
35
36
|
internal val stackScreen: StackScreen,
|
|
36
37
|
private val canNavigateBack: Boolean,
|
|
37
|
-
|
|
38
|
+
private val updateBatchStateProvider: WeakReference<StackUpdateBatchStateProviding>,
|
|
39
|
+
parentColorSchemeProvider: WeakReference<ColorSchemeProviding>,
|
|
40
|
+
private val backPressHandler: StackHeaderBackPressHandler,
|
|
41
|
+
) : CoordinatorLayout(context),
|
|
42
|
+
ColorSchemeProviding {
|
|
38
43
|
// region Config attach / detach
|
|
39
44
|
|
|
40
45
|
private var currentProvider: StackHeaderConfigurationProviding? = null
|
|
@@ -52,15 +57,23 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
52
57
|
delegate: StackHeaderDelegate?,
|
|
53
58
|
) {
|
|
54
59
|
// Disconnect old config to prevent spurious updates from a detached config.
|
|
55
|
-
currentProvider?.
|
|
60
|
+
currentProvider?.let {
|
|
61
|
+
it.setConfigurationObserver(null)
|
|
62
|
+
it.toolbarMenuController.detach()
|
|
63
|
+
}
|
|
56
64
|
|
|
57
65
|
currentProvider = provider
|
|
58
66
|
currentDelegate = delegate
|
|
59
67
|
|
|
60
68
|
if (provider != null) {
|
|
61
69
|
provider.setConfigurationObserver(configObserver)
|
|
62
|
-
|
|
70
|
+
// A freshly adopted config is fully dirty by construction: this
|
|
71
|
+
// coordinator has applied nothing of it yet, regardless of what a
|
|
72
|
+
// previous (destroyed) coordinator consumed.
|
|
73
|
+
invalidate(StackHeaderInvalidationFlags.ALL)
|
|
74
|
+
flushPendingUpdates()
|
|
63
75
|
} else {
|
|
76
|
+
pendingFlags = StackHeaderInvalidationFlags.NONE
|
|
64
77
|
removeHeader()
|
|
65
78
|
}
|
|
66
79
|
}
|
|
@@ -70,36 +83,9 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
70
83
|
// region Configuration observer
|
|
71
84
|
|
|
72
85
|
private val configObserver =
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
override fun onMenuElementsUpdated(updates: List<StackHeaderToolbarMenuElementUpdate>) {
|
|
77
|
-
val toolbar = appBarLayout?.toolbar
|
|
78
|
-
if (toolbar == null) {
|
|
79
|
-
Log.w(
|
|
80
|
-
TAG,
|
|
81
|
-
"[RNScreens] Dropping ${updates.size} resolved toolbar menu update(s): " +
|
|
82
|
-
"the header toolbar is not currently attached (header hidden or detached).",
|
|
83
|
-
)
|
|
84
|
-
return
|
|
85
|
-
}
|
|
86
|
-
// Apply every element first, collecting the groups whose selection changed,
|
|
87
|
-
// then emit a single coalesced event per affected group.
|
|
88
|
-
val affectedGroups = LinkedHashSet<String>()
|
|
89
|
-
for (update in updates) {
|
|
90
|
-
StackHeaderToolbarMenuApplicator.updateToolbarMenuElement(
|
|
91
|
-
toolbar,
|
|
92
|
-
selectionController.forwardIdMap,
|
|
93
|
-
update.id,
|
|
94
|
-
update.options,
|
|
95
|
-
)
|
|
96
|
-
val checked = update.options.checked
|
|
97
|
-
if (checked != null) {
|
|
98
|
-
selectionController.applyGroupItemStateChange(toolbar, update.id, checked)?.let(affectedGroups::add)
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
affectedGroups.forEach { groupId -> emitGroupSelection(toolbar, groupId) }
|
|
102
|
-
}
|
|
86
|
+
StackHeaderConfigurationObserver { flags ->
|
|
87
|
+
invalidate(flags)
|
|
88
|
+
flushPendingUpdates()
|
|
103
89
|
}
|
|
104
90
|
|
|
105
91
|
// endregion
|
|
@@ -107,7 +93,8 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
107
93
|
// region Layout callbacks
|
|
108
94
|
|
|
109
95
|
private val appBarOffsetListener =
|
|
110
|
-
AppBarLayout.OnOffsetChangedListener {
|
|
96
|
+
AppBarLayout.OnOffsetChangedListener { appBar, verticalOffset ->
|
|
97
|
+
evaluateCollapseState(appBar, verticalOffset)
|
|
111
98
|
onMaybeHeaderLayoutChanged()
|
|
112
99
|
}
|
|
113
100
|
|
|
@@ -133,6 +120,41 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
133
120
|
StackHeaderFrameSynchronizer.sync(appBar, provider, delegate)
|
|
134
121
|
}
|
|
135
122
|
|
|
123
|
+
// Tracks whether the app bar is currently scrolled to its fully collapsed offset, so
|
|
124
|
+
// processUpdate can preserve the collapsed resting state across header updates (rebuilds and
|
|
125
|
+
// re-measures start expanded). This should be equivalent to Material's
|
|
126
|
+
// `collapsingTitleHelper.getExpansionFraction() == 1f` condition. `null` means unknown: no
|
|
127
|
+
// offset has been observed since the header was last removed.
|
|
128
|
+
private var isAppBarFullyCollapsed: Boolean? = null
|
|
129
|
+
|
|
130
|
+
private fun evaluateCollapseState(
|
|
131
|
+
appBar: AppBarLayout,
|
|
132
|
+
verticalOffset: Int,
|
|
133
|
+
) {
|
|
134
|
+
val totalScrollRange = appBar.totalScrollRange
|
|
135
|
+
isAppBarFullyCollapsed = totalScrollRange > 0 && -verticalOffset >= totalScrollRange
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// endregion
|
|
139
|
+
|
|
140
|
+
// region Layout direction
|
|
141
|
+
|
|
142
|
+
// Direction the header was last built against. In order to ensure correct
|
|
143
|
+
// layout and appearance (e.g. back button arrow direction), we rebuild the
|
|
144
|
+
// header on layout direction change.
|
|
145
|
+
private var builtLayoutDirection: Int? = null
|
|
146
|
+
|
|
147
|
+
override fun onRtlPropertiesChanged(layoutDirection: Int) {
|
|
148
|
+
super.onRtlPropertiesChanged(layoutDirection)
|
|
149
|
+
|
|
150
|
+
if (builtLayoutDirection == null || builtLayoutDirection == layoutDirection) {
|
|
151
|
+
return
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
invalidate(StackHeaderInvalidationFlags.STRUCTURE)
|
|
155
|
+
flushPendingUpdates()
|
|
156
|
+
}
|
|
157
|
+
|
|
136
158
|
// endregion
|
|
137
159
|
|
|
138
160
|
// region Header updates
|
|
@@ -145,56 +167,81 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
145
167
|
|
|
146
168
|
private val applicator = StackHeaderApplicator(wrappedContext)
|
|
147
169
|
|
|
148
|
-
private val selectionController = StackHeaderToolbarMenuSelectionController()
|
|
149
|
-
|
|
150
170
|
private var appBarLayout: StackHeaderAppBarLayout? = null
|
|
151
171
|
|
|
152
172
|
private val onNavigationIconClick: () -> Unit = {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
173
|
+
backPressHandler.handleHeaderBackButtonPress(stackScreen)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
private var pendingFlags = StackHeaderInvalidationFlags.NONE
|
|
177
|
+
|
|
178
|
+
private fun invalidate(flags: StackHeaderInvalidationFlags) {
|
|
179
|
+
pendingFlags = pendingFlags or flags
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
internal fun flushPendingUpdates() {
|
|
183
|
+
val provider = currentProvider ?: return
|
|
184
|
+
if (pendingFlags.isEmpty) return
|
|
185
|
+
// Hold the flush while more updates may arrive in the current batch; the container
|
|
186
|
+
// flushes when the batch ends.
|
|
187
|
+
if (updateBatchStateProvider.get()?.isUpdatePending == true) return
|
|
188
|
+
// While detached from window, only accumulate: onAttachedToWindow flushes once, after the
|
|
189
|
+
// color scheme is resolved, so the header is built under the right theme.
|
|
190
|
+
if (!isAttachedToWindow) return
|
|
191
|
+
processUpdate(provider)
|
|
157
192
|
}
|
|
158
193
|
|
|
159
194
|
private fun processUpdate(provider: StackHeaderConfigurationProviding) {
|
|
160
|
-
val
|
|
195
|
+
val flags = pendingFlags
|
|
196
|
+
pendingFlags = StackHeaderInvalidationFlags.NONE
|
|
197
|
+
|
|
198
|
+
val needsRebuild = flags.needsRebuild
|
|
199
|
+
val wasFullyCollapsed = isAppBarFullyCollapsed
|
|
200
|
+
|
|
161
201
|
if (needsRebuild) {
|
|
162
|
-
resetHeader()
|
|
163
202
|
if (provider.hidden) {
|
|
164
|
-
|
|
165
|
-
requestLayout()
|
|
166
|
-
provider.clearInvalidationFlags(StackHeaderInvalidationFlags.ALL)
|
|
203
|
+
removeHeader()
|
|
167
204
|
return
|
|
168
205
|
}
|
|
169
206
|
|
|
207
|
+
resetHeader()
|
|
170
208
|
val appBar = applicator.rebuild(this, provider)
|
|
171
209
|
appBarLayout = appBar
|
|
210
|
+
builtLayoutDirection = layoutDirection
|
|
172
211
|
attachAppBarListeners(appBar)
|
|
173
|
-
|
|
174
|
-
// If config needs to be rebuilt, all other flags must be invalidated as well.
|
|
175
|
-
provider.clearInvalidationFlags(
|
|
176
|
-
StackHeaderInvalidationFlags.STRUCTURE or StackHeaderInvalidationFlags.SUBVIEWS,
|
|
177
|
-
)
|
|
178
212
|
}
|
|
179
213
|
|
|
180
214
|
val appBar = appBarLayout
|
|
181
215
|
if (appBar != null) {
|
|
182
|
-
if (needsRebuild ||
|
|
183
|
-
applicator.
|
|
184
|
-
|
|
216
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.TITLE)) {
|
|
217
|
+
applicator.applyTitleAndSubtitle(appBar, provider)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.TITLE_APPEARANCE)) {
|
|
221
|
+
applicator.applyTitleAndSubtitleAppearance(appBar, provider)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.TITLE_POSITIONING)) {
|
|
225
|
+
applicator.applyTitlePositioning(appBar, provider)
|
|
185
226
|
}
|
|
186
227
|
|
|
187
|
-
if (needsRebuild ||
|
|
228
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.CONTENT_INSETS)) {
|
|
229
|
+
applicator.applyContentInsets(appBar, provider)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.BACK_BUTTON)) {
|
|
188
233
|
applicator.applyBackButton(appBar.toolbar, provider, canNavigateBack, onNavigationIconClick)
|
|
189
|
-
provider.clearInvalidationFlags(StackHeaderInvalidationFlags.BACK_BUTTON)
|
|
190
234
|
}
|
|
191
235
|
|
|
192
|
-
if (needsRebuild ||
|
|
236
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.SCROLL_FLAGS)) {
|
|
193
237
|
applicator.applyScrollFlags(appBar, provider)
|
|
194
|
-
provider.clearInvalidationFlags(StackHeaderInvalidationFlags.SCROLL_FLAGS)
|
|
195
238
|
}
|
|
196
239
|
|
|
197
|
-
if (needsRebuild ||
|
|
240
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.BACKGROUND_COLORS)) {
|
|
241
|
+
applicator.applyBackgroundColors(appBar, provider)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.LIFT_ON_SCROLL)) {
|
|
198
245
|
// Lift-on-scroll is disabled in transparent mode: there is no content
|
|
199
246
|
// scrolling behavior installed and the app bar overlays the content.
|
|
200
247
|
applicator.applyLiftOnScroll(
|
|
@@ -202,61 +249,95 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
202
249
|
enabled = provider.liftOnScroll && !provider.transparent,
|
|
203
250
|
targetScrollView = stackScreen.findContentScrollView(),
|
|
204
251
|
)
|
|
205
|
-
provider.clearInvalidationFlags(StackHeaderInvalidationFlags.LIFT_ON_SCROLL)
|
|
206
252
|
}
|
|
207
253
|
|
|
208
|
-
if (
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
provider.toolbarMenu,
|
|
216
|
-
)
|
|
217
|
-
val groupMetadata =
|
|
218
|
-
StackHeaderToolbarMenuApplicator.computeGroupMetadata(
|
|
219
|
-
provider.toolbarMenu,
|
|
220
|
-
)
|
|
221
|
-
|
|
222
|
-
StackHeaderToolbarMenuApplicator.validateRadioInitialSelection(provider.toolbarMenu)
|
|
223
|
-
|
|
224
|
-
selectionController.setMenuMaps(forwardIdMap, groupMetadata)
|
|
225
|
-
|
|
226
|
-
StackHeaderToolbarMenuApplicator.rebuildToolbarMenu(
|
|
227
|
-
appBar.toolbar,
|
|
228
|
-
provider.toolbarMenu,
|
|
229
|
-
forwardIdMap,
|
|
230
|
-
reverseIdMap,
|
|
231
|
-
forwardGroupIdMap,
|
|
232
|
-
groupDividerEnabled = provider.toolbarMenuGroupDividerEnabled,
|
|
233
|
-
onItemClicked = { id, menuItem ->
|
|
234
|
-
if (menuItem.isCheckable) {
|
|
235
|
-
selectionController.applyGroupItemStateChange(appBar.toolbar, id)?.let { groupId ->
|
|
236
|
-
emitGroupSelection(appBar.toolbar, groupId)
|
|
237
|
-
}
|
|
238
|
-
} else {
|
|
239
|
-
currentDelegate?.onMenuItemClicked(id)
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
)
|
|
254
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.TOOLBAR_MENU)) {
|
|
255
|
+
provider.toolbarMenuController.attach(appBar.toolbar)
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
if (needsRebuild || flags.containsAny(StackHeaderInvalidationFlags.OVERFLOW_ICON)) {
|
|
259
|
+
applicator.applyOverflowIcon(appBar.toolbar, provider)
|
|
260
|
+
}
|
|
243
261
|
|
|
244
|
-
|
|
262
|
+
// A rebuilt or re-measured app bar starts expanded; re-assert the fully-collapsed
|
|
263
|
+
// resting state so a scrolled-down screen doesn't jump. When the state is unknown
|
|
264
|
+
// (the header was removed — hidden, config detach), infer it from the content:
|
|
265
|
+
// scrolled content implies the bar was collapsed. A pending action, so it wins
|
|
266
|
+
// over applyScrollFlags' expand snap, and it resolves against the new configuration —
|
|
267
|
+
// degrading to expanded when the header can no longer collapse. Fractional offsets
|
|
268
|
+
// reset to expanded.
|
|
269
|
+
if (wasFullyCollapsed ?: isContentScrolled()) {
|
|
270
|
+
appBar.setExpanded(false, false)
|
|
245
271
|
}
|
|
246
272
|
}
|
|
247
273
|
|
|
248
274
|
onMaybeHeaderLayoutChanged()
|
|
249
275
|
}
|
|
250
276
|
|
|
277
|
+
// If the scroll view hasn't reached the top, we consider it scrolled.
|
|
278
|
+
private fun isContentScrolled() = stackScreen.findContentScrollView()?.canScrollVertically(-1) == true
|
|
279
|
+
|
|
251
280
|
// endregion
|
|
252
281
|
|
|
253
|
-
// region
|
|
282
|
+
// region Color scheme
|
|
254
283
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
284
|
+
// As the fragment's root view, this layout gets reparented into the container's
|
|
285
|
+
// ViewGroupOverlay for exit transitions, where a parent walk finds no provider -
|
|
286
|
+
// hence the ownership-injected one.
|
|
287
|
+
private val colorSchemeCoordinator =
|
|
288
|
+
ColorSchemeCoordinator().apply { explicitParentProvider = parentColorSchemeProvider }
|
|
289
|
+
|
|
290
|
+
// Night mode the header visuals were last applied against. Unlike the coordinator's
|
|
291
|
+
// internal dedupe (reset on every setup()), this survives detach/reattach, skipping
|
|
292
|
+
// redundant full re-applies e.g. on tab switches.
|
|
293
|
+
private var appliedUiNightMode: Int =
|
|
294
|
+
context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
|
|
295
|
+
|
|
296
|
+
override fun getResolvedUiNightMode() = colorSchemeCoordinator.getResolvedUiNightMode()
|
|
297
|
+
|
|
298
|
+
override fun addColorSchemeListener(listener: ColorSchemeListener) = colorSchemeCoordinator.addColorSchemeListener(listener)
|
|
299
|
+
|
|
300
|
+
override fun removeColorSchemeListener(listener: ColorSchemeListener) = colorSchemeCoordinator.removeColorSchemeListener(listener)
|
|
301
|
+
|
|
302
|
+
// No onConfigurationChanged override is needed: this view never sets its own colorScheme,
|
|
303
|
+
// so resolution always delegates to the parent provider, which does handle system changes.
|
|
304
|
+
|
|
305
|
+
override fun onAttachedToWindow() {
|
|
306
|
+
super.onAttachedToWindow()
|
|
307
|
+
// Resolve the color scheme before flushing, so a deferred first build happens under the
|
|
308
|
+
// pinned theme (a scheme change inside setup() flushes by itself; the trailing flush then
|
|
309
|
+
// no-ops).
|
|
310
|
+
colorSchemeCoordinator.setup(this) { applyUiNightMode(it) }
|
|
311
|
+
// AppBarLayout clears its liftOnScrollTargetView on window detach and never re-resolves
|
|
312
|
+
// it; re-apply on every attach.
|
|
313
|
+
invalidate(StackHeaderInvalidationFlags.LIFT_ON_SCROLL)
|
|
314
|
+
flushPendingUpdates()
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
override fun onDetachedFromWindow() {
|
|
318
|
+
colorSchemeCoordinator.teardown()
|
|
319
|
+
super.onDetachedFromWindow()
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
private fun applyUiNightMode(uiNightMode: Int) {
|
|
323
|
+
wrappedContext.setTheme(
|
|
324
|
+
when (uiNightMode) {
|
|
325
|
+
Configuration.UI_MODE_NIGHT_YES -> R.style.Theme_Material3Expressive_Dark_NoActionBar
|
|
326
|
+
Configuration.UI_MODE_NIGHT_NO -> R.style.Theme_Material3Expressive_Light_NoActionBar
|
|
327
|
+
else -> R.style.Theme_Material3Expressive_DayNight_NoActionBar
|
|
328
|
+
},
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
if (uiNightMode == appliedUiNightMode) {
|
|
332
|
+
return
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
appliedUiNightMode = uiNightMode
|
|
336
|
+
// A rebuild is needed because MaterialToolbar snapshots its theme at construction:
|
|
337
|
+
// ripples, the overflow popup and menu item views resolve from that frozen copy, so
|
|
338
|
+
// only view recreation refreshes them.
|
|
339
|
+
invalidate(StackHeaderInvalidationFlags.STRUCTURE)
|
|
340
|
+
flushPendingUpdates()
|
|
260
341
|
}
|
|
261
342
|
|
|
262
343
|
// endregion
|
|
@@ -269,11 +350,13 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
269
350
|
removeView(it)
|
|
270
351
|
}
|
|
271
352
|
appBarLayout = null
|
|
272
|
-
|
|
353
|
+
currentProvider?.toolbarMenuController?.detach()
|
|
273
354
|
}
|
|
274
355
|
|
|
275
356
|
private fun removeHeader() {
|
|
276
357
|
resetHeader()
|
|
358
|
+
isAppBarFullyCollapsed = null
|
|
359
|
+
builtLayoutDirection = null
|
|
277
360
|
removeContentBehavior()
|
|
278
361
|
requestLayout()
|
|
279
362
|
}
|
|
@@ -306,6 +389,22 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
306
389
|
|
|
307
390
|
// endregion
|
|
308
391
|
|
|
392
|
+
// region Instance state
|
|
393
|
+
|
|
394
|
+
override fun dispatchSaveInstanceState(container: SparseArray<Parcelable>) {
|
|
395
|
+
// Do nothing. This view is the root of a fragment-managed, react-owned hierarchy that
|
|
396
|
+
// React Native keeps alive, so there is no need to serialize/deserialize native view
|
|
397
|
+
// state. View ids in this subtree are react tags, which are not stable identities -
|
|
398
|
+
// restoring state by id can apply state saved by one view type to a different one,
|
|
399
|
+
// crashing e.g. in CompoundButton (see #4523).
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
override fun dispatchRestoreInstanceState(container: SparseArray<Parcelable>) {
|
|
403
|
+
// Ignore restoring instance state too, as we are not saving anything anyways.
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// endregion
|
|
407
|
+
|
|
309
408
|
// region Init
|
|
310
409
|
|
|
311
410
|
internal var stackScreenWrapper: FrameLayout
|
|
@@ -334,6 +433,9 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
334
433
|
// region Teardown
|
|
335
434
|
|
|
336
435
|
internal fun tearDown() {
|
|
436
|
+
colorSchemeCoordinator.teardown()
|
|
437
|
+
|
|
438
|
+
pendingFlags = StackHeaderInvalidationFlags.NONE
|
|
337
439
|
removeHeader()
|
|
338
440
|
|
|
339
441
|
stackScreenWrapper.removeView(stackScreen)
|
|
@@ -346,8 +448,4 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
346
448
|
}
|
|
347
449
|
|
|
348
450
|
// endregion
|
|
349
|
-
|
|
350
|
-
companion object {
|
|
351
|
-
private const val TAG = "StackHeaderCoordinatorLayout"
|
|
352
|
-
}
|
|
353
451
|
}
|