react-native-navigation 7.23.1 → 7.24.0
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/.buildkite/pipeline.yml +51 -11
- package/.nvmrc +1 -0
- package/Mock.d.ts +1 -0
- package/Mock.js +4 -0
- package/Mock.ts +1 -1
- package/README.md +0 -1
- package/jest.config.js +40 -0
- package/lib/{src/Mock → Mock}/Application.tsx +0 -0
- package/lib/{src/Mock → Mock}/ComponentProps.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/BottomTabs.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/ComponentScreen.tsx +13 -2
- package/lib/{src/Mock → Mock}/Components/LayoutComponent.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/Modals.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/NavigationButton.tsx +1 -1
- package/lib/{src/Mock → Mock}/Components/Overlays.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/Stack.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/TopBar.tsx +2 -2
- package/lib/{src/Mock → Mock}/Layouts/BottomTabsNode.ts +1 -1
- package/lib/{src/Mock → Mock}/Layouts/ComponentNode.ts +1 -1
- package/lib/{src/Mock → Mock}/Layouts/LayoutNodeFactory.ts +0 -0
- package/lib/{src/Mock → Mock}/Layouts/Node.ts +1 -1
- package/lib/{src/Mock → Mock}/Layouts/ParentNode.ts +2 -2
- package/lib/{src/Mock → Mock}/Layouts/StackNode.ts +0 -0
- package/lib/{src/Mock → Mock}/Stores/EventsStore.ts +10 -2
- package/lib/{src/Mock → Mock}/Stores/LayoutStore.ts +3 -2
- package/lib/{src/Mock → Mock}/connect.ts +0 -0
- package/lib/Mock/constants.d.ts +2 -0
- package/lib/Mock/constants.js +5 -0
- package/lib/{src/Mock → Mock}/constants.ts +0 -0
- package/lib/Mock/index.d.ts +3 -0
- package/lib/Mock/index.js +14 -0
- package/lib/{src/Mock → Mock}/index.ts +0 -0
- package/lib/{src/Mock → Mock}/mocks/AppRegistryService.ts +0 -0
- package/lib/{src/Mock → Mock}/mocks/NativeCommandsSender.tsx +1 -1
- package/lib/{src/Mock → Mock}/mocks/NativeEventsReceiver.ts +7 -4
- package/lib/android/app/build.gradle +23 -21
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/FontOptions.kt +2 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt +35 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +32 -17
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/Options.java +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt +16 -10
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +5 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalFrameLayout.kt +3 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt +11 -8
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt +168 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +5 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +42 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +12 -16
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +19 -11
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewController.java +2 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +6 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManager.kt +8 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +15 -7
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +127 -138
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +183 -22
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonController.kt +25 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt +9 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +52 -71
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/component/ComponentLayout.java +2 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt +2 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/TopBar.java +1 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/ButtonBar.kt +7 -12
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleAndButtonsContainer.kt +0 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleSubTitleLayout.kt +0 -7
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +2 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +7 -6
- package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +5 -0
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +5 -4
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +3 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +5 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +2 -3
- package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +25 -10
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +25 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/{TitleAndButtonsMeasurer.kt → TitleAndButtonsMeasurerTest.kt} +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +572 -0
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +2 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +5 -5
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +7 -3
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +17 -4
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +5 -5
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +1 -0
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +4 -0
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +6 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +13 -8
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +58 -51
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +219 -41
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +4 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +4 -4
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +4 -4
- package/lib/dist/Mock/Application.js +2 -2
- package/lib/dist/Mock/Components/BottomTabs.js +2 -2
- package/lib/dist/Mock/Components/ComponentScreen.js +15 -5
- package/lib/dist/Mock/Components/LayoutComponent.js +3 -2
- package/lib/dist/Mock/Components/Modals.js +2 -2
- package/lib/dist/Mock/Components/NavigationButton.d.ts +1 -1
- package/lib/dist/Mock/Components/NavigationButton.js +8 -10
- package/lib/dist/Mock/Components/Overlays.js +2 -2
- package/lib/dist/Mock/Components/Stack.js +2 -2
- package/lib/dist/Mock/Components/TopBar.d.ts +2 -2
- package/lib/dist/Mock/Components/TopBar.js +7 -6
- package/lib/dist/Mock/Layouts/BottomTabsNode.d.ts +1 -1
- package/lib/dist/Mock/Layouts/BottomTabsNode.js +3 -3
- package/lib/dist/Mock/Layouts/ComponentNode.d.ts +1 -1
- package/lib/dist/Mock/Layouts/ComponentNode.js +4 -4
- package/lib/dist/Mock/Layouts/LayoutNodeFactory.js +3 -3
- package/lib/dist/Mock/Layouts/Node.d.ts +1 -1
- package/lib/dist/Mock/Layouts/Node.js +5 -0
- package/lib/dist/Mock/Layouts/ParentNode.d.ts +2 -2
- package/lib/dist/Mock/Layouts/ParentNode.js +4 -3
- package/lib/dist/Mock/Layouts/StackNode.js +1 -1
- package/lib/dist/Mock/Stores/EventsStore.d.ts +5 -2
- package/lib/dist/Mock/Stores/EventsStore.js +7 -0
- package/lib/dist/Mock/Stores/LayoutStore.js +6 -3
- package/lib/dist/Mock/connect.js +1 -1
- package/lib/dist/Mock/index.js +1 -1
- package/lib/dist/Mock/mocks/NativeCommandsSender.d.ts +1 -1
- package/lib/dist/Mock/mocks/NativeCommandsSender.js +2 -2
- package/lib/dist/Mock/mocks/NativeEventsReceiver.d.ts +3 -3
- package/lib/dist/Mock/mocks/NativeEventsReceiver.js +6 -3
- package/lib/dist/{Navigation.d.ts → src/Navigation.d.ts} +0 -0
- package/lib/dist/{Navigation.js → src/Navigation.js} +19 -3
- package/lib/dist/{NavigationDelegate.d.ts → src/NavigationDelegate.d.ts} +0 -0
- package/lib/dist/{NavigationDelegate.js → src/NavigationDelegate.js} +1 -0
- package/lib/dist/{adapters → src/adapters}/AppRegistryService.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/AppRegistryService.js +0 -0
- package/lib/dist/{adapters → src/adapters}/AssetResolver.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/AssetResolver.js +0 -0
- package/lib/dist/src/adapters/ColorService.d.ts +3 -0
- package/lib/dist/{adapters → src/adapters}/ColorService.js +1 -1
- package/lib/dist/{adapters → src/adapters}/Constants.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/Constants.js +10 -6
- package/lib/dist/{adapters → src/adapters}/NativeCommandsSender.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/NativeCommandsSender.js +1 -0
- package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.js +1 -0
- package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.mock.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.mock.js +0 -0
- package/lib/dist/{adapters → src/adapters}/TouchablePreview.d.ts +0 -0
- package/lib/dist/src/adapters/TouchablePreview.js +89 -0
- package/lib/dist/{adapters → src/adapters}/UniqueIdProvider.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/UniqueIdProvider.js +2 -2
- package/lib/dist/{commands → src/commands}/Commands.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/Commands.js +24 -10
- package/lib/dist/{commands → src/commands}/Deprecations.d.ts +0 -0
- package/lib/dist/src/commands/Deprecations.js +80 -0
- package/lib/dist/{commands → src/commands}/LayoutTreeCrawler.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/LayoutTreeCrawler.js +4 -2
- package/lib/dist/{commands → src/commands}/LayoutTreeParser.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/LayoutTreeParser.js +1 -0
- package/lib/dist/{commands → src/commands}/LayoutType.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/LayoutType.js +0 -0
- package/lib/dist/{commands → src/commands}/OptionsCrawler.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/OptionsCrawler.js +6 -4
- package/lib/dist/{commands → src/commands}/OptionsProcessor.d.ts +1 -1
- package/lib/dist/{commands → src/commands}/OptionsProcessor.js +50 -42
- package/lib/dist/{components → src/components}/ComponentRegistry.d.ts +0 -0
- package/lib/dist/{components → src/components}/ComponentRegistry.js +4 -0
- package/lib/dist/{components → src/components}/ComponentWrapper.d.ts +0 -0
- package/lib/dist/{components → src/components}/ComponentWrapper.js +17 -17
- package/lib/dist/{components → src/components}/Modal.d.ts +0 -0
- package/lib/dist/{components → src/components}/Modal.js +8 -8
- package/lib/dist/{components → src/components}/Store.d.ts +2 -0
- package/lib/dist/{components → src/components}/Store.js +13 -6
- package/lib/dist/{events → src/events}/CommandsObserver.d.ts +0 -0
- package/lib/dist/{events → src/events}/CommandsObserver.js +2 -1
- package/lib/dist/{events → src/events}/ComponentEventsObserver.d.ts +4 -2
- package/lib/dist/{events → src/events}/ComponentEventsObserver.js +16 -14
- package/lib/dist/{events → src/events}/EventsRegistry.d.ts +2 -2
- package/lib/dist/{events → src/events}/EventsRegistry.js +3 -0
- package/lib/dist/{index.d.ts → src/index.d.ts} +0 -0
- package/lib/dist/src/index.js +22 -0
- package/lib/dist/{interfaces → src/interfaces}/CommandName.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/CommandName.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/ComponentEvents.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/ComponentEvents.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/EventSubscription.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/EventSubscription.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Events.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Events.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Layout.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Layout.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponent.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponent.js +8 -1
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponentListener.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponentListener.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponentProps.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponentProps.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationFunctionComponent.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationFunctionComponent.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Options.d.ts +9 -0
- package/lib/dist/{interfaces → src/interfaces}/Options.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/ProcessorSubscription.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/ProcessorSubscription.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Processors.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Processors.js +0 -0
- package/lib/dist/{processors → src/processors}/LayoutProcessor.d.ts +0 -0
- package/lib/dist/{processors → src/processors}/LayoutProcessor.js +1 -0
- package/lib/dist/{processors → src/processors}/LayoutProcessorsStore.d.ts +0 -0
- package/lib/dist/{processors → src/processors}/LayoutProcessorsStore.js +1 -3
- package/lib/dist/{processors → src/processors}/OptionProcessorsStore.d.ts +0 -0
- package/lib/dist/{processors → src/processors}/OptionProcessorsStore.js +1 -3
- package/lib/dist/{types.d.ts → src/types.d.ts} +0 -0
- package/lib/dist/{types.js → src/types.js} +0 -0
- package/lib/ios/AnimationObserver.h +17 -0
- package/lib/ios/AnimationObserver.m +41 -0
- package/lib/ios/BottomTabPresenter.h +0 -3
- package/lib/ios/BottomTabPresenter.m +0 -8
- package/lib/ios/RNNAssert.h +2 -2
- package/lib/ios/RNNBasePresenter.h +0 -4
- package/lib/ios/RNNBasePresenter.m +0 -12
- package/lib/ios/RNNBottomTabOptions.m +2 -1
- package/lib/ios/RNNBottomTabsController.m +8 -8
- package/lib/ios/RNNBridgeManager.mm +0 -1
- package/lib/ios/RNNButtonBuilder.m +2 -0
- package/lib/ios/RNNButtonOptions.h +1 -0
- package/lib/ios/RNNButtonOptions.m +4 -0
- package/lib/ios/RNNCommandsHandler.m +15 -8
- package/lib/ios/RNNComponentPresenter.m +0 -4
- package/lib/ios/RNNComponentViewController.m +2 -4
- package/lib/ios/RNNDotIndicatorPresenter.m +2 -1
- package/lib/ios/RNNExternalViewController.m +2 -4
- package/lib/ios/RNNModalManager.h +2 -1
- package/lib/ios/RNNModalManager.m +12 -21
- package/lib/ios/RNNSegmentedControl.h +1 -1
- package/lib/ios/RNNSideMenuChildVC.m +0 -4
- package/lib/ios/RNNSideMenuController.m +0 -4
- package/lib/ios/RNNSplitViewController.m +0 -4
- package/lib/ios/RNNStackController.m +0 -4
- package/lib/ios/RNNStackPresenter.m +3 -0
- package/lib/ios/RNNSwizzles.m +20 -0
- package/lib/ios/RNNTabBarItemCreator.m +3 -2
- package/lib/ios/RNNUIBarButtonItem.h +2 -0
- package/lib/ios/RNNUIBarButtonItem.m +17 -0
- package/lib/ios/ReactNativeNavigation.xcodeproj/project.pbxproj +8 -0
- package/lib/ios/TopBarPresenter.m +8 -4
- package/lib/ios/UIViewController+RNNOptions.m +1 -1
- package/lib/src/commands/Commands.ts +6 -1
- package/lib/src/commands/LayoutTreeCrawler.ts +2 -2
- package/lib/src/commands/OptionsCrawler.ts +2 -1
- package/lib/src/commands/OptionsProcessor.ts +15 -13
- package/lib/src/components/Store.ts +9 -0
- package/lib/src/events/ComponentEventsObserver.ts +5 -1
- package/lib/src/events/EventsRegistry.ts +2 -1
- package/lib/src/interfaces/Options.ts +10 -0
- package/package.json +19 -60
- package/tsconfig.mocks.json +7 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java +0 -41
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java +0 -511
- package/lib/dist/adapters/ColorService.d.ts +0 -3
- package/lib/dist/adapters/TouchablePreview.js +0 -91
- package/lib/dist/commands/Deprecations.js +0 -82
- package/lib/dist/index.js +0 -22
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
package com.reactnativenavigation.viewcontrollers.stack;
|
|
2
2
|
|
|
3
|
+
import static com.reactnativenavigation.utils.CollectionUtils.filter;
|
|
4
|
+
import static com.reactnativenavigation.utils.CollectionUtils.forEach;
|
|
5
|
+
import static com.reactnativenavigation.utils.CollectionUtils.isNullOrEmpty;
|
|
6
|
+
import static com.reactnativenavigation.utils.CollectionUtils.merge;
|
|
7
|
+
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
8
|
+
import static com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarControllerKt.DEFAULT_BORDER_COLOR;
|
|
9
|
+
|
|
3
10
|
import android.animation.Animator;
|
|
4
11
|
import android.app.Activity;
|
|
5
12
|
import android.graphics.Color;
|
|
6
13
|
import android.view.View;
|
|
14
|
+
import android.view.ViewGroup;
|
|
7
15
|
import android.view.ViewGroup.LayoutParams;
|
|
8
16
|
import android.view.ViewGroup.MarginLayoutParams;
|
|
9
17
|
import android.widget.FrameLayout;
|
|
@@ -28,7 +36,7 @@ import com.reactnativenavigation.options.parsers.TypefaceLoader;
|
|
|
28
36
|
import com.reactnativenavigation.utils.CollectionUtils;
|
|
29
37
|
import com.reactnativenavigation.utils.ObjectUtils;
|
|
30
38
|
import com.reactnativenavigation.utils.RenderChecker;
|
|
31
|
-
import com.reactnativenavigation.utils.
|
|
39
|
+
import com.reactnativenavigation.utils.SystemUiUtils;
|
|
32
40
|
import com.reactnativenavigation.utils.UiUtils;
|
|
33
41
|
import com.reactnativenavigation.viewcontrollers.bottomtabs.BottomTabsController;
|
|
34
42
|
import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarBackgroundViewController;
|
|
@@ -47,24 +55,11 @@ import com.reactnativenavigation.views.stack.topbar.titlebar.TitleBarReactViewCr
|
|
|
47
55
|
import java.util.ArrayList;
|
|
48
56
|
import java.util.Collections;
|
|
49
57
|
import java.util.HashMap;
|
|
50
|
-
import java.util.LinkedHashMap;
|
|
51
58
|
import java.util.List;
|
|
52
59
|
import java.util.Map;
|
|
53
60
|
import java.util.Objects;
|
|
54
61
|
|
|
55
|
-
import static com.reactnativenavigation.utils.CollectionUtils.difference;
|
|
56
|
-
import static com.reactnativenavigation.utils.CollectionUtils.filter;
|
|
57
|
-
import static com.reactnativenavigation.utils.CollectionUtils.first;
|
|
58
|
-
import static com.reactnativenavigation.utils.CollectionUtils.forEach;
|
|
59
|
-
import static com.reactnativenavigation.utils.CollectionUtils.getOrDefault;
|
|
60
|
-
import static com.reactnativenavigation.utils.CollectionUtils.isNullOrEmpty;
|
|
61
|
-
import static com.reactnativenavigation.utils.CollectionUtils.keyBy;
|
|
62
|
-
import static com.reactnativenavigation.utils.CollectionUtils.merge;
|
|
63
|
-
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
64
|
-
import static com.reactnativenavigation.utils.ObjectUtils.take;
|
|
65
|
-
|
|
66
62
|
public class StackPresenter {
|
|
67
|
-
private static final int DEFAULT_BORDER_COLOR = Color.BLACK;
|
|
68
63
|
private static final double DEFAULT_ELEVATION = 4d;
|
|
69
64
|
private final Activity activity;
|
|
70
65
|
|
|
@@ -79,12 +74,10 @@ public class StackPresenter {
|
|
|
79
74
|
private final TitleBarButtonCreator buttonCreator;
|
|
80
75
|
private Options defaultOptions;
|
|
81
76
|
|
|
82
|
-
private List<ButtonController> currentRightButtons = new ArrayList<>();
|
|
83
|
-
private List<ButtonController> currentLeftButtons = new ArrayList<>();
|
|
84
77
|
private final Map<View, TitleBarReactViewController> titleControllers = new HashMap();
|
|
85
78
|
private final Map<View, TopBarBackgroundViewController> backgroundControllers = new HashMap();
|
|
86
|
-
private final Map<View, Map<String, ButtonController>>
|
|
87
|
-
private final Map<View, Map<String, ButtonController>>
|
|
79
|
+
private final Map<View, Map<String, ButtonController>> rightButtonControllers = new HashMap();
|
|
80
|
+
private final Map<View, Map<String, ButtonController>> leftButtonControllers = new HashMap();
|
|
88
81
|
private final IconResolver iconResolver;
|
|
89
82
|
private final TypefaceLoader typefaceLoader;
|
|
90
83
|
|
|
@@ -126,8 +119,8 @@ public class StackPresenter {
|
|
|
126
119
|
|
|
127
120
|
public boolean isRendered(View component) {
|
|
128
121
|
ArrayList<ViewController<?>> controllers = new ArrayList<>();
|
|
129
|
-
controllers.addAll(perform(
|
|
130
|
-
controllers.addAll(perform(
|
|
122
|
+
controllers.addAll(perform(rightButtonControllers.get(component), new ArrayList<>(), Map::values));
|
|
123
|
+
controllers.addAll(perform(leftButtonControllers.get(component), new ArrayList<>(), Map::values));
|
|
131
124
|
controllers.add(backgroundControllers.get(component));
|
|
132
125
|
controllers.add(titleControllers.get(component));
|
|
133
126
|
return renderChecker.areRendered(filter(controllers, ObjectUtils::notNull));
|
|
@@ -136,29 +129,21 @@ public class StackPresenter {
|
|
|
136
129
|
public void mergeOptions(Options options, StackController stack, ViewController<?> currentChild) {
|
|
137
130
|
TopBarOptions resolvedTopBarOptions = options.topBar.copy().mergeWithDefault(stack.resolveChildOptions(currentChild).topBar).mergeWithDefault(defaultOptions.topBar);
|
|
138
131
|
mergeOrientation(options.layout.orientation);
|
|
139
|
-
// mergeButtons(topBar, withDefault.topBar.buttons, child);
|
|
140
132
|
mergeTopBarOptions(resolvedTopBarOptions, options, stack, currentChild);
|
|
141
133
|
mergeTopTabsOptions(options.topTabs);
|
|
142
134
|
mergeTopTabOptions(options.topTabOptions);
|
|
143
135
|
}
|
|
144
136
|
|
|
145
|
-
public void onConfigurationChanged(Options options) {
|
|
137
|
+
public void onConfigurationChanged(Options options, ViewController<?> currentChild) {
|
|
146
138
|
if (topBar == null) return;
|
|
147
139
|
Options withDefault = options.copy().withDefaultOptions(defaultOptions);
|
|
148
|
-
if (currentRightButtons != null && !currentRightButtons.isEmpty())
|
|
149
|
-
topBarController.applyRightButtons(currentRightButtons);
|
|
150
|
-
if (currentLeftButtons != null && !currentLeftButtons.isEmpty())
|
|
151
|
-
topBarController.applyLeftButtons(currentLeftButtons);
|
|
152
140
|
if (withDefault.topBar.buttons.back.visible.isTrue()) {
|
|
153
|
-
|
|
141
|
+
topBarController.setBackButton(createButtonController(withDefault.topBar.buttons.back));
|
|
154
142
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
topBar.setBackgroundColor(withDefault.topBar.background.color.get(Color.WHITE));
|
|
160
|
-
topBar.setTitleTextColor(withDefault.topBar.title.color.get(TopBar.DEFAULT_TITLE_COLOR));
|
|
161
|
-
topBar.setSubtitleColor(withDefault.topBar.subtitle.color.get(TopBar.DEFAULT_TITLE_COLOR));
|
|
143
|
+
topBarController.onConfigurationChanged(withDefault,
|
|
144
|
+
leftButtonControllers.get(currentChild.getView()),
|
|
145
|
+
rightButtonControllers.get(currentChild.getView()));
|
|
146
|
+
|
|
162
147
|
}
|
|
163
148
|
|
|
164
149
|
public void applyInitialChildLayoutOptions(Options options) {
|
|
@@ -183,10 +168,10 @@ public class StackPresenter {
|
|
|
183
168
|
public void onChildDestroyed(ViewController<?> child) {
|
|
184
169
|
perform(titleControllers.remove(child.getView()), TitleBarReactViewController::destroy);
|
|
185
170
|
perform(backgroundControllers.remove(child.getView()), TopBarBackgroundViewController::destroy);
|
|
186
|
-
destroyButtons(
|
|
187
|
-
destroyButtons(
|
|
188
|
-
|
|
189
|
-
|
|
171
|
+
destroyButtons(rightButtonControllers.get(child.getView()));
|
|
172
|
+
destroyButtons(leftButtonControllers.get(child.getView()));
|
|
173
|
+
rightButtonControllers.remove(child.getView());
|
|
174
|
+
leftButtonControllers.remove(child.getView());
|
|
190
175
|
}
|
|
191
176
|
|
|
192
177
|
private void destroyButtons(@Nullable Map<String, ButtonController> buttons) {
|
|
@@ -258,25 +243,39 @@ public class StackPresenter {
|
|
|
258
243
|
}
|
|
259
244
|
|
|
260
245
|
private void applyStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Options withDefault) {
|
|
261
|
-
if(withDefault.statusBar.visible.isTrueOrUndefined() && withDefault.statusBar.drawBehind.isTrue()){
|
|
262
|
-
topBar.setTopPadding(
|
|
263
|
-
topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) +
|
|
246
|
+
if (withDefault.statusBar.visible.isTrueOrUndefined() && withDefault.statusBar.drawBehind.isTrue()) {
|
|
247
|
+
topBar.setTopPadding(SystemUiUtils.getStatusBarHeight(activity));
|
|
248
|
+
topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + SystemUiUtils.getStatusBarHeightDp(activity));
|
|
249
|
+
|
|
264
250
|
} else {
|
|
265
251
|
topBar.setTopPadding(0);
|
|
266
252
|
topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)));
|
|
267
253
|
}
|
|
268
254
|
}
|
|
269
|
-
|
|
270
|
-
private void mergeStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Options
|
|
271
|
-
if(
|
|
272
|
-
if(
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
255
|
+
|
|
256
|
+
private void mergeStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Options childOptions) {
|
|
257
|
+
if(childOptions.statusBar.visible.isTrueOrUndefined()){
|
|
258
|
+
if (childOptions.statusBar.drawBehind.hasValue()) {
|
|
259
|
+
if (childOptions.statusBar.drawBehind.isTrue()) {
|
|
260
|
+
topBar.setTopPadding(SystemUiUtils.getStatusBarHeight(activity));
|
|
261
|
+
topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + SystemUiUtils.getStatusBarHeightDp(activity));
|
|
262
|
+
} else {
|
|
263
|
+
topBar.setTopPadding(0);
|
|
264
|
+
topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}else{
|
|
268
|
+
if (childOptions.statusBar.drawBehind.hasValue()) {
|
|
269
|
+
if (childOptions.statusBar.drawBehind.isFalseOrUndefined()) {
|
|
270
|
+
topBar.setTopPadding(SystemUiUtils.getStatusBarHeight(activity));
|
|
271
|
+
topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + SystemUiUtils.getStatusBarHeightDp(activity));
|
|
272
|
+
} else {
|
|
273
|
+
topBar.setTopPadding(0);
|
|
274
|
+
topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)));
|
|
275
|
+
}
|
|
278
276
|
}
|
|
279
277
|
}
|
|
278
|
+
|
|
280
279
|
}
|
|
281
280
|
|
|
282
281
|
@Nullable
|
|
@@ -304,59 +303,21 @@ public class StackPresenter {
|
|
|
304
303
|
}
|
|
305
304
|
|
|
306
305
|
private void applyButtons(TopBarOptions options, ViewController<?> child) {
|
|
307
|
-
|
|
308
|
-
List<ButtonOptions> rightButtons = mergeButtonsWithColor(options.buttons.right,
|
|
309
|
-
options.rightButtonColor
|
|
310
|
-
, options.rightButtonDisabledColor);
|
|
311
|
-
List<ButtonController> rightButtonControllers = getOrCreateButtonControllersByInstanceId(componentRightButtons.get(child.getView()), rightButtons);
|
|
312
|
-
componentRightButtons.put(child.getView(), keyBy(rightButtonControllers, ButtonController::getButtonInstanceId));
|
|
313
|
-
if (!CollectionUtils.equals(currentRightButtons, rightButtonControllers)) {
|
|
314
|
-
currentRightButtons = rightButtonControllers;
|
|
315
|
-
topBarController.applyRightButtons(currentRightButtons);
|
|
316
|
-
}
|
|
317
|
-
} else {
|
|
318
|
-
currentRightButtons = null;
|
|
319
|
-
topBar.clearRightButtons();
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
if (options.buttons.left != null) {
|
|
323
|
-
List<ButtonOptions> leftButtons = mergeButtonsWithColor(options.buttons.left,
|
|
324
|
-
options.leftButtonColor,
|
|
325
|
-
options.leftButtonDisabledColor);
|
|
326
|
-
List<ButtonController> leftButtonControllers = getOrCreateButtonControllersByInstanceId(componentLeftButtons.get(child.getView()), leftButtons);
|
|
327
|
-
componentLeftButtons.put(child.getView(), keyBy(leftButtonControllers, ButtonController::getButtonInstanceId));
|
|
328
|
-
if (!CollectionUtils.equals(currentLeftButtons, leftButtonControllers)) {
|
|
329
|
-
currentLeftButtons = leftButtonControllers;
|
|
330
|
-
topBarController.applyLeftButtons(currentLeftButtons);
|
|
331
|
-
}
|
|
332
|
-
} else {
|
|
333
|
-
currentLeftButtons = null;
|
|
334
|
-
topBar.clearLeftButtons();
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
if (options.buttons.back.visible.isTrue() && !options.buttons.hasLeftButtons()) {
|
|
338
|
-
topBar.setBackButton(createButtonController(options.buttons.back));
|
|
339
|
-
}
|
|
306
|
+
//should be at first in order for next actions to be animated
|
|
340
307
|
if (options.animateRightButtons.hasValue())
|
|
341
|
-
|
|
308
|
+
topBarController.animateRightButtons(options.animateRightButtons.isTrue());
|
|
342
309
|
if (options.animateLeftButtons.hasValue())
|
|
343
|
-
|
|
344
|
-
topBar.setOverflowButtonColor(options.rightButtonColor.get(Color.BLACK));
|
|
345
|
-
}
|
|
310
|
+
topBarController.animateLeftButtons(options.animateLeftButtons.isTrue());
|
|
346
311
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
forEach(buttons, b -> result.put(b.instanceId, getOrDefault(currentButtons, b.instanceId, () -> createButtonController(b))));
|
|
351
|
-
return new ArrayList<>(result.values());
|
|
352
|
-
}
|
|
312
|
+
applyRightButtonsOptions(options, child);
|
|
313
|
+
|
|
314
|
+
applyLeftButtonsOptions(options, child);
|
|
353
315
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
for (ButtonOptions b : buttons) {
|
|
357
|
-
result.add(take(first(perform(currentButtons, null, Map::values), button -> button.getButton().equals(b)), createButtonController(b)));
|
|
316
|
+
if (options.buttons.back.visible.isTrue() && !options.buttons.hasLeftButtons()) {
|
|
317
|
+
topBarController.setBackButton(createButtonController(options.buttons.back));
|
|
358
318
|
}
|
|
359
|
-
|
|
319
|
+
|
|
320
|
+
topBar.setOverflowButtonColor(options.rightButtonColor.get(Color.BLACK));
|
|
360
321
|
}
|
|
361
322
|
|
|
362
323
|
private ButtonController createButtonController(ButtonOptions button) {
|
|
@@ -404,7 +365,6 @@ public class StackPresenter {
|
|
|
404
365
|
perform(bottomTabsController, null, btc -> btc.getSetStackRootAnimation(appearingOptions))
|
|
405
366
|
);
|
|
406
367
|
}
|
|
407
|
-
|
|
408
368
|
public void mergeChildOptions(Options toMerge, Options resolvedOptions, StackController stack, ViewController<?> child) {
|
|
409
369
|
TopBarOptions topBar = toMerge.copy().topBar.mergeWithDefault(resolvedOptions.topBar).mergeWithDefault(defaultOptions.topBar);
|
|
410
370
|
mergeOrientation(toMerge.layout.orientation);
|
|
@@ -419,8 +379,13 @@ public class StackPresenter {
|
|
|
419
379
|
}
|
|
420
380
|
|
|
421
381
|
private void mergeButtons(TopBarOptions options, TopBarOptions optionsToMerge, View child, StackController stack) {
|
|
422
|
-
|
|
423
|
-
|
|
382
|
+
if (optionsToMerge.animateRightButtons.hasValue())
|
|
383
|
+
topBarController.animateRightButtons(optionsToMerge.animateRightButtons.isTrue());
|
|
384
|
+
if (optionsToMerge.animateLeftButtons.hasValue())
|
|
385
|
+
topBarController.animateLeftButtons(optionsToMerge.animateLeftButtons.isTrue());
|
|
386
|
+
|
|
387
|
+
mergeRightButtonsOptions(options, optionsToMerge.buttons, child);
|
|
388
|
+
mergeLeftButtonsOptions(options, optionsToMerge.buttons, child);
|
|
424
389
|
mergeLeftButtonsColor(child, optionsToMerge.leftButtonColor, optionsToMerge.leftButtonDisabledColor);
|
|
425
390
|
mergeRightButtonsColor(child, optionsToMerge.rightButtonColor, optionsToMerge.rightButtonDisabledColor);
|
|
426
391
|
mergeBackButton(optionsToMerge.buttons, stack);
|
|
@@ -428,7 +393,7 @@ public class StackPresenter {
|
|
|
428
393
|
|
|
429
394
|
private void mergeLeftButtonsColor(View child, ThemeColour color, ThemeColour disabledColor) {
|
|
430
395
|
if (color.hasValue() || disabledColor.hasValue()) {
|
|
431
|
-
Map<String, ButtonController> stringButtonControllerMap =
|
|
396
|
+
Map<String, ButtonController> stringButtonControllerMap = leftButtonControllers.get(child);
|
|
432
397
|
if (stringButtonControllerMap != null) {
|
|
433
398
|
forEach(stringButtonControllerMap.values(), (btnController) -> {
|
|
434
399
|
if (color.hasValue()) {
|
|
@@ -444,7 +409,7 @@ public class StackPresenter {
|
|
|
444
409
|
|
|
445
410
|
private void mergeRightButtonsColor(View child, ThemeColour color, ThemeColour disabledColor) {
|
|
446
411
|
if (color.hasValue() || disabledColor.hasValue()) {
|
|
447
|
-
Map<String, ButtonController> stringButtonControllerMap =
|
|
412
|
+
Map<String, ButtonController> stringButtonControllerMap = rightButtonControllers.get(child);
|
|
448
413
|
if (stringButtonControllerMap != null) {
|
|
449
414
|
forEach(stringButtonControllerMap.values(), (btnController) -> {
|
|
450
415
|
if (color.hasValue()) {
|
|
@@ -458,40 +423,65 @@ public class StackPresenter {
|
|
|
458
423
|
}
|
|
459
424
|
}
|
|
460
425
|
|
|
461
|
-
private void
|
|
462
|
-
if (buttons.
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
426
|
+
private void applyLeftButtonsOptions(TopBarOptions options, ViewController<?> child) {
|
|
427
|
+
if (options.buttons.left != null) {
|
|
428
|
+
List<ButtonOptions> leftButtons = mergeButtonsWithColor(options.buttons.left,
|
|
429
|
+
options.leftButtonColor
|
|
430
|
+
, options.leftButtonDisabledColor);
|
|
431
|
+
final ViewGroup childView = child.getView();
|
|
432
|
+
final Map<String, ButtonController> btnControllers = getOrCreateButtonControllerMap(childView, leftButtonControllers);
|
|
433
|
+
topBarController.applyLeftButtonsOptions(btnControllers, leftButtons, this::createButtonController);
|
|
434
|
+
} else {
|
|
435
|
+
topBarController.clearLeftButtons();
|
|
436
|
+
}
|
|
437
|
+
}
|
|
467
438
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
439
|
+
private void applyRightButtonsOptions(TopBarOptions options, ViewController<?> child) {
|
|
440
|
+
if (options.buttons.right != null) {
|
|
441
|
+
List<ButtonOptions> rightButtons = mergeButtonsWithColor(options.buttons.right,
|
|
442
|
+
options.rightButtonColor
|
|
443
|
+
, options.rightButtonDisabledColor);
|
|
444
|
+
final ViewGroup childView = child.getView();
|
|
445
|
+
final Map<String, ButtonController> btnControllers = getOrCreateButtonControllerMap(childView, rightButtonControllers);
|
|
446
|
+
topBarController.applyRightButtonsOptions(btnControllers, rightButtons, this::createButtonController);
|
|
447
|
+
} else {
|
|
448
|
+
topBarController.clearRightButtons();
|
|
472
449
|
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
private void mergeRightButtonsOptions(TopBarOptions options, TopBarButtons buttons, View child) {
|
|
453
|
+
if (buttons.right == null) return;
|
|
454
|
+
List<ButtonOptions> rightButtons = mergeButtonsWithColor(buttons.right, options.rightButtonColor,
|
|
455
|
+
options.rightButtonDisabledColor);
|
|
456
|
+
final Map<String, ButtonController> btnControllers = getOrCreateButtonControllerMap(child, rightButtonControllers);
|
|
457
|
+
topBarController.mergeRightButtonsOptions(btnControllers, rightButtons, this::createButtonController);
|
|
473
458
|
if (options.rightButtonColor.hasValue()) topBar.setOverflowButtonColor(options.rightButtonColor.get());
|
|
474
459
|
}
|
|
475
460
|
|
|
476
|
-
private void
|
|
461
|
+
private void mergeLeftButtonsOptions(TopBarOptions options, TopBarButtons buttons, View child) {
|
|
477
462
|
if (buttons.left == null) return;
|
|
478
|
-
List<ButtonOptions> leftButtons = mergeButtonsWithColor(buttons.left, options.leftButtonColor,
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
if (
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
463
|
+
List<ButtonOptions> leftButtons = mergeButtonsWithColor(buttons.left, options.leftButtonColor,
|
|
464
|
+
options.leftButtonDisabledColor);
|
|
465
|
+
final Map<String, ButtonController> btnControllers = getOrCreateButtonControllerMap(child, leftButtonControllers);
|
|
466
|
+
topBarController.mergeLeftButtonsOptions(btnControllers, leftButtons, this::createButtonController);
|
|
467
|
+
if (options.leftButtonColor.hasValue()) topBar.setOverflowButtonColor(options.leftButtonColor.get());
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
@NonNull
|
|
471
|
+
private Map<String, ButtonController> getOrCreateButtonControllerMap(View child, Map<View, Map<String, ButtonController>> buttonControllers) {
|
|
472
|
+
final Map<String, ButtonController> controllerMap = buttonControllers.get(child);
|
|
473
|
+
final Map<String, ButtonController> btnControllers = controllerMap != null ? controllerMap : new HashMap<>();
|
|
474
|
+
if (controllerMap == null)
|
|
475
|
+
buttonControllers.put(child, btnControllers);
|
|
476
|
+
return btnControllers;
|
|
487
477
|
}
|
|
488
478
|
|
|
489
479
|
private void mergeBackButton(TopBarButtons buttons, StackController stack) {
|
|
490
480
|
if (buttons.back.hasValue() && isNullOrEmpty(buttons.left)) {
|
|
491
481
|
if (buttons.back.visible.isFalse()) {
|
|
492
|
-
|
|
482
|
+
topBarController.clearBackButton();
|
|
493
483
|
} else if (stack.size() > 1) {
|
|
494
|
-
|
|
484
|
+
topBarController.setBackButton(createButtonController(buttons.back));
|
|
495
485
|
}
|
|
496
486
|
}
|
|
497
487
|
}
|
|
@@ -508,22 +498,21 @@ public class StackPresenter {
|
|
|
508
498
|
return result;
|
|
509
499
|
}
|
|
510
500
|
|
|
511
|
-
private void mergeTopBarOptions(TopBarOptions resolveOptions, Options
|
|
512
|
-
|
|
501
|
+
private void mergeTopBarOptions(TopBarOptions resolveOptions, Options toMerge, StackController stack,
|
|
502
|
+
ViewController<?> child) {
|
|
503
|
+
TopBarOptions topBarOptions = toMerge.topBar;
|
|
513
504
|
final View component = child.getView();
|
|
514
|
-
if (
|
|
505
|
+
if (toMerge.layout.direction.hasValue()) topBar.setLayoutDirection(toMerge.layout.direction);
|
|
515
506
|
if (topBarOptions.height.hasValue()) topBar.setHeight(topBarOptions.height.get());
|
|
516
507
|
if (topBarOptions.elevation.hasValue()) topBar.setElevation(topBarOptions.elevation.get());
|
|
517
508
|
if (topBarOptions.topMargin.hasValue() && topBar.getLayoutParams() instanceof MarginLayoutParams) {
|
|
518
509
|
((MarginLayoutParams) topBar.getLayoutParams()).topMargin = UiUtils.dpToPx(activity, topBarOptions.topMargin.get());
|
|
519
510
|
}
|
|
520
|
-
|
|
511
|
+
Options childOptions = stack.resolveChildOptions(child).mergeWith(toMerge).withDefaultOptions(defaultOptions);
|
|
512
|
+
mergeStatusBarDrawBehindOptions(resolveOptions, childOptions);
|
|
521
513
|
if (topBarOptions.title.height.hasValue()) topBar.setTitleHeight(topBarOptions.title.height.get());
|
|
522
514
|
if (topBarOptions.title.topMargin.hasValue()) topBar.setTitleTopMargin(topBarOptions.title.topMargin.get());
|
|
523
|
-
|
|
524
|
-
topBar.animateLeftButtons(topBarOptions.animateLeftButtons.isTrue());
|
|
525
|
-
if (topBarOptions.animateRightButtons.hasValue())
|
|
526
|
-
topBar.animateRightButtons(topBarOptions.animateRightButtons.isTrue());
|
|
515
|
+
|
|
527
516
|
if (topBarOptions.title.component.hasValue()) {
|
|
528
517
|
TitleBarReactViewController controller = findTitleComponent(topBarOptions.title.component);
|
|
529
518
|
if (controller == null) {
|
|
@@ -646,8 +635,8 @@ public class StackPresenter {
|
|
|
646
635
|
|
|
647
636
|
@RestrictTo(RestrictTo.Scope.TESTS)
|
|
648
637
|
public void setComponentsButtonController(View child, ButtonController rightController, ButtonController leftController) {
|
|
649
|
-
forEach(
|
|
650
|
-
forEach(
|
|
638
|
+
forEach(leftButtonControllers.get(child).keySet(), (key) -> leftButtonControllers.get(child).put(key, leftController));
|
|
639
|
+
forEach(rightButtonControllers.get(child).keySet(), (key) -> rightButtonControllers.get(child).put(key, rightController));
|
|
651
640
|
}
|
|
652
641
|
|
|
653
642
|
|
|
@@ -657,11 +646,11 @@ public class StackPresenter {
|
|
|
657
646
|
}
|
|
658
647
|
|
|
659
648
|
private List<ButtonController> getRightButtons(View child) {
|
|
660
|
-
return
|
|
649
|
+
return rightButtonControllers.containsKey(child) ? new ArrayList<>(rightButtonControllers.get(child).values()) : null;
|
|
661
650
|
}
|
|
662
651
|
|
|
663
652
|
private List<ButtonController> getLeftButtons(View child) {
|
|
664
|
-
return
|
|
653
|
+
return leftButtonControllers.containsKey(child) ? new ArrayList<>(leftButtonControllers.get(child).values()) : null;
|
|
665
654
|
}
|
|
666
655
|
|
|
667
656
|
private void applyStatusBarInsets(StackController stack, ViewController<?> child) {
|
|
@@ -678,7 +667,7 @@ public class StackPresenter {
|
|
|
678
667
|
private int getTopBarTopMargin(StackController stack, ViewController<?> child) {
|
|
679
668
|
Options withDefault = stack.resolveChildOptions(child).withDefaultOptions(defaultOptions);
|
|
680
669
|
int topMargin = UiUtils.dpToPx(activity, withDefault.topBar.topMargin.get(0));
|
|
681
|
-
int statusBarInset = withDefault.statusBar.visible.isTrueOrUndefined() && !withDefault.statusBar.drawBehind.isTrue() ?
|
|
670
|
+
int statusBarInset = withDefault.statusBar.visible.isTrueOrUndefined() && !withDefault.statusBar.drawBehind.isTrue() ? SystemUiUtils.getStatusBarHeight(child.getActivity()) : 0;
|
|
682
671
|
return topMargin + statusBarInset;
|
|
683
672
|
}
|
|
684
673
|
|