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/appbar/StackHeaderAppBarLayout.kt
CHANGED
|
@@ -2,14 +2,20 @@ package com.swmansion.rnscreens.stack.header.appbar
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
5
|
+
import android.graphics.Color
|
|
6
|
+
import android.graphics.drawable.PaintDrawable
|
|
7
|
+
import android.view.LayoutInflater
|
|
5
8
|
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
|
6
9
|
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
|
7
|
-
import
|
|
10
|
+
import android.view.WindowInsets
|
|
11
|
+
import android.widget.TextView
|
|
8
12
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
|
9
|
-
import
|
|
13
|
+
import androidx.core.view.WindowInsetsCompat
|
|
14
|
+
import androidx.core.view.children
|
|
10
15
|
import com.google.android.material.appbar.AppBarLayout
|
|
11
16
|
import com.google.android.material.appbar.CollapsingToolbarLayout
|
|
12
17
|
import com.google.android.material.appbar.MaterialToolbar
|
|
18
|
+
import com.swmansion.rnscreens.stack.header.config.StackHeaderCollapsedTitleGravityMode
|
|
13
19
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderType
|
|
14
20
|
import com.swmansion.rnscreens.utils.resolveDimensionAttr
|
|
15
21
|
|
|
@@ -18,6 +24,9 @@ internal sealed class StackHeaderAppBarLayout(
|
|
|
18
24
|
) : AppBarLayout(context) {
|
|
19
25
|
abstract val toolbar: MaterialToolbar
|
|
20
26
|
|
|
27
|
+
internal abstract val defaultContentInsetStart: Int
|
|
28
|
+
internal abstract val defaultContentInsetEnd: Int
|
|
29
|
+
|
|
21
30
|
init {
|
|
22
31
|
layoutParams =
|
|
23
32
|
CoordinatorLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT).apply {
|
|
@@ -38,11 +47,66 @@ internal sealed class StackHeaderAppBarLayout(
|
|
|
38
47
|
layoutParams = LayoutParams(MATCH_PARENT, WRAP_CONTENT)
|
|
39
48
|
}
|
|
40
49
|
|
|
41
|
-
|
|
42
|
-
|
|
50
|
+
override val defaultContentInsetStart: Int = toolbar.contentInsetStart
|
|
51
|
+
override val defaultContentInsetEnd: Int = toolbar.contentInsetEnd
|
|
52
|
+
|
|
53
|
+
// Setting text size and typeface separately (Toolbar exposes only a whole text appearance)
|
|
54
|
+
// needs the title/subtitle TextViews, and Toolbar has no getter for them. Material locates
|
|
55
|
+
// them by matching the current text (internal ToolbarUtils.getTitleTextView); we attempt
|
|
56
|
+
// the same, but since we don't have current text, we use distinct placeholders - they force
|
|
57
|
+
// both views into existence and tell them apart — and clear the text only after capturing
|
|
58
|
+
// the references. Toolbar keeps both instances for its lifetime (empty text only detaches
|
|
59
|
+
// them), so the references stay valid.
|
|
60
|
+
internal val titleTextView: TextView
|
|
61
|
+
internal val subtitleTextView: TextView
|
|
62
|
+
|
|
63
|
+
// Keeps the status bar strip in sync with the bar's effective color through
|
|
64
|
+
// the lift animation (same per-frame mixed color Material applies to the
|
|
65
|
+
// background). Detached when an explicit statusBarScrimColor is set.
|
|
66
|
+
private var statusBarScrimSyncEnabled = false
|
|
67
|
+
private val statusBarScrimSync =
|
|
68
|
+
object : LiftOnScrollProgressListener() {
|
|
69
|
+
override fun onUpdate(
|
|
70
|
+
elevation: Float,
|
|
71
|
+
backgroundColor: Int,
|
|
72
|
+
progress: Float,
|
|
73
|
+
) {
|
|
74
|
+
statusBarForeground?.setTint(backgroundColor)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
43
77
|
|
|
44
78
|
init {
|
|
45
79
|
addView(toolbar)
|
|
80
|
+
|
|
81
|
+
// PaintDrawable is not color-extractable, so AppBarLayout's built-in
|
|
82
|
+
// colorSurface-keyed strip tint sync can never activate and fight the
|
|
83
|
+
// listener above (or an explicit scrim color) — regardless of theme.
|
|
84
|
+
statusBarForeground = PaintDrawable().apply { setTint(Color.TRANSPARENT) }
|
|
85
|
+
|
|
86
|
+
toolbar.title = TITLE_PLACEHOLDER
|
|
87
|
+
toolbar.subtitle = SUBTITLE_PLACEHOLDER
|
|
88
|
+
titleTextView = toolbar.findTextViewWithText(TITLE_PLACEHOLDER)
|
|
89
|
+
subtitleTextView = toolbar.findTextViewWithText(SUBTITLE_PLACEHOLDER)
|
|
90
|
+
toolbar.title = ""
|
|
91
|
+
toolbar.subtitle = ""
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
internal fun setStatusBarScrimSyncEnabled(enabled: Boolean) {
|
|
95
|
+
if (statusBarScrimSyncEnabled == enabled) return
|
|
96
|
+
statusBarScrimSyncEnabled = enabled
|
|
97
|
+
if (enabled) {
|
|
98
|
+
addLiftOnScrollProgressListener(statusBarScrimSync)
|
|
99
|
+
} else {
|
|
100
|
+
removeLiftOnScrollProgressListener(statusBarScrimSync)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private fun MaterialToolbar.findTextViewWithText(text: String): TextView =
|
|
105
|
+
children.filterIsInstance<TextView>().first { it.text?.toString() == text }
|
|
106
|
+
|
|
107
|
+
private companion object {
|
|
108
|
+
private const val TITLE_PLACEHOLDER = "rns_title"
|
|
109
|
+
private const val SUBTITLE_PLACEHOLDER = "rns_subtitle"
|
|
46
110
|
}
|
|
47
111
|
}
|
|
48
112
|
|
|
@@ -50,9 +114,10 @@ internal sealed class StackHeaderAppBarLayout(
|
|
|
50
114
|
internal class Collapsing(
|
|
51
115
|
context: Context,
|
|
52
116
|
val type: StackHeaderType,
|
|
117
|
+
collapsedTitleGravityMode: StackHeaderCollapsedTitleGravityMode,
|
|
53
118
|
) : StackHeaderAppBarLayout(context) {
|
|
54
119
|
override val toolbar =
|
|
55
|
-
|
|
120
|
+
StackHeaderToolbar(context).apply {
|
|
56
121
|
elevation = 0f
|
|
57
122
|
layoutParams =
|
|
58
123
|
CollapsingToolbarLayout
|
|
@@ -64,25 +129,21 @@ internal sealed class StackHeaderAppBarLayout(
|
|
|
64
129
|
}
|
|
65
130
|
}
|
|
66
131
|
|
|
132
|
+
override val defaultContentInsetStart: Int = toolbar.contentInsetStart
|
|
133
|
+
override val defaultContentInsetEnd: Int = toolbar.contentInsetEnd
|
|
134
|
+
|
|
135
|
+
// collapsedTitleGravityMode is a construction-time-only attr (no public setter), so both
|
|
136
|
+
// gravity modes are inflated from XML — differing only in that attribute — to stay 1:1.
|
|
67
137
|
internal val collapsingToolbarLayout: CollapsingToolbarLayout =
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
CollapsingToolbarLayout(context, null, styleAttr).apply {
|
|
78
|
-
layoutParams =
|
|
79
|
-
LayoutParams(
|
|
80
|
-
MATCH_PARENT,
|
|
81
|
-
resolveDimensionAttr(context, sizeAttr),
|
|
82
|
-
)
|
|
83
|
-
addView(toolbar)
|
|
84
|
-
}
|
|
85
|
-
}
|
|
138
|
+
(
|
|
139
|
+
LayoutInflater
|
|
140
|
+
.from(context)
|
|
141
|
+
.inflate(layoutResFor(type, collapsedTitleGravityMode), this, false)
|
|
142
|
+
as CollapsingToolbarLayout
|
|
143
|
+
).apply { addView(toolbar) }
|
|
144
|
+
|
|
145
|
+
private var trackedTopInset = 0
|
|
146
|
+
private var currentVerticalOffset = 0
|
|
86
147
|
|
|
87
148
|
init {
|
|
88
149
|
require(
|
|
@@ -92,6 +153,75 @@ internal sealed class StackHeaderAppBarLayout(
|
|
|
92
153
|
"[RNScreens] Collapsing StackHeaderAppBarLayout must be MEDIUM or LARGE type."
|
|
93
154
|
}
|
|
94
155
|
addView(collapsingToolbarLayout)
|
|
156
|
+
|
|
157
|
+
addOnOffsetChangedListener { _, verticalOffset ->
|
|
158
|
+
currentVerticalOffset = verticalOffset
|
|
159
|
+
updateContentScrimExclusion()
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Observed here because both AppBarLayout and CollapsingToolbarLayout
|
|
164
|
+
// install their own OnApplyWindowInsetsListener in their constructors —
|
|
165
|
+
// setting ours would silently replace Material's. Reads the same inset
|
|
166
|
+
// CTL uses for its status bar scrim bounds.
|
|
167
|
+
override fun dispatchApplyWindowInsets(insets: WindowInsets): WindowInsets {
|
|
168
|
+
@Suppress("DEPRECATION")
|
|
169
|
+
trackedTopInset =
|
|
170
|
+
if (fitsSystemWindows) {
|
|
171
|
+
WindowInsetsCompat.toWindowInsetsCompat(insets, this).systemWindowInsetTop
|
|
172
|
+
} else {
|
|
173
|
+
0
|
|
174
|
+
}
|
|
175
|
+
updateContentScrimExclusion()
|
|
176
|
+
return super.dispatchApplyWindowInsets(insets)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* While a status bar scrim is installed, the content scrim skips the
|
|
181
|
+
* status-bar strip that the status bar scrim paints alone. Otherwise,
|
|
182
|
+
* the two scrims stack there while fading (they share the same partial
|
|
183
|
+
* alpha), showing a darker band during the transition. The strip spans
|
|
184
|
+
* `[-verticalOffset, -verticalOffset + topInset]` in CTL coordinates,
|
|
185
|
+
* matching the status bar scrim bounds set in
|
|
186
|
+
* `CollapsingToolbarLayout.draw`.
|
|
187
|
+
*/
|
|
188
|
+
internal fun updateContentScrimExclusion() {
|
|
189
|
+
val contentScrim =
|
|
190
|
+
collapsingToolbarLayout.contentScrim
|
|
191
|
+
check(contentScrim is StackHeaderContentScrimDrawable) {
|
|
192
|
+
"[RNScreens] Unexpected contentScrim class."
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
contentScrim.exclusionBottom =
|
|
196
|
+
if (collapsingToolbarLayout.statusBarScrim != null && trackedTopInset > 0) {
|
|
197
|
+
trackedTopInset - currentVerticalOffset
|
|
198
|
+
} else {
|
|
199
|
+
0
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private companion object {
|
|
204
|
+
fun layoutResFor(
|
|
205
|
+
type: StackHeaderType,
|
|
206
|
+
mode: StackHeaderCollapsedTitleGravityMode,
|
|
207
|
+
): Int =
|
|
208
|
+
when (type) {
|
|
209
|
+
StackHeaderType.MEDIUM ->
|
|
210
|
+
when (mode) {
|
|
211
|
+
StackHeaderCollapsedTitleGravityMode.ENTIRE_SPACE ->
|
|
212
|
+
com.swmansion.rnscreens.R.layout.rns_collapsing_toolbar_medium_entire_space
|
|
213
|
+
StackHeaderCollapsedTitleGravityMode.AVAILABLE_SPACE ->
|
|
214
|
+
com.swmansion.rnscreens.R.layout.rns_collapsing_toolbar_medium_available_space
|
|
215
|
+
}
|
|
216
|
+
StackHeaderType.LARGE ->
|
|
217
|
+
when (mode) {
|
|
218
|
+
StackHeaderCollapsedTitleGravityMode.ENTIRE_SPACE ->
|
|
219
|
+
com.swmansion.rnscreens.R.layout.rns_collapsing_toolbar_large_entire_space
|
|
220
|
+
StackHeaderCollapsedTitleGravityMode.AVAILABLE_SPACE ->
|
|
221
|
+
com.swmansion.rnscreens.R.layout.rns_collapsing_toolbar_large_available_space
|
|
222
|
+
}
|
|
223
|
+
else -> error("[RNScreens] Invalid header mode.")
|
|
224
|
+
}
|
|
95
225
|
}
|
|
96
226
|
}
|
|
97
227
|
|
|
@@ -99,10 +229,12 @@ internal sealed class StackHeaderAppBarLayout(
|
|
|
99
229
|
fun create(
|
|
100
230
|
context: Context,
|
|
101
231
|
type: StackHeaderType,
|
|
232
|
+
collapsedTitleGravityMode: StackHeaderCollapsedTitleGravityMode,
|
|
102
233
|
): StackHeaderAppBarLayout =
|
|
103
234
|
when (type) {
|
|
104
235
|
StackHeaderType.SMALL -> Small(context)
|
|
105
|
-
StackHeaderType.MEDIUM, StackHeaderType.LARGE ->
|
|
236
|
+
StackHeaderType.MEDIUM, StackHeaderType.LARGE ->
|
|
237
|
+
Collapsing(context, type, collapsedTitleGravityMode)
|
|
106
238
|
}
|
|
107
239
|
}
|
|
108
240
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.header.appbar
|
|
2
|
+
|
|
3
|
+
import android.graphics.Canvas
|
|
4
|
+
import android.graphics.drawable.ColorDrawable
|
|
5
|
+
import androidx.core.graphics.withClip
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Content scrim that can skip the status-bar strip painted by the
|
|
9
|
+
* CollapsingToolbarLayout status bar scrim. Both scrims share the same alpha
|
|
10
|
+
* while fading, so wherever they overlap the strip composites darker than the
|
|
11
|
+
* rest of the scrim during the transition.
|
|
12
|
+
*/
|
|
13
|
+
internal class StackHeaderContentScrimDrawable(
|
|
14
|
+
color: Int,
|
|
15
|
+
) : ColorDrawable(color) {
|
|
16
|
+
// Bottom of the skipped band in CollapsingToolbarLayout coordinates; the
|
|
17
|
+
// visible top edge of the scrim always aligns with the strip top. Values
|
|
18
|
+
// <= bounds.top disable the exclusion.
|
|
19
|
+
internal var exclusionBottom: Int = 0
|
|
20
|
+
set(value) {
|
|
21
|
+
if (field != value) {
|
|
22
|
+
field = value
|
|
23
|
+
invalidateSelf()
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
override fun draw(canvas: Canvas) {
|
|
28
|
+
if (exclusionBottom <= bounds.top) {
|
|
29
|
+
super.draw(canvas)
|
|
30
|
+
return
|
|
31
|
+
}
|
|
32
|
+
canvas.withClip(bounds.left, exclusionBottom, bounds.right, bounds.bottom) {
|
|
33
|
+
super.draw(canvas)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderToolbar.kt
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.header.appbar
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.Gravity
|
|
5
|
+
import android.view.View
|
|
6
|
+
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
|
7
|
+
import com.google.android.material.appbar.MaterialToolbar
|
|
8
|
+
import com.swmansion.rnscreens.stack.header.subview.StackHeaderSubview
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Toolbar of a collapsing header. It exists to change the gravity of the
|
|
12
|
+
* placeholder view that CollapsingToolbarLayout adds to the toolbar, so that
|
|
13
|
+
* custom subview layout under RTL is correct.
|
|
14
|
+
*
|
|
15
|
+
* CollapsingToolbarLayout tracks the area the collapsed title is drawn in by
|
|
16
|
+
* adding a placeholder view with MATCH_PARENT layout params to the toolbar -
|
|
17
|
+
* the view itself doesn't draw the title, it is only measured. The placeholder
|
|
18
|
+
* inherits the toolbar's default START gravity, which is the same layout group
|
|
19
|
+
* our leading subview goes into. The toolbar walks that group in reverse child
|
|
20
|
+
* order under RTL, so the placeholder is positioned first and takes over the
|
|
21
|
+
* whole layout cursor, leaving the collapsed title drawn over the trailing
|
|
22
|
+
* subview and the toolbar menu. CENTER_HORIZONTAL moves it to the group the
|
|
23
|
+
* toolbar positions last, clamped into what the other children left over, which
|
|
24
|
+
* is the correct rect in both directions.
|
|
25
|
+
*
|
|
26
|
+
* See https://github.com/material-components/material-components-android/issues/1867.
|
|
27
|
+
*/
|
|
28
|
+
internal class StackHeaderToolbar(
|
|
29
|
+
context: Context,
|
|
30
|
+
) : MaterialToolbar(context) {
|
|
31
|
+
private var hasCollapsedTitlePlaceholder = false
|
|
32
|
+
|
|
33
|
+
override fun onViewAdded(child: View) {
|
|
34
|
+
super.onViewAdded(child)
|
|
35
|
+
|
|
36
|
+
val params = child.layoutParams as LayoutParams
|
|
37
|
+
if (!isCollapsedTitlePlaceholder(child, params)) {
|
|
38
|
+
return
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
params.gravity = Gravity.CENTER_HORIZONTAL or Gravity.CENTER_VERTICAL
|
|
42
|
+
hasCollapsedTitlePlaceholder = true
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The placeholder is not identifiable by type - it is a plain [View] - so it is recognized by
|
|
47
|
+
* its size instead. Every view the toolbar builds for itself (navigation & collapse buttons,
|
|
48
|
+
* menu, logo, expanded action view) is WRAP_CONTENT, and so are the subviews we add, which
|
|
49
|
+
* leaves a MATCH_PARENT child of a foreign type as the placeholder and nothing else.
|
|
50
|
+
*/
|
|
51
|
+
private fun isCollapsedTitlePlaceholder(
|
|
52
|
+
child: View,
|
|
53
|
+
params: LayoutParams,
|
|
54
|
+
): Boolean =
|
|
55
|
+
child !is StackHeaderSubview &&
|
|
56
|
+
params.width == MATCH_PARENT &&
|
|
57
|
+
params.height == MATCH_PARENT
|
|
58
|
+
|
|
59
|
+
override fun onLayout(
|
|
60
|
+
changed: Boolean,
|
|
61
|
+
l: Int,
|
|
62
|
+
t: Int,
|
|
63
|
+
r: Int,
|
|
64
|
+
b: Int,
|
|
65
|
+
) {
|
|
66
|
+
// The placeholder is added from CollapsingToolbarLayout.onMeasure, which always precedes
|
|
67
|
+
// our layout. Holds as long as the collapsing layout keeps its title enabled.
|
|
68
|
+
check(hasCollapsedTitlePlaceholder) {
|
|
69
|
+
"[RNScreens] CollapsingToolbarLayout did not add its collapsed title placeholder."
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
super.onLayout(changed, l, t, r, b)
|
|
73
|
+
}
|
|
74
|
+
}
|