react-native-navigation 7.24.3 → 7.25.0-snapshot.543
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/lib/android/app/build.gradle +12 -9
- package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java +7 -9
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java +4 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/Options.java +2 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/OverlayOptions.java +3 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/OverlayOptions.kt +31 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutInsets.kt +44 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutOptions.kt +71 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/JSONParser.java +0 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/PrimitiveExt.kt +9 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +2 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +31 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +6 -13
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +32 -10
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java +4 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java +25 -6
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManager.kt +104 -33
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java +86 -9
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java +12 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +18 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +51 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonController.kt +7 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +23 -7
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/RootPresenter.java +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java +24 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabs.java +29 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt +1 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java +10 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/component/ComponentLayout.java +10 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/overlay/AttachedOverlayContainer.kt +69 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/overlay/ViewTooltip.java +921 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/sidemenu/SideMenuRoot.java +9 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/StackLayout.java +14 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/TopBar.java +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsStyleHelper.java +0 -1
- package/lib/dist/src/interfaces/Options.d.ts +34 -0
- package/lib/ios/RNNBasePresenter.m +17 -0
- package/lib/ios/RNNBottomTabsController.m +1 -0
- package/lib/ios/RNNComponentViewController.m +5 -0
- package/lib/ios/RNNLayoutOptions.h +2 -1
- package/lib/ios/RNNLayoutOptions.m +4 -0
- package/lib/ios/RNNStackPresenter.m +1 -0
- package/lib/src/interfaces/Options.ts +38 -0
- package/package.json +3 -1
- package/.buildkite/pipeline.yml +0 -59
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java +0 -48
- package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +0 -178
- package/lib/android/app/src/test/java/com/reactnativenavigation/EnvironmentTest.java +0 -43
- package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +0 -23
- package/lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java +0 -35
- package/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +0 -62
- package/lib/android/app/src/test/java/com/reactnativenavigation/fakes/IconResolverFake.kt +0 -8
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/BackDrawable.java +0 -30
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +0 -49
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +0 -18
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleComponentViewController.java +0 -15
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleOverlay.java +0 -54
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleViewController.java +0 -113
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +0 -79
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentViewCreator.java +0 -18
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactView.java +0 -71
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarButtonCreatorMock.java +0 -34
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarReactViewCreatorMock.java +0 -20
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TopBarBackgroundViewCreatorMock.java +0 -20
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +0 -21
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/LayoutNodeParserTest.java +0 -51
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/OptionsTest.java +0 -315
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/OrientationOptionsTest.java +0 -81
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/TopBarButtonsTest.kt +0 -95
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +0 -122
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/BoolParserTest.java +0 -28
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +0 -50
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/JSONParserTest.java +0 -64
- package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +0 -56
- package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +0 -59
- package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/SideMenuPresenterTest.java +0 -35
- package/lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationModuleTest.java +0 -102
- package/lib/android/app/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java +0 -24
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/AnimationHelper.kt +0 -33
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonPresenterTest.java +0 -241
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonSpanTest.java +0 -57
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/CompatUtilsTest.java +0 -17
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +0 -78
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +0 -47
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/NativeCommandListenerTest.java +0 -60
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/OptionHelper.java +0 -16
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ReflectionUtilsTest.java +0 -26
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/StringUtilsTest.java +0 -19
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/SystemUiUtilsTest.kt +0 -27
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleAndButtonsMeasurerTest.kt +0 -357
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleBarHelper.java +0 -54
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +0 -29
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +0 -22
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ViewHelper.java +0 -9
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/OptionsApplyingTest.java +0 -149
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +0 -206
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +0 -62
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +0 -589
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +0 -173
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AfterInitialTabTest.java +0 -38
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +0 -86
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTabTest.java +0 -31
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/TogetherTest.java +0 -20
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/button/NavigationIconResolverTest.java +0 -78
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +0 -80
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +0 -56
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +0 -216
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewControllerTest.java +0 -97
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/FragmentCreatorMock.java +0 -34
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/SomeFragment.java +0 -8
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +0 -33
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorMock.java +0 -40
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +0 -213
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +0 -319
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +0 -367
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +0 -898
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +0 -254
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +0 -108
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +0 -299
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +0 -446
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +0 -77
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/FloatingActionButtonTest.java +0 -154
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/IdStackTest.java +0 -114
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +0 -241
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +0 -1165
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +0 -1081
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarButtonControllerTest.java +0 -61
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarReactViewControllerTest.java +0 -43
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarButtonControllerTest.java +0 -120
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +0 -432
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +0 -249
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +0 -337
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java +0 -68
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/OverlayTouchDelegateTest.java +0 -60
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +0 -477
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/TopBarTest.java +0 -82
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +0 -109
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/DefaultViewAnimatorCreatorFake.kt +0 -36
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +0 -101
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +0 -40
- package/lib/android/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +0 -1
|
@@ -3,74 +3,145 @@ package com.reactnativenavigation.viewcontrollers.overlay
|
|
|
3
3
|
import android.content.res.Configuration
|
|
4
4
|
import android.view.View
|
|
5
5
|
import android.view.ViewGroup
|
|
6
|
+
import com.reactnativenavigation.options.OverlayAttachOptions
|
|
7
|
+
import com.reactnativenavigation.options.OverlayOptions
|
|
6
8
|
import com.reactnativenavigation.react.CommandListener
|
|
7
9
|
import com.reactnativenavigation.utils.CoordinatorLayoutUtils
|
|
10
|
+
import com.reactnativenavigation.utils.removeFromParent
|
|
11
|
+
import com.reactnativenavigation.viewcontrollers.component.ComponentViewController
|
|
8
12
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
|
|
9
13
|
import com.reactnativenavigation.views.BehaviourDelegate
|
|
14
|
+
import com.reactnativenavigation.views.overlay.ViewTooltip
|
|
15
|
+
|
|
16
|
+
private fun View.closeNow() {
|
|
17
|
+
if (this is ViewTooltip.TooltipView) {
|
|
18
|
+
this.closeNow()
|
|
19
|
+
} else {
|
|
20
|
+
removeFromParent()
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private class OverlayEntry(
|
|
25
|
+
var overlayView: View,
|
|
26
|
+
val viewController: ViewController<*>
|
|
27
|
+
)
|
|
10
28
|
|
|
11
29
|
class OverlayManager {
|
|
12
|
-
private val overlayRegistry = mutableMapOf<String,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
30
|
+
private val overlayRegistry = mutableMapOf<String, OverlayEntry>()
|
|
31
|
+
var mainOverlayContainer: ViewGroup? = null
|
|
32
|
+
var findController: (String) -> ViewController<*>? = { null }
|
|
33
|
+
var findAnchorView: (OverlayAttachOptions) -> View? = { null }
|
|
34
|
+
|
|
35
|
+
fun show(overlayController: ViewController<*>, overlayOptions: OverlayOptions, listener: CommandListener) {
|
|
36
|
+
val overlayAttachOptions = overlayOptions.overlayAttachOptions
|
|
37
|
+
if (overlayAttachOptions.anchorId.hasValue()) {
|
|
38
|
+
anchorOverlayInParent(overlayAttachOptions, overlayController, listener)
|
|
39
|
+
} else {
|
|
40
|
+
attachOverlayToParent(overlayAttachOptions, overlayController, listener)
|
|
19
41
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private fun attachOverlayToParent(
|
|
45
|
+
overlayAttachOptions: OverlayAttachOptions,
|
|
46
|
+
overlayController: ViewController<*>,
|
|
47
|
+
listener: CommandListener
|
|
48
|
+
) {
|
|
49
|
+
val parent = if (overlayAttachOptions.layoutId.hasValue()) {
|
|
50
|
+
findController(overlayAttachOptions.layoutId.get())?.view
|
|
51
|
+
} else mainOverlayContainer
|
|
52
|
+
|
|
53
|
+
parent?.let {
|
|
54
|
+
it.visibility = View.VISIBLE
|
|
55
|
+
registerOverlay(overlayController.view,overlayController, listener)
|
|
56
|
+
it.addView(
|
|
57
|
+
overlayController.view,
|
|
58
|
+
CoordinatorLayoutUtils.matchParentWithBehaviour(BehaviourDelegate(overlayController))
|
|
59
|
+
)
|
|
60
|
+
} ?: listener.onError("Cannot find layout with id " + overlayAttachOptions.layoutId)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private fun anchorOverlayInParent(
|
|
64
|
+
overlayAttachOptions: OverlayAttachOptions,
|
|
65
|
+
overlayController: ViewController<*>,
|
|
66
|
+
listener: CommandListener
|
|
67
|
+
) {
|
|
68
|
+
val hostController = findController(overlayAttachOptions.layoutId.get())
|
|
69
|
+
if (hostController != null) {
|
|
70
|
+
val anchorView: View? = findAnchorView(overlayAttachOptions)
|
|
71
|
+
if (anchorView != null) {
|
|
72
|
+
if(overlayController is ComponentViewController){
|
|
73
|
+
overlayController.ignoreInsets(true)
|
|
74
|
+
}
|
|
75
|
+
val anchoredView =
|
|
76
|
+
hostController.showAnchoredOverlay(anchorView, overlayAttachOptions, overlayController)
|
|
77
|
+
anchoredView?.let {
|
|
78
|
+
registerOverlay(it,overlayController, listener)
|
|
79
|
+
} ?: listener.onError("Parent could not create anchored view, it could be null parent")
|
|
80
|
+
} else {
|
|
81
|
+
listener.onError("Cannot find anchor view with id " + overlayAttachOptions.anchorId)
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
listener.onError("Cannot find layout with id " + overlayAttachOptions.layoutId)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private fun registerOverlay(
|
|
89
|
+
view:View,
|
|
90
|
+
viewController: ViewController<*>,
|
|
91
|
+
listener: CommandListener
|
|
92
|
+
) {
|
|
93
|
+
overlayRegistry[viewController.id] = OverlayEntry(view, viewController)
|
|
94
|
+
viewController.onViewDidAppear()
|
|
95
|
+
listener.onSuccess(viewController.id)
|
|
24
96
|
}
|
|
25
97
|
|
|
26
98
|
fun onConfigurationChanged(configuration: Configuration?) {
|
|
27
|
-
overlayRegistry.values.forEach {
|
|
99
|
+
overlayRegistry.values.forEach { entry -> entry.viewController.onConfigurationChanged(configuration) }
|
|
28
100
|
}
|
|
29
101
|
|
|
30
|
-
fun dismiss(
|
|
102
|
+
fun dismiss(componentId: String, listener: CommandListener) {
|
|
31
103
|
val overlay = overlayRegistry.remove(componentId)
|
|
32
104
|
if (overlay == null) {
|
|
33
105
|
listener.onError("Could not dismiss Overlay. Overlay with id $componentId was not found.")
|
|
34
106
|
} else {
|
|
35
|
-
destroyOverlay(
|
|
107
|
+
destroyOverlay(overlay)
|
|
36
108
|
listener.onSuccess(componentId)
|
|
37
109
|
}
|
|
38
110
|
}
|
|
39
111
|
|
|
40
|
-
fun dismissAll(
|
|
41
|
-
destroy(
|
|
42
|
-
listener.onSuccess("")
|
|
112
|
+
fun dismissAll() {
|
|
113
|
+
destroy()
|
|
43
114
|
}
|
|
44
115
|
|
|
45
|
-
fun destroy(
|
|
46
|
-
val
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
116
|
+
fun destroy() {
|
|
117
|
+
val entries = overlayRegistry.entries
|
|
118
|
+
while (entries.isNotEmpty()) {
|
|
119
|
+
val first = entries.first()
|
|
120
|
+
val attachOverlayEntry = first.value
|
|
121
|
+
attachOverlayEntry.overlayView.closeNow()
|
|
122
|
+
attachOverlayEntry.viewController.destroy()
|
|
123
|
+
overlayRegistry.remove(first.key)
|
|
52
124
|
}
|
|
125
|
+
mainOverlayContainer?.visibility = View.GONE
|
|
53
126
|
}
|
|
54
127
|
|
|
55
128
|
fun size() = overlayRegistry.size
|
|
56
129
|
|
|
57
130
|
fun findControllerById(id: String?): ViewController<*>? {
|
|
58
|
-
return overlayRegistry[id]
|
|
131
|
+
return overlayRegistry[id]?.viewController
|
|
59
132
|
}
|
|
60
133
|
|
|
61
|
-
private fun destroyOverlay(
|
|
62
|
-
overlay
|
|
63
|
-
|
|
134
|
+
private fun destroyOverlay(overlay: OverlayEntry?) {
|
|
135
|
+
overlay?.overlayView?.closeNow()
|
|
136
|
+
overlay?.viewController?.destroy()
|
|
137
|
+
if (overlayRegistry.isEmpty()) mainOverlayContainer?.visibility = View.GONE
|
|
64
138
|
}
|
|
65
139
|
|
|
66
|
-
private val isEmpty: Boolean
|
|
67
|
-
get() = size() == 0
|
|
68
|
-
|
|
69
140
|
fun onHostPause() {
|
|
70
|
-
overlayRegistry.values.forEach(
|
|
141
|
+
overlayRegistry.values.forEach { it.viewController.onViewDisappear() }
|
|
71
142
|
}
|
|
72
143
|
|
|
73
144
|
fun onHostResume() {
|
|
74
|
-
overlayRegistry.values.forEach(
|
|
145
|
+
overlayRegistry.values.forEach { it.viewController.onViewDidAppear() }
|
|
75
146
|
}
|
|
76
147
|
}
|
|
@@ -1,30 +1,34 @@
|
|
|
1
1
|
package com.reactnativenavigation.viewcontrollers.parent;
|
|
2
2
|
|
|
3
|
+
import static com.reactnativenavigation.utils.CollectionUtils.forEach;
|
|
4
|
+
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
5
|
+
|
|
3
6
|
import android.app.Activity;
|
|
4
7
|
import android.content.res.Configuration;
|
|
5
8
|
import android.view.View;
|
|
6
9
|
import android.view.ViewGroup;
|
|
7
10
|
|
|
11
|
+
import androidx.annotation.CallSuper;
|
|
12
|
+
import androidx.annotation.CheckResult;
|
|
13
|
+
import androidx.annotation.NonNull;
|
|
14
|
+
import androidx.annotation.Nullable;
|
|
15
|
+
import androidx.viewpager.widget.ViewPager;
|
|
16
|
+
|
|
8
17
|
import com.reactnativenavigation.options.Options;
|
|
18
|
+
import com.reactnativenavigation.options.OverlayAttachOptions;
|
|
9
19
|
import com.reactnativenavigation.options.params.Bool;
|
|
10
20
|
import com.reactnativenavigation.utils.CollectionUtils;
|
|
11
21
|
import com.reactnativenavigation.viewcontrollers.bottomtabs.BottomTabsController;
|
|
12
22
|
import com.reactnativenavigation.viewcontrollers.child.ChildController;
|
|
13
23
|
import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
|
|
24
|
+
import com.reactnativenavigation.viewcontrollers.stack.StackController;
|
|
14
25
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
15
26
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
16
27
|
import com.reactnativenavigation.views.component.Component;
|
|
17
28
|
|
|
18
29
|
import java.util.Collection;
|
|
19
|
-
|
|
20
|
-
import
|
|
21
|
-
import androidx.annotation.CheckResult;
|
|
22
|
-
import androidx.annotation.NonNull;
|
|
23
|
-
import androidx.annotation.Nullable;
|
|
24
|
-
import androidx.viewpager.widget.ViewPager;
|
|
25
|
-
|
|
26
|
-
import static com.reactnativenavigation.utils.CollectionUtils.*;
|
|
27
|
-
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
30
|
+
import java.util.Collections;
|
|
31
|
+
import java.util.List;
|
|
28
32
|
|
|
29
33
|
public abstract class ParentController<T extends ViewGroup> extends ChildController<T> {
|
|
30
34
|
|
|
@@ -88,6 +92,10 @@ public abstract class ParentController<T extends ViewGroup> extends ChildControl
|
|
|
88
92
|
|
|
89
93
|
public abstract ViewController<?> getCurrentChild();
|
|
90
94
|
|
|
95
|
+
public List<ViewController<?>> getChildren(){
|
|
96
|
+
return Collections.emptyList();
|
|
97
|
+
}
|
|
98
|
+
|
|
91
99
|
@NonNull
|
|
92
100
|
@Override
|
|
93
101
|
public abstract T createView();
|
|
@@ -103,6 +111,51 @@ public abstract class ParentController<T extends ViewGroup> extends ChildControl
|
|
|
103
111
|
return perform(getParentController(), null, ParentController::getBottomTabsController);
|
|
104
112
|
}
|
|
105
113
|
|
|
114
|
+
@Override
|
|
115
|
+
protected View findTooltipAnchorView(OverlayAttachOptions options) {
|
|
116
|
+
final String id = options.anchorId.get();
|
|
117
|
+
View found = null;
|
|
118
|
+
final View topBarView = findTopBarViewById(id);
|
|
119
|
+
if (topBarView != null) {
|
|
120
|
+
found = topBarView;
|
|
121
|
+
} else {
|
|
122
|
+
final View bottomTabViewById = findBottomTabViewById(id);
|
|
123
|
+
if (bottomTabViewById != null) {
|
|
124
|
+
found = bottomTabViewById;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return found;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@Nullable
|
|
131
|
+
protected View findTopBarViewById(String id) {
|
|
132
|
+
final View[] found = {null};
|
|
133
|
+
lookup((controller) -> {
|
|
134
|
+
if (controller instanceof StackController) {
|
|
135
|
+
final StackController stackController = (StackController) controller;
|
|
136
|
+
final View topBarViewById = stackController.presenter.findTopBarViewById(id);
|
|
137
|
+
found[0] = topBarViewById;
|
|
138
|
+
return topBarViewById != null;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
});
|
|
142
|
+
return found[0];
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@Nullable
|
|
146
|
+
protected View findBottomTabViewById(@NonNull String id) {
|
|
147
|
+
final View[] found = {null};
|
|
148
|
+
lookup((controller) -> {
|
|
149
|
+
if (controller instanceof BottomTabsController) {
|
|
150
|
+
BottomTabsController bottomTabsController = (BottomTabsController) controller;
|
|
151
|
+
found[0] = bottomTabsController.getTabViewByTag(id);
|
|
152
|
+
return found[0] != null;
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
});
|
|
156
|
+
return found[0];
|
|
157
|
+
}
|
|
158
|
+
|
|
106
159
|
@Nullable
|
|
107
160
|
@Override
|
|
108
161
|
public ViewController<?> findController(final String id) {
|
|
@@ -204,6 +257,30 @@ public abstract class ParentController<T extends ViewGroup> extends ChildControl
|
|
|
204
257
|
return getCurrentChild().getCurrentComponentName();
|
|
205
258
|
}
|
|
206
259
|
|
|
260
|
+
protected interface LookupPredicate<T> {
|
|
261
|
+
boolean test(T t);
|
|
262
|
+
}
|
|
263
|
+
public ViewController<?> lookup(LookupPredicate<ViewController<?>> predicate){
|
|
264
|
+
if(predicate.test(this)){
|
|
265
|
+
return this;
|
|
266
|
+
}else{
|
|
267
|
+
final List<ViewController<?>> children = getChildren();
|
|
268
|
+
for(ViewController<?> child : children){
|
|
269
|
+
if(child instanceof ParentController){
|
|
270
|
+
ViewController<?> result= ((ParentController<?>) child).lookup(predicate);
|
|
271
|
+
if(result!=null){
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
}else{
|
|
275
|
+
if(predicate.test(child)){
|
|
276
|
+
return child;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
207
284
|
public void onConfigurationChanged(Configuration newConfig) {
|
|
208
285
|
super.onConfigurationChanged(newConfig);
|
|
209
286
|
Collection<? extends ViewController<?>> childControllers = getChildControllers();
|
|
@@ -3,8 +3,10 @@ package com.reactnativenavigation.viewcontrollers.sidemenu;
|
|
|
3
3
|
import android.app.Activity;
|
|
4
4
|
import android.view.Gravity;
|
|
5
5
|
import android.view.View;
|
|
6
|
+
import android.view.ViewGroup;
|
|
6
7
|
|
|
7
8
|
import com.reactnativenavigation.options.Options;
|
|
9
|
+
import com.reactnativenavigation.options.OverlayAttachOptions;
|
|
8
10
|
import com.reactnativenavigation.options.SideMenuRootOptions;
|
|
9
11
|
import com.reactnativenavigation.options.params.Bool;
|
|
10
12
|
import com.reactnativenavigation.react.CommandListener;
|
|
@@ -12,6 +14,7 @@ import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
|
|
|
12
14
|
import com.reactnativenavigation.viewcontrollers.parent.ParentController;
|
|
13
15
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
14
16
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
17
|
+
import com.reactnativenavigation.views.overlay.ViewTooltip;
|
|
15
18
|
import com.reactnativenavigation.views.sidemenu.SideMenu;
|
|
16
19
|
import com.reactnativenavigation.views.sidemenu.SideMenuRoot;
|
|
17
20
|
|
|
@@ -65,6 +68,15 @@ public class SideMenuController extends ParentController<SideMenuRoot> implement
|
|
|
65
68
|
return root;
|
|
66
69
|
}
|
|
67
70
|
|
|
71
|
+
@Override
|
|
72
|
+
public ViewTooltip.TooltipView showAnchoredOverlay(@NonNull View anchorView, @NonNull OverlayAttachOptions overlayAttachOptions, @NonNull ViewController<?> overlayViewController) {
|
|
73
|
+
if (view != null) {
|
|
74
|
+
return view.getAttachedOverlayContainer().addAnchoredView(anchorView, overlayViewController.getView(),
|
|
75
|
+
overlayAttachOptions.gravity.get());
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
68
80
|
@Override
|
|
69
81
|
public void sendOnNavigationButtonPressed(String buttonId) {
|
|
70
82
|
center.sendOnNavigationButtonPressed(buttonId);
|
|
@@ -8,6 +8,7 @@ import android.view.ViewGroup;
|
|
|
8
8
|
import com.facebook.react.ReactRootView;
|
|
9
9
|
import com.reactnativenavigation.options.ButtonOptions;
|
|
10
10
|
import com.reactnativenavigation.options.Options;
|
|
11
|
+
import com.reactnativenavigation.options.OverlayAttachOptions;
|
|
11
12
|
import com.reactnativenavigation.options.StackAnimationOptions;
|
|
12
13
|
import com.reactnativenavigation.react.CommandListener;
|
|
13
14
|
import com.reactnativenavigation.react.CommandListenerAdapter;
|
|
@@ -19,6 +20,7 @@ import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarController;
|
|
|
19
20
|
import com.reactnativenavigation.viewcontrollers.stack.topbar.button.BackButtonHelper;
|
|
20
21
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
21
22
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
23
|
+
import com.reactnativenavigation.views.overlay.ViewTooltip;
|
|
22
24
|
import com.reactnativenavigation.views.component.Component;
|
|
23
25
|
import com.reactnativenavigation.views.stack.StackBehaviour;
|
|
24
26
|
import com.reactnativenavigation.views.stack.StackLayout;
|
|
@@ -32,6 +34,7 @@ import java.util.Iterator;
|
|
|
32
34
|
import java.util.List;
|
|
33
35
|
|
|
34
36
|
import androidx.annotation.NonNull;
|
|
37
|
+
import androidx.annotation.Nullable;
|
|
35
38
|
import androidx.annotation.RestrictTo;
|
|
36
39
|
import androidx.annotation.Size;
|
|
37
40
|
import androidx.annotation.VisibleForTesting;
|
|
@@ -51,7 +54,7 @@ public class StackController extends ParentController<StackLayout> {
|
|
|
51
54
|
private final EventEmitter eventEmitter;
|
|
52
55
|
private final TopBarController topBarController;
|
|
53
56
|
private final BackButtonHelper backButtonHelper;
|
|
54
|
-
|
|
57
|
+
public final StackPresenter presenter;
|
|
55
58
|
private final FabPresenter fabPresenter;
|
|
56
59
|
|
|
57
60
|
public StackController(Activity activity, List<ViewController<?>> children, ChildControllersRegistry childRegistry, EventEmitter eventEmitter, TopBarController topBarController, StackAnimator animator, String id, Options initialOptions, BackButtonHelper backButtonHelper, StackPresenter stackPresenter, Presenter presenter, FabPresenter fabPresenter) {
|
|
@@ -478,6 +481,20 @@ public class StackController extends ParentController<StackLayout> {
|
|
|
478
481
|
return false;
|
|
479
482
|
}
|
|
480
483
|
|
|
484
|
+
@Override
|
|
485
|
+
public ViewTooltip.TooltipView showAnchoredOverlay(@NonNull View anchorView, @NonNull OverlayAttachOptions overlayAttachOptions, @NonNull ViewController<?> overlayViewController) {
|
|
486
|
+
if(view!=null){
|
|
487
|
+
return( (StackLayout)view).getAttachedOverlayContainer().addAnchoredView(anchorView, overlayViewController.getView(),
|
|
488
|
+
overlayAttachOptions.gravity.get());
|
|
489
|
+
}
|
|
490
|
+
return null;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
@Override
|
|
494
|
+
public List<ViewController<?>> getChildren() {
|
|
495
|
+
return stack.values();
|
|
496
|
+
}
|
|
497
|
+
|
|
481
498
|
@Override
|
|
482
499
|
public int getTopInset(ViewController<?> child) {
|
|
483
500
|
return presenter.getTopInset(resolveChildOptions(child));
|
|
@@ -10,6 +10,8 @@ import static com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarContr
|
|
|
10
10
|
import android.animation.Animator;
|
|
11
11
|
import android.app.Activity;
|
|
12
12
|
import android.graphics.Color;
|
|
13
|
+
import android.util.Pair;
|
|
14
|
+
import android.view.MenuItem;
|
|
13
15
|
import android.view.View;
|
|
14
16
|
import android.view.ViewGroup;
|
|
15
17
|
import android.view.ViewGroup.LayoutParams;
|
|
@@ -49,10 +51,12 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.IReactView;
|
|
|
49
51
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
50
52
|
import com.reactnativenavigation.views.stack.topbar.TopBar;
|
|
51
53
|
import com.reactnativenavigation.views.stack.topbar.TopBarBackgroundViewCreator;
|
|
54
|
+
import com.reactnativenavigation.views.stack.topbar.titlebar.ButtonBar;
|
|
52
55
|
import com.reactnativenavigation.views.stack.topbar.titlebar.TitleBarButtonCreator;
|
|
53
56
|
import com.reactnativenavigation.views.stack.topbar.titlebar.TitleBarReactViewCreator;
|
|
54
57
|
|
|
55
58
|
import java.util.ArrayList;
|
|
59
|
+
import java.util.Collection;
|
|
56
60
|
import java.util.Collections;
|
|
57
61
|
import java.util.HashMap;
|
|
58
62
|
import java.util.List;
|
|
@@ -674,4 +678,51 @@ public class StackPresenter {
|
|
|
674
678
|
public int getTopInset(Options resolvedOptions) {
|
|
675
679
|
return resolvedOptions.withDefaultOptions(defaultOptions).topBar.isHiddenOrDrawBehind() ? 0 : topBarController.getHeight();
|
|
676
680
|
}
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
private TitleBarReactViewController findTitleById(String id){
|
|
684
|
+
final Collection<TitleBarReactViewController> values = titleControllers.values();
|
|
685
|
+
for(TitleBarReactViewController child: values){
|
|
686
|
+
if(child.getId().equals(id)){
|
|
687
|
+
return child;
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
return null;
|
|
691
|
+
}
|
|
692
|
+
private Pair<ButtonController, ButtonBar> findButtonById(String id){
|
|
693
|
+
final Collection<Map<String, ButtonController>> leftControllers = leftButtonControllers.values();
|
|
694
|
+
final Collection<Map<String, ButtonController>> rightControllers = rightButtonControllers.values();
|
|
695
|
+
for(Map<String, ButtonController> map : leftControllers){
|
|
696
|
+
if(map.containsKey(id)){
|
|
697
|
+
return Pair.create(map.get(id),topBar.getLeftButtonBar());
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
for(Map<String, ButtonController> map : rightControllers){
|
|
701
|
+
if(map.containsKey(id)){
|
|
702
|
+
return Pair.create(map.get(id),topBar.getRightButtonBar());
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
return null;
|
|
706
|
+
}
|
|
707
|
+
@Nullable
|
|
708
|
+
public View findTopBarViewById(String id) {
|
|
709
|
+
final Pair<ButtonController, ButtonBar> buttonById = findButtonById(id);
|
|
710
|
+
if(buttonById!=null){
|
|
711
|
+
final View view = buttonById.first.getNullableView();
|
|
712
|
+
if(view==null){
|
|
713
|
+
final MenuItem menuItem = buttonById.first.getMenuItem();
|
|
714
|
+
if(menuItem!=null){
|
|
715
|
+
final int order = menuItem.getOrder();
|
|
716
|
+
return buttonById.second.getChildAt(order/10);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
return view;
|
|
720
|
+
}else {
|
|
721
|
+
final TitleBarReactViewController titleById = findTitleById(id);
|
|
722
|
+
if(titleById!=null){
|
|
723
|
+
return titleById.getView();
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
return null;
|
|
727
|
+
}
|
|
677
728
|
}
|
|
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
|
|
|
4
4
|
import android.app.Activity
|
|
5
5
|
import android.view.Menu
|
|
6
6
|
import android.view.MenuItem
|
|
7
|
+
import android.view.View
|
|
7
8
|
import androidx.appcompat.widget.Toolbar
|
|
8
9
|
import com.reactnativenavigation.options.ButtonOptions
|
|
9
10
|
import com.reactnativenavigation.options.Options
|
|
@@ -22,7 +23,8 @@ open class ButtonController(activity: Activity,
|
|
|
22
23
|
private val viewCreator: TitleBarButtonCreator,
|
|
23
24
|
private val onPressListener: OnClickListener) : ViewController<TitleBarReactButtonView>(activity, button.id, YellowBoxDelegate(activity), Options(), ViewControllerOverlay(activity)), MenuItem.OnMenuItemClickListener {
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
var menuItem: MenuItem? = null
|
|
27
|
+
private set
|
|
26
28
|
|
|
27
29
|
interface OnClickListener {
|
|
28
30
|
fun onPress(button: ButtonOptions)
|
|
@@ -113,4 +115,8 @@ open class ButtonController(activity: Activity,
|
|
|
113
115
|
}
|
|
114
116
|
}
|
|
115
117
|
|
|
118
|
+
fun getNullableView(): View?{
|
|
119
|
+
return view
|
|
120
|
+
}
|
|
121
|
+
|
|
116
122
|
}
|
|
@@ -5,18 +5,17 @@ import android.graphics.Color;
|
|
|
5
5
|
import android.graphics.drawable.ColorDrawable;
|
|
6
6
|
import android.graphics.drawable.Drawable;
|
|
7
7
|
import android.graphics.drawable.LayerDrawable;
|
|
8
|
-
import android.os.Build;
|
|
9
8
|
import android.view.View;
|
|
9
|
+
import android.view.ViewGroup;
|
|
10
10
|
import android.view.ViewGroup.MarginLayoutParams;
|
|
11
11
|
import android.view.Window;
|
|
12
12
|
|
|
13
|
-
import androidx.core.content.ContextCompat;
|
|
14
|
-
|
|
15
13
|
import com.reactnativenavigation.options.NavigationBarOptions;
|
|
16
14
|
import com.reactnativenavigation.options.Options;
|
|
17
15
|
import com.reactnativenavigation.options.OrientationOptions;
|
|
18
16
|
import com.reactnativenavigation.options.StatusBarOptions;
|
|
19
17
|
import com.reactnativenavigation.options.StatusBarOptions.TextColorScheme;
|
|
18
|
+
import com.reactnativenavigation.options.layout.LayoutInsets;
|
|
20
19
|
import com.reactnativenavigation.options.params.Bool;
|
|
21
20
|
import com.reactnativenavigation.utils.SystemUiUtils;
|
|
22
21
|
import com.reactnativenavigation.viewcontrollers.parent.ParentController;
|
|
@@ -25,6 +24,7 @@ import com.reactnativenavigation.viewcontrollers.navigator.Navigator;
|
|
|
25
24
|
public class Presenter {
|
|
26
25
|
private final Activity activity;
|
|
27
26
|
private Options defaultOptions;
|
|
27
|
+
|
|
28
28
|
public Presenter(Activity activity, Options defaultOptions) {
|
|
29
29
|
this.activity = activity;
|
|
30
30
|
this.defaultOptions = defaultOptions;
|
|
@@ -40,9 +40,15 @@ public class Presenter {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
public void mergeOptions(ViewController<?> viewController, Options options) {
|
|
43
|
-
final Options withDefaults =
|
|
43
|
+
final Options withDefaults = viewController.resolveCurrentOptions().copy().mergeWith(options).withDefaultOptions(defaultOptions);
|
|
44
44
|
mergeStatusBarOptions(viewController.getView(), withDefaults.statusBar);
|
|
45
45
|
mergeNavigationBarOptions(withDefaults.navigationBar);
|
|
46
|
+
applyLayoutInsetsOnMostTopParent(viewController,withDefaults.layout.getInsets());
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private void applyLayoutInsetsOnMostTopParent(ViewController<?> viewController, LayoutInsets layoutInsets) {
|
|
50
|
+
final ViewController<?> topMostParent = viewController.getTopMostParent();
|
|
51
|
+
applyLayoutInsets(topMostParent.getView(), layoutInsets);
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
public void applyOptions(ViewController view, Options options) {
|
|
@@ -65,6 +71,16 @@ public class Presenter {
|
|
|
65
71
|
private void applyViewOptions(ViewController view, Options options) {
|
|
66
72
|
applyBackgroundColor(view, options);
|
|
67
73
|
applyTopMargin(view.getView(), options);
|
|
74
|
+
applyLayoutInsetsOnMostTopParent(view, options.layout.getInsets());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private void applyLayoutInsets(ViewGroup view, LayoutInsets layoutInsets) {
|
|
78
|
+
if ( view!=null && layoutInsets.hasValue()) {
|
|
79
|
+
view.setPadding(layoutInsets.getLeft() == null ? view.getPaddingLeft() : layoutInsets.getLeft(),
|
|
80
|
+
layoutInsets.getTop() == null ? view.getPaddingTop() : layoutInsets.getTop(),
|
|
81
|
+
layoutInsets.getRight() == null ?view.getPaddingRight() : layoutInsets.getRight(),
|
|
82
|
+
layoutInsets.getBottom() == null ? view.getPaddingBottom() : layoutInsets.getBottom());
|
|
83
|
+
}
|
|
68
84
|
}
|
|
69
85
|
|
|
70
86
|
private void applyTopMargin(View view, Options options) {
|
|
@@ -209,12 +225,12 @@ public class Presenter {
|
|
|
209
225
|
}
|
|
210
226
|
|
|
211
227
|
private void setNavigationBarBackgroundColor(NavigationBarOptions navigationBar) {
|
|
212
|
-
|
|
213
|
-
|
|
228
|
+
int navigationBarDefaultColor = SystemUiUtils.INSTANCE.getNavigationBarDefaultColor();
|
|
229
|
+
navigationBarDefaultColor = navigationBarDefaultColor == -1 ? Color.BLACK : navigationBarDefaultColor;
|
|
214
230
|
if (navigationBar.backgroundColor.canApplyValue()) {
|
|
215
231
|
int color = navigationBar.backgroundColor.get(navigationBarDefaultColor);
|
|
216
232
|
SystemUiUtils.setNavigationBarBackgroundColor(activity.getWindow(), color, isColorLight(color));
|
|
217
|
-
}else{
|
|
233
|
+
} else {
|
|
218
234
|
SystemUiUtils.setNavigationBarBackgroundColor(activity.getWindow(), navigationBarDefaultColor, isColorLight(navigationBarDefaultColor));
|
|
219
235
|
|
|
220
236
|
}
|
|
@@ -11,7 +11,6 @@ import androidx.annotation.VisibleForTesting;
|
|
|
11
11
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
12
12
|
|
|
13
13
|
import kotlin.Unit;
|
|
14
|
-
import kotlin.jvm.functions.Function0;
|
|
15
14
|
|
|
16
15
|
import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.matchParentWithBehaviour;
|
|
17
16
|
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
package com.reactnativenavigation.viewcontrollers.viewcontroller;
|
|
2
2
|
|
|
3
|
+
import static com.reactnativenavigation.utils.CollectionUtils.forEach;
|
|
4
|
+
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
5
|
+
|
|
3
6
|
import android.app.Activity;
|
|
4
7
|
import android.content.res.Configuration;
|
|
5
8
|
import android.view.View;
|
|
@@ -9,11 +12,13 @@ import android.view.ViewTreeObserver;
|
|
|
9
12
|
|
|
10
13
|
import androidx.annotation.CallSuper;
|
|
11
14
|
import androidx.annotation.CheckResult;
|
|
15
|
+
import androidx.annotation.NonNull;
|
|
12
16
|
import androidx.annotation.Nullable;
|
|
13
17
|
import androidx.annotation.VisibleForTesting;
|
|
14
18
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
15
19
|
|
|
16
20
|
import com.reactnativenavigation.options.Options;
|
|
21
|
+
import com.reactnativenavigation.options.OverlayAttachOptions;
|
|
17
22
|
import com.reactnativenavigation.options.params.Bool;
|
|
18
23
|
import com.reactnativenavigation.options.params.NullBool;
|
|
19
24
|
import com.reactnativenavigation.react.CommandListener;
|
|
@@ -25,15 +30,13 @@ import com.reactnativenavigation.viewcontrollers.parent.ParentController;
|
|
|
25
30
|
import com.reactnativenavigation.viewcontrollers.stack.StackController;
|
|
26
31
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.overlay.ViewControllerOverlay;
|
|
27
32
|
import com.reactnativenavigation.views.BehaviourAdapter;
|
|
33
|
+
import com.reactnativenavigation.views.overlay.ViewTooltip;
|
|
28
34
|
import com.reactnativenavigation.views.component.Component;
|
|
29
35
|
import com.reactnativenavigation.views.component.Renderable;
|
|
30
36
|
|
|
31
37
|
import java.util.ArrayList;
|
|
32
38
|
import java.util.List;
|
|
33
39
|
|
|
34
|
-
import static com.reactnativenavigation.utils.CollectionUtils.forEach;
|
|
35
|
-
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
36
|
-
|
|
37
40
|
public abstract class ViewController<T extends ViewGroup> implements ViewTreeObserver.OnGlobalLayoutListener,
|
|
38
41
|
ViewGroup.OnHierarchyChangeListener,
|
|
39
42
|
BehaviourAdapter {
|
|
@@ -157,6 +160,14 @@ public abstract class ViewController<T extends ViewGroup> implements ViewTreeObs
|
|
|
157
160
|
}
|
|
158
161
|
}
|
|
159
162
|
|
|
163
|
+
public ViewController<?> getTopMostParent(){
|
|
164
|
+
if(parentController!=null){
|
|
165
|
+
return parentController.getTopMostParent();
|
|
166
|
+
}else{
|
|
167
|
+
return this;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
160
171
|
@CallSuper
|
|
161
172
|
public void applyOptions(Options options) {
|
|
162
173
|
|
|
@@ -289,6 +300,7 @@ public abstract class ViewController<T extends ViewGroup> implements ViewTreeObs
|
|
|
289
300
|
if (view.getParent() instanceof ViewGroup) {
|
|
290
301
|
((ViewManager) view.getParent()).removeView(view);
|
|
291
302
|
}
|
|
303
|
+
setParentController(null);
|
|
292
304
|
view = null;
|
|
293
305
|
isDestroyed = true;
|
|
294
306
|
}
|
|
@@ -383,6 +395,15 @@ public abstract class ViewController<T extends ViewGroup> implements ViewTreeObs
|
|
|
383
395
|
|
|
384
396
|
}
|
|
385
397
|
|
|
398
|
+
protected View findTooltipAnchorView(OverlayAttachOptions options) {
|
|
399
|
+
return null;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
public ViewTooltip.TooltipView showAnchoredOverlay(@NonNull View anchorView,
|
|
403
|
+
@NonNull OverlayAttachOptions overlayAttachOptions,
|
|
404
|
+
@NonNull ViewController<?> overlayViewController) {
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
386
407
|
public int getBottomInset() {
|
|
387
408
|
return perform(parentController, 0, p -> p.getBottomInset(this));
|
|
388
409
|
}
|