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
|
@@ -3,6 +3,9 @@ package com.swmansion.rnscreens.tabs.host
|
|
|
3
3
|
import android.os.Build
|
|
4
4
|
import android.view.MenuItem
|
|
5
5
|
import android.view.View
|
|
6
|
+
import androidx.core.view.AccessibilityDelegateCompat
|
|
7
|
+
import androidx.core.view.ViewCompat
|
|
8
|
+
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
|
|
6
9
|
import androidx.core.view.children
|
|
7
10
|
import androidx.core.view.get
|
|
8
11
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
|
@@ -23,8 +26,26 @@ class TabsHostA11yCoordinator(
|
|
|
23
26
|
menuItem.contentDescription = tabsScreen.tabBarItemAccessibilityLabel
|
|
24
27
|
}
|
|
25
28
|
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
findTabItemView(menuItem.itemId)?.let { tabItemView ->
|
|
30
|
+
// when matching view by id, espresso driver seems to look for tag property
|
|
31
|
+
tabItemView.tag = tabsScreen.tabBarItemTestID
|
|
32
|
+
|
|
33
|
+
// UiAutomator-based drivers (Maestro, Appium) read the node's viewIdResourceName instead,
|
|
34
|
+
// so expose the testID there as well — this is what React Native's ReactAccessibilityDelegate
|
|
35
|
+
// does for every other view. Read through to the screen so a prop update is reflected.
|
|
36
|
+
ViewCompat.setAccessibilityDelegate(
|
|
37
|
+
tabItemView,
|
|
38
|
+
object : AccessibilityDelegateCompat() {
|
|
39
|
+
override fun onInitializeAccessibilityNodeInfo(
|
|
40
|
+
host: View,
|
|
41
|
+
info: AccessibilityNodeInfoCompat,
|
|
42
|
+
) {
|
|
43
|
+
super.onInitializeAccessibilityNodeInfo(host, info)
|
|
44
|
+
info.viewIdResourceName = tabsScreen.tabBarItemTestID
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
)
|
|
48
|
+
}
|
|
28
49
|
}
|
|
29
50
|
|
|
30
51
|
// Third-party SDKs can freely assign their own ids to id-less views in CustomBottomNavigationView's subtree and there is no way to
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.tabs.screen
|
|
2
2
|
|
|
3
3
|
import android.content.res.Configuration
|
|
4
|
-
import android.
|
|
4
|
+
import android.os.Parcelable
|
|
5
|
+
import android.util.SparseArray
|
|
5
6
|
import android.view.ViewGroup
|
|
6
7
|
import androidx.fragment.app.Fragment
|
|
7
8
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
@@ -9,7 +10,6 @@ import com.swmansion.rnscreens.common.FragmentProviding
|
|
|
9
10
|
import com.swmansion.rnscreens.common.container.Container
|
|
10
11
|
import com.swmansion.rnscreens.common.container.ContainerItem
|
|
11
12
|
import com.swmansion.rnscreens.common.container.ContainerItemSupport
|
|
12
|
-
import com.swmansion.rnscreens.helpers.getSystemDrawableResource
|
|
13
13
|
import com.swmansion.rnscreens.scrollviewmarker.ScrollViewMarker
|
|
14
14
|
import com.swmansion.rnscreens.scrollviewmarker.ScrollViewSeeking
|
|
15
15
|
import com.swmansion.rnscreens.tabs.appearance.TabsAppearance
|
|
@@ -52,7 +52,11 @@ class TabsScreen(
|
|
|
52
52
|
|
|
53
53
|
internal var appearance: TabsAppearance? by Delegates.observable(null) { _, oldValue, newValue ->
|
|
54
54
|
if (oldValue != newValue) {
|
|
55
|
-
|
|
55
|
+
if (invalidateMenuItemSizesIfNeeded(oldValue, newValue)) {
|
|
56
|
+
tabsScreenDelegate.get()?.onItemSizeChange(this)
|
|
57
|
+
} else {
|
|
58
|
+
tabsScreenDelegate.get()?.onAppearanceChanged(this)
|
|
59
|
+
}
|
|
56
60
|
}
|
|
57
61
|
}
|
|
58
62
|
|
|
@@ -78,24 +82,39 @@ class TabsScreen(
|
|
|
78
82
|
// endregion
|
|
79
83
|
|
|
80
84
|
// region Icon
|
|
81
|
-
var drawableIconResourceName: String? by Delegates.observable(null) { _, oldValue, newValue ->
|
|
82
|
-
if (newValue != oldValue) {
|
|
83
|
-
icon = getSystemDrawableResource(reactContext, newValue)
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
85
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
selectedIcon = getSystemDrawableResource(reactContext, newValue)
|
|
90
|
-
}
|
|
91
|
-
}
|
|
86
|
+
internal val icon = TabsScreenIcon(reactContext, ::onIconChange)
|
|
87
|
+
internal val selectedIcon = TabsScreenIcon(reactContext, ::onIconChange)
|
|
92
88
|
|
|
93
|
-
var
|
|
94
|
-
|
|
89
|
+
internal var isMenuItemIconInvalidated = true
|
|
90
|
+
|
|
91
|
+
internal var isMenuItemActiveIndicatorInvalidated = true
|
|
92
|
+
|
|
93
|
+
internal var appliedActiveIndicatorWidthPx: Int? = null
|
|
94
|
+
|
|
95
|
+
internal var appliedActiveIndicatorHeightPx: Int? = null
|
|
96
|
+
|
|
97
|
+
internal fun resolveIconsIfNeeded() {
|
|
98
|
+
icon.resolveIfNeeded()
|
|
99
|
+
selectedIcon.resolveIfNeeded()
|
|
95
100
|
}
|
|
96
101
|
|
|
97
|
-
|
|
98
|
-
|
|
102
|
+
private fun invalidateMenuItemSizesIfNeeded(
|
|
103
|
+
oldValue: TabsAppearance?,
|
|
104
|
+
newValue: TabsAppearance?,
|
|
105
|
+
): Boolean {
|
|
106
|
+
val isIconSizeChanged = oldValue?.tabBarItemIconSize != newValue?.tabBarItemIconSize
|
|
107
|
+
val isActiveIndicatorSizeChanged =
|
|
108
|
+
oldValue?.tabBarItemActiveIndicatorWidth != newValue?.tabBarItemActiveIndicatorWidth ||
|
|
109
|
+
oldValue?.tabBarItemActiveIndicatorHeight != newValue?.tabBarItemActiveIndicatorHeight
|
|
110
|
+
if (isIconSizeChanged) {
|
|
111
|
+
isMenuItemIconInvalidated = true
|
|
112
|
+
}
|
|
113
|
+
if (isIconSizeChanged || isActiveIndicatorSizeChanged) {
|
|
114
|
+
isMenuItemActiveIndicatorInvalidated = true
|
|
115
|
+
return true
|
|
116
|
+
}
|
|
117
|
+
return false
|
|
99
118
|
}
|
|
100
119
|
|
|
101
120
|
// endregion
|
|
@@ -119,6 +138,8 @@ class TabsScreen(
|
|
|
119
138
|
super.onAttachedToWindow()
|
|
120
139
|
}
|
|
121
140
|
|
|
141
|
+
override fun shouldDelayChildPressedState(): Boolean = false
|
|
142
|
+
|
|
122
143
|
override fun onLayout(
|
|
123
144
|
changed: Boolean,
|
|
124
145
|
l: Int,
|
|
@@ -127,6 +148,17 @@ class TabsScreen(
|
|
|
127
148
|
b: Int,
|
|
128
149
|
) = Unit
|
|
129
150
|
|
|
151
|
+
override fun dispatchSaveInstanceState(container: SparseArray<Parcelable>) {
|
|
152
|
+
// Do nothing. React Native owns this view hierarchy and keeps it alive, so there is no
|
|
153
|
+
// need to serialize/deserialize native view state. View ids in this subtree are react
|
|
154
|
+
// tags, which are not stable identities - restoring state by id can apply state saved
|
|
155
|
+
// by one view type to a different one, crashing e.g. in CompoundButton (see #4523).
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
override fun dispatchRestoreInstanceState(container: SparseArray<Parcelable>) {
|
|
159
|
+
// Ignore restoring instance state too, as we are not saving anything anyways.
|
|
160
|
+
}
|
|
161
|
+
|
|
130
162
|
internal fun setTabsScreenDelegate(delegate: TabsScreenDelegate?) {
|
|
131
163
|
tabsScreenDelegate = WeakReference(delegate)
|
|
132
164
|
}
|
|
@@ -137,6 +169,11 @@ class TabsScreen(
|
|
|
137
169
|
tabsScreenDelegate.get()?.onMenuItemAttributesChange(this)
|
|
138
170
|
}
|
|
139
171
|
|
|
172
|
+
private fun onIconChange() {
|
|
173
|
+
isMenuItemIconInvalidated = true
|
|
174
|
+
onMenuItemAttributesChange()
|
|
175
|
+
}
|
|
176
|
+
|
|
140
177
|
internal fun onViewManagerAddEventEmitters() {
|
|
141
178
|
// When this is called from View Manager the view tag is already set
|
|
142
179
|
check(id != NO_ID) { "[RNScreens] TabsScreen must have its tag set when registering event emitters" }
|
|
@@ -176,6 +213,10 @@ class TabsScreen(
|
|
|
176
213
|
|
|
177
214
|
override fun findContentScrollView(): ViewGroup? = containerItemSupport.findContentScrollView(this)
|
|
178
215
|
|
|
216
|
+
// TabsScreen has no `preventNativeDismiss` flag of its own - it only forwards
|
|
217
|
+
// the question to its nested container.
|
|
218
|
+
override fun wantsToPreventStackNativeDismiss(): ContainerItem? = resolveNestedContainer()?.wantsToPreventStackNativeDismiss()
|
|
219
|
+
|
|
179
220
|
// endregion
|
|
180
221
|
|
|
181
222
|
companion object {
|
|
@@ -8,6 +8,12 @@ internal interface TabsScreenDelegate {
|
|
|
8
8
|
|
|
9
9
|
fun onMenuItemAttributesChange(tabsScreen: TabsScreen)
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* The icon box is bar-wide, so an icon size change requires a whole-bar appearance
|
|
13
|
+
* update regardless of tab selection.
|
|
14
|
+
*/
|
|
15
|
+
fun onItemSizeChange(tabsScreen: TabsScreen)
|
|
16
|
+
|
|
11
17
|
/**
|
|
12
18
|
* **If a fragment is associated with the tab screen**, notify the delegate that the fragment
|
|
13
19
|
* got configuration update.
|
|
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
|
|
|
6
6
|
import android.view.View
|
|
7
7
|
import android.view.ViewGroup
|
|
8
8
|
import androidx.fragment.app.Fragment
|
|
9
|
+
import com.swmansion.rnscreens.helpers.ViewIdGenerator
|
|
9
10
|
|
|
10
11
|
class TabsScreenFragment(
|
|
11
12
|
internal val tabsScreen: TabsScreen,
|
|
@@ -13,6 +14,8 @@ class TabsScreenFragment(
|
|
|
13
14
|
internal val requireScreenKey: String by tabsScreen::requireScreenKey
|
|
14
15
|
internal val isPreventNativeSelectionEnabled: Boolean by tabsScreen::preventNativeSelection
|
|
15
16
|
|
|
17
|
+
internal val menuItemId: Int = ViewIdGenerator.generateViewId()
|
|
18
|
+
|
|
16
19
|
override fun onCreateView(
|
|
17
20
|
inflater: LayoutInflater,
|
|
18
21
|
container: ViewGroup?,
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.tabs.screen
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.graphics.drawable.Drawable
|
|
5
|
+
import com.swmansion.rnscreens.helpers.IconResolution
|
|
6
|
+
import com.swmansion.rnscreens.helpers.NoTintDrawable
|
|
7
|
+
import com.swmansion.rnscreens.helpers.PropIconResolver
|
|
8
|
+
import com.swmansion.rnscreens.helpers.resolveImage
|
|
9
|
+
import kotlin.properties.Delegates
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Single icon slot (normal or selected) of a tab bar item. Props stage here and may arrive
|
|
13
|
+
* in any order within a single update batch; resolution runs once per transaction via
|
|
14
|
+
* [resolveIfNeeded]. [onChanged] fires only when the resolved [drawable] actually changes.
|
|
15
|
+
*/
|
|
16
|
+
internal class TabsScreenIcon(
|
|
17
|
+
context: Context,
|
|
18
|
+
private val onChanged: () -> Unit,
|
|
19
|
+
) {
|
|
20
|
+
var drawableResourceName: String? by Delegates.observable(null) { _, oldValue, newValue ->
|
|
21
|
+
if (newValue != oldValue) isInvalidated = true
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var tinting: TabsScreenIconTinting by Delegates.observable(
|
|
25
|
+
TabsScreenIconTinting.DEFAULT,
|
|
26
|
+
) { _, oldValue, newValue ->
|
|
27
|
+
if (newValue != oldValue) isInvalidated = true
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var imageUri: String? by Delegates.observable(null) { _, oldValue, newValue ->
|
|
31
|
+
if (newValue != oldValue) isInvalidated = true
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Resolved output; read by the appearance applicator.
|
|
35
|
+
var drawable: Drawable? = null
|
|
36
|
+
private set
|
|
37
|
+
|
|
38
|
+
private var isInvalidated = false
|
|
39
|
+
|
|
40
|
+
// Handles source precedence (drawable name wins over uri), dedup, and stale async image drops.
|
|
41
|
+
private val resolver = createPropIconResolver(context)
|
|
42
|
+
|
|
43
|
+
// Kept unwrapped so a tint-only change re-wraps without reloading.
|
|
44
|
+
private var rawDrawable: Drawable? = null
|
|
45
|
+
private var appliedTinting = TabsScreenIconTinting.DEFAULT
|
|
46
|
+
|
|
47
|
+
fun resolveIfNeeded() {
|
|
48
|
+
if (!isInvalidated) {
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
isInvalidated = false
|
|
52
|
+
resolver.resolve(drawableResourceName, imageUri) { result ->
|
|
53
|
+
when (result) {
|
|
54
|
+
IconResolution.Unchanged -> if (tinting != appliedTinting) emit()
|
|
55
|
+
is IconResolution.Resolved -> {
|
|
56
|
+
rawDrawable = result.drawable
|
|
57
|
+
emit()
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Tint is read at emit time, so a toggle during an in-flight image load still applies.
|
|
64
|
+
private fun emit() {
|
|
65
|
+
appliedTinting = tinting
|
|
66
|
+
val next =
|
|
67
|
+
rawDrawable?.let {
|
|
68
|
+
if (tinting == TabsScreenIconTinting.ORIGINAL) NoTintDrawable(it) else it
|
|
69
|
+
}
|
|
70
|
+
if (next !== drawable) {
|
|
71
|
+
drawable = next
|
|
72
|
+
onChanged()
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private companion object {
|
|
77
|
+
fun createPropIconResolver(context: Context) =
|
|
78
|
+
PropIconResolver { name, uri, onComplete ->
|
|
79
|
+
resolveImage(context, name, uri, onComplete)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.tabs.screen
|
|
2
|
+
|
|
3
|
+
internal enum class TabsScreenIconTinting {
|
|
4
|
+
DEFAULT,
|
|
5
|
+
TINTED,
|
|
6
|
+
ORIGINAL,
|
|
7
|
+
;
|
|
8
|
+
|
|
9
|
+
companion object {
|
|
10
|
+
fun fromString(value: String?): TabsScreenIconTinting =
|
|
11
|
+
when (value) {
|
|
12
|
+
"tinted" -> TINTED
|
|
13
|
+
"original" -> ORIGINAL
|
|
14
|
+
else -> DEFAULT
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -8,7 +8,6 @@ import com.facebook.react.uimanager.ViewGroupManager
|
|
|
8
8
|
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
9
9
|
import com.facebook.react.viewmanagers.RNSTabsScreenAndroidManagerDelegate
|
|
10
10
|
import com.facebook.react.viewmanagers.RNSTabsScreenAndroidManagerInterface
|
|
11
|
-
import com.swmansion.rnscreens.helpers.loadImage
|
|
12
11
|
import com.swmansion.rnscreens.helpers.makeEventRegistrationInfo
|
|
13
12
|
import com.swmansion.rnscreens.helpers.readOptionalBoolean
|
|
14
13
|
import com.swmansion.rnscreens.helpers.readOptionalColor
|
|
@@ -55,6 +54,11 @@ class TabsScreenViewManager :
|
|
|
55
54
|
view.onViewManagerAddEventEmitters()
|
|
56
55
|
}
|
|
57
56
|
|
|
57
|
+
override fun onAfterUpdateTransaction(view: TabsScreen) {
|
|
58
|
+
super.onAfterUpdateTransaction(view)
|
|
59
|
+
view.resolveIconsIfNeeded()
|
|
60
|
+
}
|
|
61
|
+
|
|
58
62
|
override fun setScreenKey(
|
|
59
63
|
view: TabsScreen,
|
|
60
64
|
value: String?,
|
|
@@ -125,42 +129,42 @@ class TabsScreenViewManager :
|
|
|
125
129
|
view: TabsScreen,
|
|
126
130
|
value: String?,
|
|
127
131
|
) {
|
|
128
|
-
view.
|
|
132
|
+
view.icon.drawableResourceName = value
|
|
129
133
|
}
|
|
130
134
|
|
|
131
135
|
override fun setSelectedDrawableIconResourceName(
|
|
132
136
|
view: TabsScreen,
|
|
133
137
|
value: String?,
|
|
134
138
|
) {
|
|
135
|
-
view.
|
|
139
|
+
view.selectedIcon.drawableResourceName = value
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
override fun setIconTinting(
|
|
143
|
+
view: TabsScreen,
|
|
144
|
+
value: String?,
|
|
145
|
+
) {
|
|
146
|
+
view.icon.tinting = TabsScreenIconTinting.fromString(value)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
override fun setSelectedIconTinting(
|
|
150
|
+
view: TabsScreen,
|
|
151
|
+
value: String?,
|
|
152
|
+
) {
|
|
153
|
+
view.selectedIcon.tinting = TabsScreenIconTinting.fromString(value)
|
|
136
154
|
}
|
|
137
155
|
|
|
138
156
|
override fun setImageIconResource(
|
|
139
157
|
view: TabsScreen,
|
|
140
158
|
value: ReadableMap?,
|
|
141
159
|
) {
|
|
142
|
-
|
|
143
|
-
if (uri != null) {
|
|
144
|
-
loadImage(view.context, uri) { drawable ->
|
|
145
|
-
if (drawable != null) {
|
|
146
|
-
view.icon = drawable
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
160
|
+
view.icon.imageUri = value?.getString("uri")
|
|
150
161
|
}
|
|
151
162
|
|
|
152
163
|
override fun setSelectedImageIconResource(
|
|
153
164
|
view: TabsScreen,
|
|
154
165
|
value: ReadableMap?,
|
|
155
166
|
) {
|
|
156
|
-
|
|
157
|
-
if (uri != null) {
|
|
158
|
-
loadImage(view.context, uri) { drawable ->
|
|
159
|
-
if (drawable != null) {
|
|
160
|
-
view.selectedIcon = drawable
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
167
|
+
view.selectedIcon.imageUri = value?.getString("uri")
|
|
164
168
|
}
|
|
165
169
|
|
|
166
170
|
override fun setStandardAppearance(
|
|
@@ -187,8 +191,11 @@ class TabsScreenViewManager :
|
|
|
187
191
|
selected = if (appearance.hasKey("selected")) parseItemStateAppearance(context, appearance.getMap("selected")) else null,
|
|
188
192
|
focused = if (appearance.hasKey("focused")) parseItemStateAppearance(context, appearance.getMap("focused")) else null,
|
|
189
193
|
disabled = if (appearance.hasKey("disabled")) parseItemStateAppearance(context, appearance.getMap("disabled")) else null,
|
|
194
|
+
tabBarItemIconSize = appearance.readOptionalFloat("tabBarItemIconSize"),
|
|
190
195
|
tabBarItemActiveIndicatorColor = appearance.readOptionalColor(context, "tabBarItemActiveIndicatorColor"),
|
|
191
196
|
tabBarItemActiveIndicatorEnabled = appearance.readOptionalBoolean("tabBarItemActiveIndicatorEnabled"),
|
|
197
|
+
tabBarItemActiveIndicatorWidth = appearance.readOptionalFloat("tabBarItemActiveIndicatorWidth"),
|
|
198
|
+
tabBarItemActiveIndicatorHeight = appearance.readOptionalFloat("tabBarItemActiveIndicatorHeight"),
|
|
192
199
|
tabBarItemTitleFontFamily = appearance.readOptionalString("tabBarItemTitleFontFamily"),
|
|
193
200
|
tabBarItemTitleSmallLabelFontSize = appearance.readOptionalFloat("tabBarItemTitleSmallLabelFontSize"),
|
|
194
201
|
tabBarItemTitleLargeLabelFontSize = appearance.readOptionalFloat("tabBarItemTitleLargeLabelFontSize"),
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.utils
|
|
2
2
|
|
|
3
3
|
import android.content.Context
|
|
4
|
+
import android.content.res.Resources
|
|
4
5
|
import android.util.TypedValue
|
|
5
6
|
import android.view.View
|
|
6
|
-
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Density of the device's main display - the value React Native's `PixelUtil` converts with
|
|
10
|
+
* (`DisplayMetricsHolder` screen metrics), read without depending on React Native.
|
|
11
|
+
*/
|
|
12
|
+
private val mainDisplayDensity: Float
|
|
13
|
+
get() = Resources.getSystem().displayMetrics.density
|
|
7
14
|
|
|
8
15
|
/**
|
|
9
16
|
* Converts a pixel value to dp using the given display [density] — not the process-global
|
|
10
|
-
* density
|
|
17
|
+
* density of the device's main display. Fabric mounts views with
|
|
11
18
|
* the per-display density, so state pushed back to the Shadow Tree must be converted with
|
|
12
19
|
* that same density; the global one mis-scales the frame on any display whose density
|
|
13
20
|
* differs from the main one (Samsung DeX, freeform multi-window, external monitors). On
|
|
@@ -18,12 +25,12 @@ import com.facebook.react.uimanager.PixelUtil
|
|
|
18
25
|
* [android.util.DisplayMetrics] that was never populated — which should not happen for a
|
|
19
26
|
* live view. The `density > 0f` guard exists solely so a degenerate `0` cannot turn the
|
|
20
27
|
* division into Infinity/NaN and corrupt the pushed state; in that case we fall back to the
|
|
21
|
-
*
|
|
28
|
+
* main display's density ([mainDisplayDensity]), which is at least well-defined.
|
|
22
29
|
*/
|
|
23
30
|
internal fun pxToDp(
|
|
24
31
|
px: Float,
|
|
25
32
|
density: Float,
|
|
26
|
-
): Float = if (density > 0f) px / density else
|
|
33
|
+
): Float = if (density > 0f) px / density else px / mainDisplayDensity
|
|
27
34
|
|
|
28
35
|
/**
|
|
29
36
|
* Converts a pixel value to dp using the density of the display this [View] is attached to.
|
|
@@ -34,13 +41,13 @@ internal fun View.pxToDp(px: Float): Float = pxToDp(px, resources.displayMetrics
|
|
|
34
41
|
|
|
35
42
|
/**
|
|
36
43
|
* Converts a dp value to pixels using the given display [density] — not the process-global
|
|
37
|
-
* density
|
|
44
|
+
* density of the device's main display.
|
|
38
45
|
* See [pxToDp] for more context.
|
|
39
46
|
*/
|
|
40
47
|
internal fun dpToPx(
|
|
41
48
|
dp: Float,
|
|
42
49
|
density: Float,
|
|
43
|
-
): Float = if (density > 0f) dp * density else
|
|
50
|
+
): Float = if (density > 0f) dp * density else dp * mainDisplayDensity
|
|
44
51
|
|
|
45
52
|
/**
|
|
46
53
|
* Converts a dp value to pixels using the density of the display this [View] is attached to.
|
|
@@ -49,6 +56,13 @@ internal fun dpToPx(
|
|
|
49
56
|
*/
|
|
50
57
|
internal fun View.dpToPx(dp: Float): Float = dpToPx(dp, resources.displayMetrics.density)
|
|
51
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Converts an SP value to pixels using the density of the display this [View] is
|
|
61
|
+
* attached to (including the current font scale). Uses the view's own resources
|
|
62
|
+
* rather than the process-global density of the main display. See [pxToDp].
|
|
63
|
+
*/
|
|
64
|
+
internal fun View.spToPx(sp: Float): Float = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, resources.displayMetrics)
|
|
65
|
+
|
|
52
66
|
internal fun resolveDimensionAttr(
|
|
53
67
|
context: Context,
|
|
54
68
|
attrId: Int,
|
|
@@ -3,6 +3,10 @@ package com.swmansion.rnscreens.utils
|
|
|
3
3
|
import android.util.Log
|
|
4
4
|
import com.swmansion.rnscreens.BuildConfig
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* `d`, `i` and `v` are emitted only when `RNS_DEBUG_LOGGING` is enabled;
|
|
8
|
+
* `w`, `e` and `wtf` are always emitted.
|
|
9
|
+
*/
|
|
6
10
|
object RNSLog {
|
|
7
11
|
private inline fun logIfEnabled(
|
|
8
12
|
tag: String,
|
|
@@ -39,13 +43,17 @@ object RNSLog {
|
|
|
39
43
|
fun e(
|
|
40
44
|
tag: String,
|
|
41
45
|
msg: String,
|
|
42
|
-
)
|
|
46
|
+
) {
|
|
47
|
+
Log.e(tag, msg)
|
|
48
|
+
}
|
|
43
49
|
|
|
44
50
|
fun e(
|
|
45
51
|
tag: String,
|
|
46
52
|
msg: String,
|
|
47
53
|
tr: Throwable,
|
|
48
|
-
)
|
|
54
|
+
) {
|
|
55
|
+
Log.e(tag, msg, tr)
|
|
56
|
+
}
|
|
49
57
|
|
|
50
58
|
fun i(
|
|
51
59
|
tag: String,
|
|
@@ -72,22 +80,30 @@ object RNSLog {
|
|
|
72
80
|
fun w(
|
|
73
81
|
tag: String,
|
|
74
82
|
msg: String,
|
|
75
|
-
)
|
|
83
|
+
) {
|
|
84
|
+
Log.w(tag, msg)
|
|
85
|
+
}
|
|
76
86
|
|
|
77
87
|
fun w(
|
|
78
88
|
tag: String,
|
|
79
89
|
msg: String,
|
|
80
90
|
tr: Throwable,
|
|
81
|
-
)
|
|
91
|
+
) {
|
|
92
|
+
Log.w(tag, msg, tr)
|
|
93
|
+
}
|
|
82
94
|
|
|
83
95
|
fun wtf(
|
|
84
96
|
tag: String,
|
|
85
97
|
msg: String,
|
|
86
|
-
)
|
|
98
|
+
) {
|
|
99
|
+
Log.wtf(tag, msg)
|
|
100
|
+
}
|
|
87
101
|
|
|
88
102
|
fun wtf(
|
|
89
103
|
tag: String,
|
|
90
104
|
msg: String,
|
|
91
105
|
tr: Throwable,
|
|
92
|
-
)
|
|
106
|
+
) {
|
|
107
|
+
Log.wtf(tag, msg, tr)
|
|
108
|
+
}
|
|
93
109
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.utils
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.util.TypedValue
|
|
5
|
+
import androidx.annotation.StyleRes
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Resolves a theme attribute pointing at a style (e.g. `?attr/textAppearanceTitleLarge`)
|
|
9
|
+
* to its concrete style resource id. Used to recover Material's default text
|
|
10
|
+
* appearances so they can be re-applied at runtime.
|
|
11
|
+
*/
|
|
12
|
+
@StyleRes
|
|
13
|
+
internal fun resolveStyleResAttr(
|
|
14
|
+
context: Context,
|
|
15
|
+
attr: Int,
|
|
16
|
+
): Int {
|
|
17
|
+
val typedValue = TypedValue()
|
|
18
|
+
require(context.theme.resolveAttribute(attr, typedValue, true)) {
|
|
19
|
+
"[RNScreens] Unable to resolve Material theme style attribute."
|
|
20
|
+
}
|
|
21
|
+
return typedValue.resourceId
|
|
22
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<com.google.android.material.appbar.CollapsingToolbarLayout
|
|
3
|
+
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
4
|
+
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
5
|
+
style="?attr/collapsingToolbarLayoutLargeStyle"
|
|
6
|
+
android:layout_width="match_parent"
|
|
7
|
+
android:layout_height="?attr/collapsingToolbarLayoutLargeSize"
|
|
8
|
+
app:collapsedTitleGravityMode="availableSpace" />
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<com.google.android.material.appbar.CollapsingToolbarLayout
|
|
3
|
+
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
4
|
+
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
5
|
+
style="?attr/collapsingToolbarLayoutLargeStyle"
|
|
6
|
+
android:layout_width="match_parent"
|
|
7
|
+
android:layout_height="?attr/collapsingToolbarLayoutLargeSize"
|
|
8
|
+
app:collapsedTitleGravityMode="entireSpace" />
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<com.google.android.material.appbar.CollapsingToolbarLayout
|
|
3
|
+
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
4
|
+
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
5
|
+
style="?attr/collapsingToolbarLayoutMediumStyle"
|
|
6
|
+
android:layout_width="match_parent"
|
|
7
|
+
android:layout_height="?attr/collapsingToolbarLayoutMediumSize"
|
|
8
|
+
app:collapsedTitleGravityMode="availableSpace" />
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<com.google.android.material.appbar.CollapsingToolbarLayout
|
|
3
|
+
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
4
|
+
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
5
|
+
style="?attr/collapsingToolbarLayoutMediumStyle"
|
|
6
|
+
android:layout_width="match_parent"
|
|
7
|
+
android:layout_height="?attr/collapsingToolbarLayoutMediumSize"
|
|
8
|
+
app:collapsedTitleGravityMode="entireSpace" />
|
|
@@ -1,12 +1,42 @@
|
|
|
1
1
|
#include "RNSScreenRemovalListener.h"
|
|
2
2
|
#include <react/renderer/mounting/ShadowViewMutation.h>
|
|
3
|
+
#include <utility>
|
|
3
4
|
using namespace facebook::react;
|
|
4
5
|
|
|
6
|
+
uint64_t RNSScreenRemovalListener::setListener(
|
|
7
|
+
std::function<void(int)> &&listenerFunction) {
|
|
8
|
+
std::lock_guard<std::mutex> lock(listenerMutex_);
|
|
9
|
+
listenerFunction_ = std::move(listenerFunction);
|
|
10
|
+
return ++currentToken_;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
void RNSScreenRemovalListener::clearListener(uint64_t token) {
|
|
14
|
+
std::lock_guard<std::mutex> lock(listenerMutex_);
|
|
15
|
+
if (token == currentToken_) {
|
|
16
|
+
listenerFunction_ = nullptr;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
5
20
|
std::optional<MountingTransaction> RNSScreenRemovalListener::pullTransaction(
|
|
6
21
|
SurfaceId surfaceId,
|
|
7
22
|
MountingTransaction::Number transactionNumber,
|
|
8
23
|
const TransactionTelemetry &telemetry,
|
|
9
24
|
ShadowViewMutationList mutations) const {
|
|
25
|
+
// Copy under the lock, invoke outside it: the callback makes a JNI call and
|
|
26
|
+
// must not run while holding a lock the module thread also takes.
|
|
27
|
+
std::function<void(int)> listener;
|
|
28
|
+
{
|
|
29
|
+
std::lock_guard<std::mutex> lock(listenerMutex_);
|
|
30
|
+
listener = listenerFunction_;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (!listener) {
|
|
34
|
+
// Orphaned between module teardown and the next install: pass the
|
|
35
|
+
// transaction through untouched.
|
|
36
|
+
return MountingTransaction{
|
|
37
|
+
surfaceId, transactionNumber, std::move(mutations), telemetry};
|
|
38
|
+
}
|
|
39
|
+
|
|
10
40
|
for (const ShadowViewMutation &mutation : mutations) {
|
|
11
41
|
// When using RNSModalScreen on Android it should be added here.
|
|
12
42
|
if (mutation.type == ShadowViewMutation::Type::Remove &&
|
|
@@ -16,7 +46,7 @@ std::optional<MountingTransaction> RNSScreenRemovalListener::pullTransaction(
|
|
|
16
46
|
// We call the listener function even if this screen has not been owned
|
|
17
47
|
// by RNSScreenStack as since RN 0.78 we do not have enough information
|
|
18
48
|
// here. This final filter is applied later in NativeProxy.
|
|
19
|
-
|
|
49
|
+
listener(mutation.oldChildShadowView.tag);
|
|
20
50
|
}
|
|
21
51
|
}
|
|
22
52
|
|