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
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.stack.header
|
|
2
2
|
|
|
3
|
+
import android.annotation.SuppressLint
|
|
3
4
|
import android.content.res.ColorStateList
|
|
5
|
+
import android.graphics.Color
|
|
6
|
+
import android.graphics.Typeface
|
|
4
7
|
import android.graphics.drawable.Drawable
|
|
5
|
-
import android.text.TextUtils
|
|
6
8
|
import android.util.Log
|
|
9
|
+
import android.util.TypedValue
|
|
7
10
|
import android.view.Gravity
|
|
8
11
|
import android.view.View
|
|
9
12
|
import android.view.ViewGroup
|
|
@@ -11,10 +14,9 @@ import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
|
|
11
14
|
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
|
12
15
|
import android.widget.FrameLayout
|
|
13
16
|
import androidx.appcompat.view.ContextThemeWrapper
|
|
14
|
-
import androidx.appcompat.widget.
|
|
17
|
+
import androidx.appcompat.widget.AppCompatImageView
|
|
15
18
|
import androidx.appcompat.widget.Toolbar
|
|
16
19
|
import androidx.core.graphics.drawable.DrawableCompat
|
|
17
|
-
import androidx.core.widget.TextViewCompat
|
|
18
20
|
import com.google.android.material.R
|
|
19
21
|
import com.google.android.material.appbar.AppBarLayout
|
|
20
22
|
import com.google.android.material.appbar.AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS
|
|
@@ -24,11 +26,20 @@ import com.google.android.material.appbar.AppBarLayout.LayoutParams.SCROLL_FLAG_
|
|
|
24
26
|
import com.google.android.material.appbar.AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP
|
|
25
27
|
import com.google.android.material.appbar.CollapsingToolbarLayout
|
|
26
28
|
import com.google.android.material.appbar.MaterialToolbar
|
|
29
|
+
import com.google.android.material.color.MaterialColors
|
|
30
|
+
import com.google.android.material.shape.MaterialShapeDrawable
|
|
31
|
+
import com.swmansion.rnscreens.common.text.TextAppearance
|
|
32
|
+
import com.swmansion.rnscreens.common.text.TextAppearanceDefaults
|
|
27
33
|
import com.swmansion.rnscreens.ext.detachFromCurrentParent
|
|
28
34
|
import com.swmansion.rnscreens.stack.header.appbar.StackHeaderAppBarLayout
|
|
35
|
+
import com.swmansion.rnscreens.stack.header.appbar.StackHeaderContentScrimDrawable
|
|
29
36
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderConfigurationProviding
|
|
30
|
-
import com.swmansion.rnscreens.stack.header.
|
|
37
|
+
import com.swmansion.rnscreens.stack.header.config.StackHeaderType
|
|
38
|
+
import com.swmansion.rnscreens.utils.dpToPx
|
|
39
|
+
import com.swmansion.rnscreens.utils.resolveColorAttr
|
|
31
40
|
import com.swmansion.rnscreens.utils.resolveDrawableAttr
|
|
41
|
+
import com.swmansion.rnscreens.utils.spToPx
|
|
42
|
+
import kotlin.math.roundToInt
|
|
32
43
|
|
|
33
44
|
/**
|
|
34
45
|
* Builds and applies the Material app bar — type, subviews, title, back button,
|
|
@@ -43,7 +54,12 @@ internal class StackHeaderApplicator(
|
|
|
43
54
|
coordinatorLayout: StackHeaderCoordinatorLayout,
|
|
44
55
|
config: StackHeaderConfigurationProviding,
|
|
45
56
|
): StackHeaderAppBarLayout {
|
|
46
|
-
val appBar =
|
|
57
|
+
val appBar =
|
|
58
|
+
StackHeaderAppBarLayout.create(
|
|
59
|
+
wrappedContext,
|
|
60
|
+
config.type,
|
|
61
|
+
config.collapsedTitleGravityMode,
|
|
62
|
+
)
|
|
47
63
|
|
|
48
64
|
if (config.transparent) {
|
|
49
65
|
coordinatorLayout.removeContentBehavior()
|
|
@@ -56,7 +72,6 @@ internal class StackHeaderApplicator(
|
|
|
56
72
|
// Make sure that we receive insets, necessary when changing header mode in runtime.
|
|
57
73
|
appBar.requestApplyInsets()
|
|
58
74
|
populateAppBar(appBar, config)
|
|
59
|
-
maybeApplyRTLCollapsingToolbarLayoutWorkaround(coordinatorLayout, config, appBar)
|
|
60
75
|
appBar.toolbar.requestLayout()
|
|
61
76
|
|
|
62
77
|
return appBar
|
|
@@ -84,30 +99,21 @@ internal class StackHeaderApplicator(
|
|
|
84
99
|
toolbar.addView(it.view, Toolbar.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.END))
|
|
85
100
|
}
|
|
86
101
|
|
|
87
|
-
|
|
102
|
+
populateCenterSubview(appBar, toolbar, config)
|
|
88
103
|
populateBackground(appBar, config)
|
|
89
104
|
}
|
|
90
105
|
|
|
91
|
-
private fun
|
|
106
|
+
private fun populateCenterSubview(
|
|
92
107
|
appBar: StackHeaderAppBarLayout,
|
|
93
108
|
toolbar: Toolbar,
|
|
94
109
|
config: StackHeaderConfigurationProviding,
|
|
95
110
|
) {
|
|
96
|
-
val centerSubview = config.centerSubview
|
|
97
|
-
if (
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
Log.e(TAG, "[RNScreens] Center subview is supported only for small header type.")
|
|
103
|
-
}
|
|
104
|
-
} else if (appBar is StackHeaderAppBarLayout.Small) {
|
|
105
|
-
// Small header needs a managed title view because we can't use Toolbar's native
|
|
106
|
-
// title — it would be laid out to the leading side of leading subview.
|
|
107
|
-
val titleView = createManagedTitleView(toolbar)
|
|
108
|
-
appBar.managedTitleView = titleView
|
|
109
|
-
val index = if (config.isRTL) 0 else -1
|
|
110
|
-
toolbar.addView(titleView, index, Toolbar.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.START))
|
|
111
|
+
val centerSubview = config.centerSubview ?: return
|
|
112
|
+
if (appBar is StackHeaderAppBarLayout.Small) {
|
|
113
|
+
centerSubview.view.detachFromCurrentParent()
|
|
114
|
+
toolbar.addView(centerSubview.view, Toolbar.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.CENTER_HORIZONTAL))
|
|
115
|
+
} else {
|
|
116
|
+
Log.e(TAG, "[RNScreens] Center subview is supported only for small header type.")
|
|
111
117
|
}
|
|
112
118
|
}
|
|
113
119
|
|
|
@@ -144,51 +150,195 @@ internal class StackHeaderApplicator(
|
|
|
144
150
|
)
|
|
145
151
|
}
|
|
146
152
|
|
|
147
|
-
private fun createManagedTitleView(toolbar: Toolbar): AppCompatTextView =
|
|
148
|
-
AppCompatTextView(toolbar.context).apply {
|
|
149
|
-
setSingleLine()
|
|
150
|
-
ellipsize = TextUtils.TruncateAt.END
|
|
151
|
-
TextViewCompat.setTextAppearance(
|
|
152
|
-
this,
|
|
153
|
-
R.style.TextAppearance_Material3_TitleLarge,
|
|
154
|
-
)
|
|
155
|
-
layoutParams =
|
|
156
|
-
Toolbar
|
|
157
|
-
.LayoutParams(
|
|
158
|
-
WRAP_CONTENT,
|
|
159
|
-
WRAP_CONTENT,
|
|
160
|
-
Gravity.START,
|
|
161
|
-
).apply {
|
|
162
|
-
// TODO: there seems to be a problem with collapsing margins.
|
|
163
|
-
// We will expose customization either way but we should
|
|
164
|
-
// have consistent behavior and defaults.
|
|
165
|
-
marginStart = toolbar.titleMarginStart + toolbar.contentInsetStart
|
|
166
|
-
marginEnd = toolbar.titleMarginEnd
|
|
167
|
-
topMargin = toolbar.titleMarginTop
|
|
168
|
-
bottomMargin = toolbar.titleMarginBottom
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
153
|
// endregion
|
|
173
154
|
|
|
174
155
|
// region In-place updates
|
|
175
156
|
|
|
176
|
-
|
|
157
|
+
// ctl.setMaxLines() is listed in Material docs in the same way as other props but for some
|
|
158
|
+
// reason it's restricted.
|
|
159
|
+
@SuppressLint("RestrictedApi")
|
|
160
|
+
internal fun applyTitleAndSubtitle(
|
|
161
|
+
appBar: StackHeaderAppBarLayout,
|
|
162
|
+
config: StackHeaderConfigurationProviding,
|
|
163
|
+
) {
|
|
164
|
+
when (appBar) {
|
|
165
|
+
is StackHeaderAppBarLayout.Small -> {
|
|
166
|
+
appBar.toolbar.title = config.title
|
|
167
|
+
appBar.toolbar.subtitle = config.subtitle
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
is StackHeaderAppBarLayout.Collapsing -> {
|
|
171
|
+
val ctl = appBar.collapsingToolbarLayout
|
|
172
|
+
|
|
173
|
+
ctl.maxLines = config.maxLines
|
|
174
|
+
|
|
175
|
+
ctl.title = config.title
|
|
176
|
+
ctl.subtitle = config.subtitle
|
|
177
|
+
|
|
178
|
+
// setText only recomputes draw offsets within the existing bounds; the
|
|
179
|
+
// title/subtitle vertical split is recomputed only in onLayout. Force a layout
|
|
180
|
+
// so toggling the subtitle at runtime reclaims the title space.
|
|
181
|
+
ctl.requestLayout()
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
internal fun applyTitlePositioning(
|
|
187
|
+
appBar: StackHeaderAppBarLayout,
|
|
188
|
+
config: StackHeaderConfigurationProviding,
|
|
189
|
+
) {
|
|
190
|
+
when (appBar) {
|
|
191
|
+
is StackHeaderAppBarLayout.Small -> {
|
|
192
|
+
appBar.toolbar.isTitleCentered = config.titleCentered
|
|
193
|
+
appBar.toolbar.isSubtitleCentered = config.subtitleCentered
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
is StackHeaderAppBarLayout.Collapsing -> {
|
|
197
|
+
appBar.collapsingToolbarLayout.expandedTitleGravity =
|
|
198
|
+
config.expandedTitleHorizontalGravity or config.expandedTitleVerticalGravity
|
|
199
|
+
appBar.collapsingToolbarLayout.collapsedTitleGravity =
|
|
200
|
+
config.collapsedTitleHorizontalGravity or config.collapsedTitleVerticalGravity
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
internal fun applyTitleAndSubtitleAppearance(
|
|
177
206
|
appBar: StackHeaderAppBarLayout,
|
|
178
207
|
config: StackHeaderConfigurationProviding,
|
|
179
208
|
) {
|
|
209
|
+
// Defaults are resolved from wrappedContext, not the widget's own context: MaterialToolbar
|
|
210
|
+
// wraps its context (materialThemeOverlay) in a ContextThemeWrapper whose theme is a
|
|
211
|
+
// one-time copy, so it never sees later setTheme calls on wrappedContext (color scheme
|
|
212
|
+
// changes).
|
|
180
213
|
when (appBar) {
|
|
181
214
|
is StackHeaderAppBarLayout.Small -> {
|
|
182
|
-
|
|
183
|
-
|
|
215
|
+
val toolbar = appBar.toolbar
|
|
216
|
+
|
|
217
|
+
// Widget.Material3Expressive.Toolbar#{title,subtitle}TextAppearance
|
|
218
|
+
// = @macro/m3_comp_app_bar_small_{title,subtitle}_font. That style sets no text
|
|
219
|
+
// colors, so both come from @macro/m3_comp_app_bar_{title,subtitle}_color.
|
|
220
|
+
applySlot(
|
|
221
|
+
view = toolbar,
|
|
222
|
+
defaults =
|
|
223
|
+
TextAppearanceDefaults.resolve(
|
|
224
|
+
wrappedContext,
|
|
225
|
+
R.attr.textAppearanceTitleLarge,
|
|
226
|
+
R.attr.colorOnSurface,
|
|
227
|
+
),
|
|
228
|
+
appearance = config.titleAppearance,
|
|
229
|
+
setColor = { toolbar.setTitleTextColor(it) },
|
|
230
|
+
setTypeface = { appBar.titleTextView.typeface = it },
|
|
231
|
+
setTextSizePx = { appBar.titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, it) },
|
|
232
|
+
)
|
|
233
|
+
applySlot(
|
|
234
|
+
view = toolbar,
|
|
235
|
+
defaults =
|
|
236
|
+
TextAppearanceDefaults.resolve(
|
|
237
|
+
wrappedContext,
|
|
238
|
+
R.attr.textAppearanceLabelMedium,
|
|
239
|
+
R.attr.colorOnSurfaceVariant,
|
|
240
|
+
),
|
|
241
|
+
appearance = config.subtitleAppearance,
|
|
242
|
+
setColor = { toolbar.setSubtitleTextColor(it) },
|
|
243
|
+
setTypeface = { appBar.subtitleTextView.typeface = it },
|
|
244
|
+
setTextSizePx = { appBar.subtitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, it) },
|
|
245
|
+
)
|
|
184
246
|
}
|
|
185
247
|
|
|
186
248
|
is StackHeaderAppBarLayout.Collapsing -> {
|
|
187
|
-
|
|
249
|
+
val ctl = appBar.collapsingToolbarLayout
|
|
250
|
+
val isLarge = appBar.type == StackHeaderType.LARGE
|
|
251
|
+
|
|
252
|
+
// Widget.Material3Expressive.CollapsingToolbar.{Large,Medium}#expandedTitleTextAppearance
|
|
253
|
+
// = @macro/m3_comp_app_bar_{large,medium}_flexible_title_font
|
|
254
|
+
val expandedTitleAttr =
|
|
255
|
+
if (isLarge) R.attr.textAppearanceDisplaySmall else R.attr.textAppearanceHeadlineMedium
|
|
256
|
+
|
|
257
|
+
// …#expandedSubtitleTextAppearance
|
|
258
|
+
// = @macro/m3_comp_app_bar_{large,medium}_flexible_subtitle_font
|
|
259
|
+
val expandedSubtitleAttr =
|
|
260
|
+
if (isLarge) R.attr.textAppearanceTitleMedium else R.attr.textAppearanceLabelLarge
|
|
261
|
+
|
|
262
|
+
// In the calls below, the collapsed appearances and all four colors come from the base
|
|
263
|
+
// Widget.Material3Expressive.CollapsingToolbar: collapsed{Title,Subtitle}TextAppearance
|
|
264
|
+
// = @macro/m3_comp_app_bar_small_{title,subtitle}_font,
|
|
265
|
+
// {collapsed,expanded}{Title,Subtitle}TextColor
|
|
266
|
+
// = @macro/m3_comp_app_bar_{title,subtitle}_color.
|
|
267
|
+
|
|
268
|
+
applySlot(
|
|
269
|
+
view = ctl,
|
|
270
|
+
defaults =
|
|
271
|
+
TextAppearanceDefaults.resolve(wrappedContext, expandedTitleAttr, R.attr.colorOnSurface),
|
|
272
|
+
appearance = config.expandedTitleAppearance,
|
|
273
|
+
setColor = { ctl.setExpandedTitleTextColor(ColorStateList.valueOf(it)) },
|
|
274
|
+
setTypeface = { ctl.setExpandedTitleTypeface(it) },
|
|
275
|
+
setTextSizePx = { ctl.expandedTitleTextSize = it },
|
|
276
|
+
)
|
|
277
|
+
applySlot(
|
|
278
|
+
view = ctl,
|
|
279
|
+
defaults =
|
|
280
|
+
TextAppearanceDefaults.resolve(wrappedContext, R.attr.textAppearanceTitleLarge, R.attr.colorOnSurface),
|
|
281
|
+
appearance = config.collapsedTitleAppearance,
|
|
282
|
+
setColor = { ctl.setCollapsedTitleTextColor(it) },
|
|
283
|
+
setTypeface = { ctl.setCollapsedTitleTypeface(it) },
|
|
284
|
+
setTextSizePx = { ctl.collapsedTitleTextSize = it },
|
|
285
|
+
)
|
|
286
|
+
applySlot(
|
|
287
|
+
view = ctl,
|
|
288
|
+
defaults =
|
|
289
|
+
TextAppearanceDefaults.resolve(wrappedContext, expandedSubtitleAttr, R.attr.colorOnSurfaceVariant),
|
|
290
|
+
appearance = config.expandedSubtitleAppearance,
|
|
291
|
+
setColor = { ctl.setExpandedSubtitleTextColor(ColorStateList.valueOf(it)) },
|
|
292
|
+
setTypeface = { ctl.setExpandedSubtitleTypeface(it) },
|
|
293
|
+
setTextSizePx = { ctl.expandedSubtitleTextSize = it },
|
|
294
|
+
)
|
|
295
|
+
applySlot(
|
|
296
|
+
view = ctl,
|
|
297
|
+
defaults =
|
|
298
|
+
TextAppearanceDefaults.resolve(wrappedContext, R.attr.textAppearanceLabelMedium, R.attr.colorOnSurfaceVariant),
|
|
299
|
+
appearance = config.collapsedSubtitleAppearance,
|
|
300
|
+
setColor = { ctl.setCollapsedSubtitleTextColor(it) },
|
|
301
|
+
setTypeface = { ctl.setCollapsedSubtitleTypeface(it) },
|
|
302
|
+
setTextSizePx = { ctl.collapsedSubtitleTextSize = it },
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
// Layout is necessary e.g. after changing subtitle text size.
|
|
306
|
+
ctl.requestLayout()
|
|
188
307
|
}
|
|
189
308
|
}
|
|
190
309
|
}
|
|
191
310
|
|
|
311
|
+
/**
|
|
312
|
+
* Applies one title/subtitle slot as absolute values: each property is the prop value when
|
|
313
|
+
* set, the Material default otherwise.
|
|
314
|
+
*/
|
|
315
|
+
private fun applySlot(
|
|
316
|
+
view: View,
|
|
317
|
+
defaults: TextAppearanceDefaults,
|
|
318
|
+
appearance: TextAppearance,
|
|
319
|
+
setColor: (Int) -> Unit,
|
|
320
|
+
setTypeface: (Typeface) -> Unit,
|
|
321
|
+
setTextSizePx: (Float) -> Unit,
|
|
322
|
+
) {
|
|
323
|
+
setColor(appearance.color ?: defaults.color)
|
|
324
|
+
setTypeface(appearance.resolveTypeface(defaults.typeface))
|
|
325
|
+
setTextSizePx(appearance.fontSize?.let { view.spToPx(it) } ?: defaults.textSizePx)
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
internal fun applyContentInsets(
|
|
329
|
+
appBar: StackHeaderAppBarLayout,
|
|
330
|
+
config: StackHeaderConfigurationProviding,
|
|
331
|
+
) {
|
|
332
|
+
val toolbar = appBar.toolbar
|
|
333
|
+
|
|
334
|
+
toolbar.setContentInsetsRelative(
|
|
335
|
+
config.contentInsetStart?.let { toolbar.dpToPx(it).roundToInt() } ?: appBar.defaultContentInsetStart,
|
|
336
|
+
config.contentInsetEnd?.let { toolbar.dpToPx(it).roundToInt() } ?: appBar.defaultContentInsetEnd,
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
toolbar.requestLayout()
|
|
340
|
+
}
|
|
341
|
+
|
|
192
342
|
internal fun applyBackButton(
|
|
193
343
|
toolbar: MaterialToolbar,
|
|
194
344
|
config: StackHeaderConfigurationProviding,
|
|
@@ -208,9 +358,15 @@ internal class StackHeaderApplicator(
|
|
|
208
358
|
val baseDrawable =
|
|
209
359
|
config.backButtonIcon
|
|
210
360
|
?.let { getResizedDrawable(toolbar, it) }
|
|
211
|
-
?: resolveDefaultBackButtonIcon()
|
|
361
|
+
?: resolveDefaultBackButtonIcon(toolbar)
|
|
362
|
+
|
|
363
|
+
val tintList =
|
|
364
|
+
buildTintList(
|
|
365
|
+
config.backButtonTintColorNormal,
|
|
366
|
+
config.backButtonTintColorPressed,
|
|
367
|
+
config.backButtonTintColorFocused,
|
|
368
|
+
)
|
|
212
369
|
|
|
213
|
-
val tintList = resolveBackButtonTintList(config)
|
|
214
370
|
toolbar.navigationIcon =
|
|
215
371
|
if (tintList != null && baseDrawable != null) {
|
|
216
372
|
DrawableCompat.wrap(baseDrawable.mutate()).also {
|
|
@@ -223,6 +379,32 @@ internal class StackHeaderApplicator(
|
|
|
223
379
|
toolbar.setNavigationOnClickListener { onNavigationIconClick() }
|
|
224
380
|
}
|
|
225
381
|
|
|
382
|
+
internal fun applyOverflowIcon(
|
|
383
|
+
toolbar: MaterialToolbar,
|
|
384
|
+
config: StackHeaderConfigurationProviding,
|
|
385
|
+
) {
|
|
386
|
+
val baseDrawable =
|
|
387
|
+
config.overflowIcon
|
|
388
|
+
?.let { getResizedDrawable(toolbar, it) }
|
|
389
|
+
?: resolveDefaultOverflowIcon(toolbar)
|
|
390
|
+
|
|
391
|
+
val tintList =
|
|
392
|
+
buildTintList(
|
|
393
|
+
config.overflowIconTintColorNormal,
|
|
394
|
+
config.overflowIconTintColorPressed,
|
|
395
|
+
config.overflowIconTintColorFocused,
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
toolbar.overflowIcon =
|
|
399
|
+
if (tintList != null && baseDrawable != null) {
|
|
400
|
+
DrawableCompat.wrap(baseDrawable.mutate()).also {
|
|
401
|
+
DrawableCompat.setTintList(it, tintList)
|
|
402
|
+
}
|
|
403
|
+
} else {
|
|
404
|
+
baseDrawable
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
226
408
|
internal fun applyScrollFlags(
|
|
227
409
|
appBar: StackHeaderAppBarLayout,
|
|
228
410
|
config: StackHeaderConfigurationProviding,
|
|
@@ -270,6 +452,109 @@ internal class StackHeaderApplicator(
|
|
|
270
452
|
appBar.requestLayout()
|
|
271
453
|
}
|
|
272
454
|
|
|
455
|
+
internal fun applyBackgroundColors(
|
|
456
|
+
appBar: StackHeaderAppBarLayout,
|
|
457
|
+
config: StackHeaderConfigurationProviding,
|
|
458
|
+
) {
|
|
459
|
+
// Widget.Material3Expressive.AppBarLayout (an empty alias of Widget.Material3.AppBarLayout)
|
|
460
|
+
// #android:background = @macro/m3_comp_app_bar_container_color.
|
|
461
|
+
val backgroundColor =
|
|
462
|
+
config.backgroundColor ?: resolveColorAttr(appBar.context, R.attr.colorSurface)
|
|
463
|
+
|
|
464
|
+
// Both header kinds default to the same token, from different places:
|
|
465
|
+
// small — ...AppBarLayout#liftOnScrollColor
|
|
466
|
+
// = @macro/m3_comp_app_bar_on_scroll_container_color;
|
|
467
|
+
// collapsing — the M3 CollapsingToolbar styles set no contentScrim, so CTL installs its
|
|
468
|
+
// own default for titleCollapseMode=fade (getDefaultContentScrimColorForTitleCollapseFadeMode).
|
|
469
|
+
val scrolledBackgroundColor =
|
|
470
|
+
config.scrolledBackgroundColor
|
|
471
|
+
?: resolveColorAttr(appBar.context, R.attr.colorSurfaceContainer)
|
|
472
|
+
|
|
473
|
+
val background =
|
|
474
|
+
MaterialShapeDrawable().apply {
|
|
475
|
+
fillColor = ColorStateList.valueOf(backgroundColor)
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
when (appBar) {
|
|
479
|
+
is StackHeaderAppBarLayout.Small -> {
|
|
480
|
+
appBar.background = background
|
|
481
|
+
appBar.setLiftOnScrollColor(ColorStateList.valueOf(scrolledBackgroundColor))
|
|
482
|
+
|
|
483
|
+
// The lift animation runs only on lifted-state changes; jump to the end
|
|
484
|
+
// state when colors change while already lifted. The end state is the
|
|
485
|
+
// scrolled color composited over the background (see Material's
|
|
486
|
+
// initializeLiftOnScrollWithColor), not the raw scrolled color — they
|
|
487
|
+
// differ when the scrolled color is not fully opaque.
|
|
488
|
+
if (appBar.isLifted) {
|
|
489
|
+
background.fillColor =
|
|
490
|
+
ColorStateList.valueOf(
|
|
491
|
+
MaterialColors.layer(backgroundColor, scrolledBackgroundColor),
|
|
492
|
+
)
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
is StackHeaderAppBarLayout.Collapsing -> {
|
|
497
|
+
// Fade collapse mode disables liftOnScroll, but the lift animation only checks the
|
|
498
|
+
// lift color. We set it to null so the fill stays at backgroundColor under the
|
|
499
|
+
// transparent/translucent content scrim.
|
|
500
|
+
appBar.setLiftOnScrollColor(null)
|
|
501
|
+
appBar.background = background
|
|
502
|
+
appBar.collapsingToolbarLayout.contentScrim =
|
|
503
|
+
StackHeaderContentScrimDrawable(scrolledBackgroundColor)
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
applyStatusBarScrim(appBar, config, backgroundColor, scrolledBackgroundColor)
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
private fun applyStatusBarScrim(
|
|
511
|
+
appBar: StackHeaderAppBarLayout,
|
|
512
|
+
config: StackHeaderConfigurationProviding,
|
|
513
|
+
backgroundColor: Int,
|
|
514
|
+
scrolledBackgroundColor: Int,
|
|
515
|
+
) {
|
|
516
|
+
when (appBar) {
|
|
517
|
+
is StackHeaderAppBarLayout.Small -> {
|
|
518
|
+
val scrimColor = resolveStatusBarScrimColor(config, drivingColor = backgroundColor)
|
|
519
|
+
val autoFollow = scrimColor != null && config.statusBarScrimColor == null
|
|
520
|
+
appBar.setStatusBarScrimSyncEnabled(autoFollow)
|
|
521
|
+
appBar.statusBarForeground?.setTint(
|
|
522
|
+
when {
|
|
523
|
+
scrimColor == null -> Color.TRANSPARENT
|
|
524
|
+
// Same lifted jump as the background fill in applyBackgroundColors.
|
|
525
|
+
autoFollow && appBar.isLifted ->
|
|
526
|
+
MaterialColors.layer(backgroundColor, scrolledBackgroundColor)
|
|
527
|
+
else -> scrimColor
|
|
528
|
+
},
|
|
529
|
+
)
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
is StackHeaderAppBarLayout.Collapsing -> {
|
|
533
|
+
// Defaulting to the content scrim color masks toolbar content passing
|
|
534
|
+
// through the status-bar area (scroll-only flags) and is a visual
|
|
535
|
+
// no-op in the opaque exitUntilCollapsed case. An invisible scrim is
|
|
536
|
+
// normalized to null so the content scrim exclusion can key on scrim
|
|
537
|
+
// presence alone.
|
|
538
|
+
val scrimColor =
|
|
539
|
+
resolveStatusBarScrimColor(config, drivingColor = scrolledBackgroundColor)
|
|
540
|
+
?.takeIf { Color.alpha(it) > 0 }
|
|
541
|
+
if (scrimColor != null) {
|
|
542
|
+
appBar.collapsingToolbarLayout.setStatusBarScrimColor(scrimColor)
|
|
543
|
+
} else {
|
|
544
|
+
appBar.collapsingToolbarLayout.statusBarScrim = null
|
|
545
|
+
}
|
|
546
|
+
appBar.updateContentScrimExclusion()
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
// The default scrim exists only for an opaque driving color — a translucent
|
|
552
|
+
// scrim would double-composite over the layer it covers.
|
|
553
|
+
private fun resolveStatusBarScrimColor(
|
|
554
|
+
config: StackHeaderConfigurationProviding,
|
|
555
|
+
drivingColor: Int,
|
|
556
|
+
): Int? = config.statusBarScrimColor ?: drivingColor.takeIf { Color.alpha(it) == 0xFF }
|
|
557
|
+
|
|
273
558
|
// endregion
|
|
274
559
|
|
|
275
560
|
// region Helpers
|
|
@@ -298,53 +583,27 @@ internal class StackHeaderApplicator(
|
|
|
298
583
|
}
|
|
299
584
|
}
|
|
300
585
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
* CollapsingToolbarLayout adds a MATCH_PARENT dummy view to the Toolbar for title bounds
|
|
323
|
-
* tracking. In RTL, the Toolbar iterates custom views in reverse child order — so the
|
|
324
|
-
* dummy view (if last) gets processed first and consumes the entire layout cursor.
|
|
325
|
-
* Moving it to index 0 ensures our subviews are processed first.
|
|
326
|
-
*
|
|
327
|
-
* See https://github.com/material-components/material-components-android/issues/1867.
|
|
328
|
-
*/
|
|
329
|
-
private fun moveDummyViewToFront(toolbar: Toolbar) {
|
|
330
|
-
for (i in 0 until toolbar.childCount) {
|
|
331
|
-
val child = toolbar.getChildAt(i)
|
|
332
|
-
// Assumes only StackHeaderSubview children exist in Collapsing toolbar besides
|
|
333
|
-
// the CTL dummy view.
|
|
334
|
-
if (child !is StackHeaderSubview) {
|
|
335
|
-
val lp = child.layoutParams
|
|
336
|
-
toolbar.removeViewAt(i)
|
|
337
|
-
toolbar.addView(child, 0, lp)
|
|
338
|
-
return
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
private fun resolveBackButtonTintList(config: StackHeaderConfigurationProviding): ColorStateList? {
|
|
344
|
-
val normal = config.backButtonTintColorNormal
|
|
345
|
-
val pressed = config.backButtonTintColorPressed
|
|
346
|
-
val focused = config.backButtonTintColorFocused
|
|
347
|
-
|
|
586
|
+
// Default icon drawables must load through the toolbar's snapshot context, not
|
|
587
|
+
// wrappedContext: on Android 14+ the framework's themed resource cache returns stale
|
|
588
|
+
// entries for a Theme mutated in place by setTheme (ThemeKey dedup + shallow clone),
|
|
589
|
+
// freezing the icon tint after a color scheme change. The toolbar wrapper's theme is
|
|
590
|
+
// created fresh on every rebuild, so its cache entries always match the current palette.
|
|
591
|
+
// Plain attribute resolution (e.g. text appearance defaults) doesn't hit that cache and
|
|
592
|
+
// stays on the live wrappedContext.
|
|
593
|
+
private fun resolveDefaultBackButtonIcon(toolbar: MaterialToolbar): Drawable? =
|
|
594
|
+
resolveDrawableAttr(toolbar.context, androidx.appcompat.R.attr.homeAsUpIndicator)
|
|
595
|
+
|
|
596
|
+
// Mirrors how the toolbar's own overflow button obtains its icon: an AppCompatImageView built
|
|
597
|
+
// with actionOverflowButtonStyle resolves the theme's srcCompat and applies AppCompat's
|
|
598
|
+
// colorControlNormal auto-tint.
|
|
599
|
+
private fun resolveDefaultOverflowIcon(toolbar: MaterialToolbar): Drawable? =
|
|
600
|
+
AppCompatImageView(toolbar.context, null, androidx.appcompat.R.attr.actionOverflowButtonStyle).drawable
|
|
601
|
+
|
|
602
|
+
private fun buildTintList(
|
|
603
|
+
normal: Int?,
|
|
604
|
+
pressed: Int?,
|
|
605
|
+
focused: Int?,
|
|
606
|
+
): ColorStateList? {
|
|
348
607
|
if (normal == null && pressed == null && focused == null) return null
|
|
349
608
|
|
|
350
609
|
val states = mutableListOf<IntArray>()
|
package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.header
|
|
2
|
+
|
|
3
|
+
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Receives presses of the native header back button. Implemented by the object
|
|
7
|
+
* managing the navigation state of the stack the pressed header belongs to.
|
|
8
|
+
*/
|
|
9
|
+
internal fun interface StackHeaderBackPressHandler {
|
|
10
|
+
fun handleHeaderBackButtonPress(pressedScreen: StackScreen)
|
|
11
|
+
}
|