react-native-navigation 7.24.3 → 7.25.0-snapshot.552

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.
Files changed (148) hide show
  1. package/lib/android/app/build.gradle +12 -9
  2. package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java +7 -9
  3. package/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java +4 -0
  4. package/lib/android/app/src/main/java/com/reactnativenavigation/options/Options.java +2 -0
  5. package/lib/android/app/src/main/java/com/reactnativenavigation/options/OverlayOptions.java +3 -2
  6. package/lib/android/app/src/main/java/com/reactnativenavigation/options/OverlayOptions.kt +31 -0
  7. package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutInsets.kt +44 -0
  8. package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutOptions.kt +71 -0
  9. package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/JSONParser.java +0 -2
  10. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/PrimitiveExt.kt +9 -0
  11. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +2 -1
  12. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +31 -4
  13. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +6 -13
  14. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +37 -12
  15. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java +4 -0
  16. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java +25 -6
  17. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManager.kt +104 -33
  18. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java +86 -9
  19. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java +12 -0
  20. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +18 -1
  21. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +51 -0
  22. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonController.kt +7 -1
  23. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt +1 -1
  24. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +23 -7
  25. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/RootPresenter.java +0 -1
  26. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java +24 -3
  27. package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabs.java +29 -1
  28. package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt +1 -0
  29. package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java +10 -1
  30. package/lib/android/app/src/main/java/com/reactnativenavigation/views/component/ComponentLayout.java +10 -2
  31. package/lib/android/app/src/main/java/com/reactnativenavigation/views/overlay/AttachedOverlayContainer.kt +69 -0
  32. package/lib/android/app/src/main/java/com/reactnativenavigation/views/overlay/ViewTooltip.java +921 -0
  33. package/lib/android/app/src/main/java/com/reactnativenavigation/views/sidemenu/SideMenuRoot.java +9 -1
  34. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/StackLayout.java +14 -4
  35. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/TopBar.java +0 -1
  36. package/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsStyleHelper.java +0 -1
  37. package/lib/dist/src/interfaces/Options.d.ts +34 -0
  38. package/lib/ios/RNNBasePresenter.m +17 -0
  39. package/lib/ios/RNNBottomTabsController.m +1 -0
  40. package/lib/ios/RNNBridgeManager.mm +5 -3
  41. package/lib/ios/RNNComponentViewController.m +5 -0
  42. package/lib/ios/RNNLayoutOptions.h +2 -1
  43. package/lib/ios/RNNLayoutOptions.m +4 -0
  44. package/lib/ios/RNNModalHostViewManagerHandler.h +11 -0
  45. package/lib/ios/RNNModalHostViewManagerHandler.m +40 -0
  46. package/lib/ios/RNNModalManager.h +2 -2
  47. package/lib/ios/RNNModalManager.m +0 -26
  48. package/lib/ios/RNNStackPresenter.m +1 -0
  49. package/lib/ios/ReactNativeNavigation.xcodeproj/project.pbxproj +8 -0
  50. package/lib/src/interfaces/Options.ts +38 -0
  51. package/package.json +3 -1
  52. package/.buildkite/pipeline.yml +0 -59
  53. package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java +0 -48
  54. package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +0 -178
  55. package/lib/android/app/src/test/java/com/reactnativenavigation/EnvironmentTest.java +0 -43
  56. package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +0 -23
  57. package/lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java +0 -35
  58. package/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +0 -62
  59. package/lib/android/app/src/test/java/com/reactnativenavigation/fakes/IconResolverFake.kt +0 -8
  60. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/BackDrawable.java +0 -30
  61. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +0 -49
  62. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +0 -18
  63. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleComponentViewController.java +0 -15
  64. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleOverlay.java +0 -54
  65. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleViewController.java +0 -113
  66. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +0 -79
  67. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentViewCreator.java +0 -18
  68. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactView.java +0 -71
  69. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarButtonCreatorMock.java +0 -34
  70. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarReactViewCreatorMock.java +0 -20
  71. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TopBarBackgroundViewCreatorMock.java +0 -20
  72. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +0 -21
  73. package/lib/android/app/src/test/java/com/reactnativenavigation/options/LayoutNodeParserTest.java +0 -51
  74. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OptionsTest.java +0 -315
  75. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OrientationOptionsTest.java +0 -81
  76. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TopBarButtonsTest.kt +0 -95
  77. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +0 -122
  78. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/BoolParserTest.java +0 -28
  79. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +0 -50
  80. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/JSONParserTest.java +0 -64
  81. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +0 -56
  82. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +0 -59
  83. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/SideMenuPresenterTest.java +0 -35
  84. package/lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationModuleTest.java +0 -102
  85. package/lib/android/app/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java +0 -24
  86. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/AnimationHelper.kt +0 -33
  87. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonPresenterTest.java +0 -241
  88. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonSpanTest.java +0 -57
  89. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/CompatUtilsTest.java +0 -17
  90. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +0 -78
  91. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +0 -47
  92. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/NativeCommandListenerTest.java +0 -60
  93. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/OptionHelper.java +0 -16
  94. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ReflectionUtilsTest.java +0 -26
  95. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/StringUtilsTest.java +0 -19
  96. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/SystemUiUtilsTest.kt +0 -27
  97. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleAndButtonsMeasurerTest.kt +0 -357
  98. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleBarHelper.java +0 -54
  99. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +0 -29
  100. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +0 -22
  101. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ViewHelper.java +0 -9
  102. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/OptionsApplyingTest.java +0 -149
  103. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +0 -206
  104. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +0 -62
  105. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +0 -589
  106. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +0 -173
  107. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AfterInitialTabTest.java +0 -38
  108. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +0 -86
  109. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTabTest.java +0 -31
  110. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/TogetherTest.java +0 -20
  111. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/button/NavigationIconResolverTest.java +0 -78
  112. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +0 -80
  113. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +0 -56
  114. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +0 -216
  115. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewControllerTest.java +0 -97
  116. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/FragmentCreatorMock.java +0 -34
  117. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/SomeFragment.java +0 -8
  118. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +0 -33
  119. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorMock.java +0 -40
  120. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +0 -213
  121. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +0 -319
  122. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +0 -367
  123. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +0 -898
  124. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +0 -254
  125. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +0 -108
  126. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +0 -299
  127. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +0 -446
  128. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +0 -77
  129. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/FloatingActionButtonTest.java +0 -154
  130. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/IdStackTest.java +0 -114
  131. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +0 -241
  132. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +0 -1165
  133. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +0 -1081
  134. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarButtonControllerTest.java +0 -61
  135. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarReactViewControllerTest.java +0 -43
  136. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarButtonControllerTest.java +0 -120
  137. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +0 -432
  138. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +0 -249
  139. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +0 -337
  140. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java +0 -68
  141. package/lib/android/app/src/test/java/com/reactnativenavigation/views/OverlayTouchDelegateTest.java +0 -60
  142. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +0 -477
  143. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TopBarTest.java +0 -82
  144. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +0 -109
  145. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/DefaultViewAnimatorCreatorFake.kt +0 -36
  146. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +0 -101
  147. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +0 -40
  148. package/lib/android/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +0 -1
@@ -172,6 +172,7 @@ allprojects { p ->
172
172
  }
173
173
 
174
174
  dependencies {
175
+
175
176
  implementation "androidx.core:core-ktx:1.6.0"
176
177
  implementation "org.jetbrains.kotlin:$kotlinStdlib:$kotlinVersion"
177
178
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinCoroutinesCore"
@@ -189,13 +190,15 @@ dependencies {
189
190
  //noinspection GradleDynamicVersion
190
191
  implementation 'com.facebook.react:react-native:+'
191
192
 
192
- // tests
193
- testImplementation 'junit:junit:4.13.2'
194
- testImplementation "org.robolectric:robolectric:4.7.2"
195
- testImplementation 'org.assertj:assertj-core:3.11.1'
196
- testImplementation 'org.mockito:mockito-core:4.0.0'
197
- testImplementation 'com.squareup.assertj:assertj-android:1.2.0'
198
- testImplementation 'org.mockito:mockito-inline:3.4.0'
199
- testImplementation "org.mockito.kotlin:mockito-kotlin:4.0.0"
200
- testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlinVersion"
193
+ if("Playground".toLowerCase() == rootProject.name.toLowerCase()){
194
+ // tests only for our playground
195
+ testImplementation 'junit:junit:4.13.2'
196
+ testImplementation "org.robolectric:robolectric:4.7.2"
197
+ testImplementation 'org.assertj:assertj-core:3.11.1'
198
+ testImplementation 'org.mockito:mockito-core:4.0.0'
199
+ testImplementation 'com.squareup.assertj:assertj-android:1.2.0'
200
+ testImplementation 'org.mockito:mockito-inline:3.4.0'
201
+ testImplementation "org.mockito.kotlin:mockito-kotlin:4.0.0"
202
+ testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlinVersion"
203
+ }
201
204
  }
@@ -3,28 +3,26 @@ package com.reactnativenavigation;
3
3
  import android.annotation.TargetApi;
4
4
  import android.content.Intent;
5
5
  import android.content.res.Configuration;
6
- import android.graphics.Color;
7
6
  import android.os.Build;
8
7
  import android.os.Bundle;
9
8
  import android.view.KeyEvent;
10
9
  import android.view.View;
11
10
 
11
+ import androidx.annotation.NonNull;
12
+ import androidx.annotation.Nullable;
13
+ import androidx.appcompat.app.AppCompatActivity;
14
+
12
15
  import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
13
16
  import com.facebook.react.modules.core.PermissionAwareActivity;
14
17
  import com.facebook.react.modules.core.PermissionListener;
15
- import com.reactnativenavigation.options.Options;
16
- import com.reactnativenavigation.viewcontrollers.overlay.OverlayManager;
17
- import com.reactnativenavigation.viewcontrollers.viewcontroller.RootPresenter;
18
+ import com.reactnativenavigation.react.CommandListenerAdapter;
18
19
  import com.reactnativenavigation.react.JsDevReloadHandler;
19
20
  import com.reactnativenavigation.react.ReactGateway;
20
- import com.reactnativenavigation.react.CommandListenerAdapter;
21
21
  import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
22
22
  import com.reactnativenavigation.viewcontrollers.modal.ModalStack;
23
23
  import com.reactnativenavigation.viewcontrollers.navigator.Navigator;
24
-
25
- import androidx.annotation.NonNull;
26
- import androidx.annotation.Nullable;
27
- import androidx.appcompat.app.AppCompatActivity;
24
+ import com.reactnativenavigation.viewcontrollers.overlay.OverlayManager;
25
+ import com.reactnativenavigation.viewcontrollers.viewcontroller.RootPresenter;
28
26
 
29
27
  public class NavigationActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler, PermissionAwareActivity, JsDevReloadHandler.ReloadListener {
30
28
  @Nullable
@@ -25,6 +25,7 @@ public class BottomTabOptions {
25
25
  BottomTabOptions options = new BottomTabOptions();
26
26
  if (json == null) return options;
27
27
 
28
+ options.id = TextParser.parse(json, "id");
28
29
  options.text = TextParser.parse(json, "text");
29
30
  options.textColor = ThemeColour.parse(context, json.optJSONObject("textColor"));
30
31
  options.selectedTextColor = ThemeColour.parse(context, json.optJSONObject("selectedTextColor"));
@@ -48,6 +49,7 @@ public class BottomTabOptions {
48
49
  return options;
49
50
  }
50
51
 
52
+ public Text id = new NullText();
51
53
  public Text text = new NullText();
52
54
  public ThemeColour textColor = new NullThemeColour();
53
55
  public ThemeColour selectedTextColor = new NullThemeColour();
@@ -70,6 +72,7 @@ public class BottomTabOptions {
70
72
 
71
73
 
72
74
  void mergeWith(final BottomTabOptions other) {
75
+ if (other.id.hasValue()) id = other.id;
73
76
  if (other.textColor.hasValue()) textColor = other.textColor;
74
77
  if (other.selectedTextColor.hasValue()) selectedTextColor = other.selectedTextColor;
75
78
  if (other.iconColor.hasValue()) iconColor = other.iconColor;
@@ -93,6 +96,7 @@ public class BottomTabOptions {
93
96
  }
94
97
 
95
98
  void mergeWithDefault(final BottomTabOptions defaultOptions) {
99
+ if (!id.hasValue()) id = defaultOptions.id;
96
100
  if (!textColor.hasValue()) textColor = defaultOptions.textColor;
97
101
  if (!selectedTextColor.hasValue()) selectedTextColor = defaultOptions.selectedTextColor;
98
102
  if (!iconColor.hasValue()) iconColor = defaultOptions.iconColor;
@@ -2,6 +2,8 @@ package com.reactnativenavigation.options;
2
2
 
3
3
  import android.content.Context;
4
4
 
5
+
6
+ import com.reactnativenavigation.options.layout.LayoutOptions;
5
7
  import com.reactnativenavigation.options.params.NullNumber;
6
8
  import com.reactnativenavigation.options.params.NullText;
7
9
  import com.reactnativenavigation.options.parsers.TypefaceLoader;
@@ -1,3 +1,4 @@
1
+
1
2
  package com.reactnativenavigation.options;
2
3
 
3
4
  import com.reactnativenavigation.options.params.Bool;
@@ -8,11 +9,11 @@ import org.json.JSONObject;
8
9
 
9
10
  public class OverlayOptions {
10
11
  public Bool interceptTouchOutside = new NullBool();
11
-
12
+ public OverlayAttachOptions overlayAttachOptions = new OverlayAttachOptions();
12
13
  public static OverlayOptions parse(JSONObject json) {
13
14
  OverlayOptions options = new OverlayOptions();
14
15
  if (json == null) return options;
15
-
16
+ options.overlayAttachOptions = OverlayAttachOptions.parse(json.optJSONObject("attach"));
16
17
  options.interceptTouchOutside = BoolParser.parse(json,"interceptTouchOutside");
17
18
  return options;
18
19
  }
@@ -0,0 +1,31 @@
1
+ package com.reactnativenavigation.options
2
+
3
+ import com.reactnativenavigation.options.params.NullText
4
+ import com.reactnativenavigation.options.params.Text
5
+ import com.reactnativenavigation.options.parsers.TextParser
6
+ import org.json.JSONObject
7
+ class OverlayAttachOptions{
8
+
9
+ @JvmField
10
+ var layoutId :Text = NullText()
11
+ @JvmField
12
+ var anchorId :Text = NullText()
13
+ @JvmField
14
+ var gravity:Text = NullText()
15
+
16
+ fun hasValue() = layoutId.hasValue()
17
+ override fun toString(): String {
18
+ return "OverlayAttachOptions(layoutId=$layoutId, anchorId=$anchorId, gravity=$gravity)"
19
+ }
20
+
21
+ companion object{
22
+ @JvmStatic
23
+ fun parse(json: JSONObject?): OverlayAttachOptions {
24
+ val overlayAttachOptions = OverlayAttachOptions()
25
+ overlayAttachOptions.layoutId = TextParser.parse(json,"layoutId")
26
+ overlayAttachOptions.anchorId = TextParser.parse(json?.optJSONObject("anchor"),"id")
27
+ overlayAttachOptions.gravity = TextParser.parse(json?.optJSONObject("anchor"),"gravity")
28
+ return overlayAttachOptions
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,44 @@
1
+ package com.reactnativenavigation.options.layout
2
+
3
+ import com.reactnativenavigation.utils.dp
4
+ import org.json.JSONObject
5
+
6
+ class LayoutInsets(
7
+ var top: Int?=null,
8
+ var left: Int?=null,
9
+ var bottom: Int?=null,
10
+ var right: Int?=null
11
+ ) {
12
+ fun merge(toMerge: LayoutInsets?, defaults: LayoutInsets?) {
13
+ toMerge?.let { options->
14
+ options.top?.let { this.top = it }
15
+ options.bottom?.let { this.bottom = it }
16
+ options.left?.let { this.left = it }
17
+ options.right?.let { this.right = it }
18
+ }
19
+
20
+ defaults?.let {
21
+ options->
22
+ top = top?:options.top
23
+ left = left?:options.left
24
+ right = right?:options.right
25
+ bottom = bottom?:options.bottom
26
+ }
27
+ }
28
+
29
+ companion object{
30
+ fun parse(jsonObject: JSONObject?): LayoutInsets {
31
+ return LayoutInsets(
32
+ jsonObject?.optInt("top")?.dp,
33
+ jsonObject?.optInt("left")?.dp,
34
+ jsonObject?.optInt("bottom")?.dp,
35
+ jsonObject?.optInt("right")?.dp
36
+ )
37
+ }
38
+ }
39
+
40
+ fun hasValue(): Boolean {
41
+ return top!=null || bottom!=null || left!=null || right!=null
42
+ }
43
+
44
+ }
@@ -0,0 +1,71 @@
1
+ package com.reactnativenavigation.options.layout
2
+
3
+ import android.content.Context
4
+ import com.reactnativenavigation.options.LayoutDirection
5
+ import com.reactnativenavigation.options.OrientationOptions
6
+ import com.reactnativenavigation.options.params.*
7
+ import com.reactnativenavigation.options.params.Number
8
+ import com.reactnativenavigation.options.parsers.BoolParser
9
+ import com.reactnativenavigation.options.parsers.NumberParser
10
+ import org.json.JSONObject
11
+
12
+ class LayoutOptions {
13
+ @JvmField
14
+ var backgroundColor: ThemeColour = NullThemeColour()
15
+
16
+ @JvmField
17
+ var componentBackgroundColor: ThemeColour = NullThemeColour()
18
+
19
+ @JvmField
20
+ var topMargin: Number = NullNumber()
21
+
22
+ @JvmField
23
+ var adjustResize: Bool = NullBool()
24
+
25
+ @JvmField
26
+ var orientation = OrientationOptions()
27
+
28
+ @JvmField
29
+ var direction = LayoutDirection.DEFAULT
30
+
31
+ var insets: LayoutInsets = LayoutInsets()
32
+
33
+
34
+ fun mergeWith(other: LayoutOptions) {
35
+ if (other.backgroundColor.hasValue()) backgroundColor = other.backgroundColor
36
+ if (other.componentBackgroundColor.hasValue()) componentBackgroundColor = other.componentBackgroundColor
37
+ if (other.topMargin.hasValue()) topMargin = other.topMargin
38
+ if (other.orientation.hasValue()) orientation = other.orientation
39
+ if (other.direction.hasValue()) direction = other.direction
40
+ if (other.adjustResize.hasValue()) adjustResize = other.adjustResize
41
+ insets.merge(other.insets, null)
42
+ }
43
+
44
+ fun mergeWithDefault(defaultOptions: LayoutOptions) {
45
+ if (!backgroundColor.hasValue()) backgroundColor = defaultOptions.backgroundColor
46
+ if (!componentBackgroundColor.hasValue()) componentBackgroundColor = defaultOptions.componentBackgroundColor
47
+ if (!topMargin.hasValue()) topMargin = defaultOptions.topMargin
48
+ if (!orientation.hasValue()) orientation = defaultOptions.orientation
49
+ if (!direction.hasValue()) direction = defaultOptions.direction
50
+ if (!adjustResize.hasValue()) adjustResize = defaultOptions.adjustResize
51
+ insets.merge(null, defaultOptions.insets)
52
+
53
+ }
54
+
55
+ companion object {
56
+ @JvmStatic
57
+ fun parse(context: Context?, json: JSONObject?): LayoutOptions {
58
+ val result = LayoutOptions()
59
+ if (json == null) return result
60
+ result.backgroundColor = ThemeColour.parse(context!!, json.optJSONObject("backgroundColor"))
61
+ result.componentBackgroundColor = ThemeColour.parse(context, json.optJSONObject("componentBackgroundColor"))
62
+ result.topMargin = NumberParser.parse(json, "topMargin")
63
+ result.insets = LayoutInsets.parse(json.optJSONObject("insets"))
64
+ result.orientation = OrientationOptions.parse(json)
65
+ result.direction = LayoutDirection.fromString(json.optString("direction", ""))
66
+ result.adjustResize = BoolParser.parse(json, "adjustResize")
67
+ return result
68
+ }
69
+ }
70
+
71
+ }
@@ -6,8 +6,6 @@ import com.facebook.react.bridge.ReadableMap;
6
6
  import com.facebook.react.bridge.ReadableMapKeySetIterator;
7
7
  import com.facebook.react.bridge.WritableArray;
8
8
  import com.facebook.react.bridge.WritableMap;
9
- import com.facebook.react.bridge.WritableNativeArray;
10
- import com.facebook.react.bridge.WritableNativeMap;
11
9
 
12
10
  import org.json.JSONArray;
13
11
  import org.json.JSONException;
@@ -0,0 +1,9 @@
1
+ package com.reactnativenavigation.utils
2
+
3
+ import android.content.res.Resources
4
+
5
+ val Int.dp: Int
6
+ get() = (this * Resources.getSystem().displayMetrics.density).toInt()
7
+
8
+ val Float.dp: Int
9
+ get() = (this * Resources.getSystem().displayMetrics.density).toInt()
@@ -9,7 +9,6 @@ import android.graphics.drawable.Drawable;
9
9
 
10
10
  import androidx.annotation.NonNull;
11
11
 
12
- import com.aurelhubert.ahbottomnavigation.AHTextView;
13
12
  import com.aurelhubert.ahbottomnavigation.notification.AHNotification;
14
13
  import com.reactnativenavigation.options.BottomTabOptions;
15
14
  import com.reactnativenavigation.options.DotIndicatorOptions;
@@ -58,6 +57,7 @@ public class BottomTabPresenter {
58
57
  bottomTabs.perform(bottomTabs -> {
59
58
  for (int i = 0; i < tabs.size(); i++) {
60
59
  BottomTabOptions tab = tabs.get(i).resolveCurrentOptions(defaultOptions).bottomTabOptions;
60
+ bottomTabs.setTagForTabIndex(i, tab.id.get(null));
61
61
  bottomTabs.setIconWidth(i, tab.iconWidth.get(null));
62
62
  bottomTabs.setIconHeight(i, tab.iconHeight.get(null));
63
63
  bottomTabs.setTitleTypeface(i, tab.font.getTypeface(typefaceLoader, defaultTypeface));
@@ -87,6 +87,7 @@ public class BottomTabPresenter {
87
87
  int index = bottomTabFinder.findByControllerId(child.getId());
88
88
  if (index >= 0) {
89
89
  BottomTabOptions tab = options.bottomTabOptions;
90
+ if (tab.id.hasValue()) bottomTabs.setTagForTabIndex(index, tab.id.get());
90
91
  if (tab.iconWidth.hasValue()) bottomTabs.setIconWidth(index, tab.iconWidth.get(null));
91
92
  if (tab.iconHeight.hasValue()) bottomTabs.setIconHeight(index, tab.iconHeight.get(null));
92
93
  if (tab.font.hasValue()) bottomTabs.setTitleTypeface(index, tab.font.getTypeface(typefaceLoader, defaultTypeface));
@@ -1,5 +1,10 @@
1
1
  package com.reactnativenavigation.viewcontrollers.bottomtabs;
2
2
 
3
+ import static com.reactnativenavigation.utils.CollectionUtils.forEach;
4
+ import static com.reactnativenavigation.utils.CollectionUtils.map;
5
+ import static com.reactnativenavigation.utils.ObjectUtils.perform;
6
+ import static com.reactnativenavigation.views.bottomtabs.BottomTabs.TAB_NOT_FOUND;
7
+
3
8
  import android.animation.Animator;
4
9
  import android.app.Activity;
5
10
  import android.content.res.Configuration;
@@ -7,6 +12,7 @@ import android.view.View;
7
12
  import android.view.ViewGroup;
8
13
 
9
14
  import androidx.annotation.NonNull;
15
+ import androidx.annotation.Nullable;
10
16
  import androidx.annotation.RestrictTo;
11
17
  import androidx.coordinatorlayout.widget.CoordinatorLayout;
12
18
 
@@ -15,6 +21,7 @@ import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem;
15
21
  import com.reactnativenavigation.options.BottomTabOptions;
16
22
  import com.reactnativenavigation.options.HwBackBottomTabsBehaviour;
17
23
  import com.reactnativenavigation.options.Options;
24
+ import com.reactnativenavigation.options.OverlayAttachOptions;
18
25
  import com.reactnativenavigation.react.CommandListener;
19
26
  import com.reactnativenavigation.react.CommandListenerAdapter;
20
27
  import com.reactnativenavigation.react.events.EventEmitter;
@@ -25,6 +32,7 @@ import com.reactnativenavigation.viewcontrollers.parent.ParentController;
25
32
  import com.reactnativenavigation.viewcontrollers.stack.StackController;
26
33
  import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
27
34
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
35
+ import com.reactnativenavigation.views.overlay.ViewTooltip;
28
36
  import com.reactnativenavigation.views.bottomtabs.BottomTabs;
29
37
  import com.reactnativenavigation.views.bottomtabs.BottomTabsContainer;
30
38
  import com.reactnativenavigation.views.bottomtabs.BottomTabsLayout;
@@ -34,10 +42,6 @@ import java.util.Deque;
34
42
  import java.util.LinkedList;
35
43
  import java.util.List;
36
44
 
37
- import static com.reactnativenavigation.utils.CollectionUtils.forEach;
38
- import static com.reactnativenavigation.utils.CollectionUtils.map;
39
- import static com.reactnativenavigation.utils.ObjectUtils.perform;
40
-
41
45
  public class BottomTabsController extends ParentController<BottomTabsLayout> implements AHBottomNavigation.OnTabSelectedListener, TabSelector {
42
46
 
43
47
  private BottomTabsContainer bottomTabsContainer;
@@ -238,6 +242,29 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
238
242
  return super.onMeasureChild(parent, child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed);
239
243
  }
240
244
 
245
+ @Override
246
+ public ViewTooltip.TooltipView showAnchoredOverlay(@NonNull View anchorView, @NonNull OverlayAttachOptions overlayAttachOptions,
247
+ @NonNull ViewController<?> overlayViewController) {
248
+ if(view!=null){
249
+ return view.getAttachedOverlayContainer().addAnchoredView(anchorView, overlayViewController.getView(),
250
+ overlayAttachOptions.gravity.get());
251
+ }
252
+ return null;
253
+ }
254
+
255
+ public View getTabViewByTag(String id) {
256
+ int tabIndex = bottomTabs.getTabIndexByTag(id);
257
+ if (tabIndex != TAB_NOT_FOUND) {
258
+ return bottomTabs.getViewAtPosition(tabIndex);
259
+ }
260
+ return null;
261
+ }
262
+
263
+ @Override
264
+ public List<ViewController<?>> getChildren() {
265
+ return tabs;
266
+ }
267
+
241
268
  @Override
242
269
  public int getBottomInset(ViewController<?> child) {
243
270
  return presenter.getBottomInset(resolveChildOptions(child)) + perform(getParentController(), 0, p -> p.getBottomInset(this));
@@ -2,28 +2,21 @@ package com.reactnativenavigation.viewcontrollers.child;
2
2
 
3
3
  import android.app.Activity;
4
4
  import android.content.res.Configuration;
5
- import android.os.Build;
6
- import android.util.Log;
7
5
  import android.view.View;
8
6
  import android.view.ViewGroup;
9
- import android.view.WindowInsets;
7
+
8
+ import androidx.annotation.CallSuper;
9
+ import androidx.core.view.ViewCompat;
10
+ import androidx.core.view.WindowInsetsCompat;
10
11
 
11
12
  import com.reactnativenavigation.options.Options;
12
- import com.reactnativenavigation.utils.LogKt;
13
- import com.reactnativenavigation.viewcontrollers.parent.ParentController;
14
- import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
15
- import com.reactnativenavigation.viewcontrollers.viewcontroller.NoOpYellowBoxDelegate;
16
13
  import com.reactnativenavigation.viewcontrollers.navigator.Navigator;
14
+ import com.reactnativenavigation.viewcontrollers.viewcontroller.NoOpYellowBoxDelegate;
15
+ import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
17
16
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
18
17
  import com.reactnativenavigation.viewcontrollers.viewcontroller.overlay.ViewControllerOverlay;
19
18
  import com.reactnativenavigation.views.component.Component;
20
19
 
21
- import androidx.annotation.CallSuper;
22
- import androidx.core.graphics.Insets;
23
- import androidx.core.view.ViewCompat;
24
- import androidx.core.view.WindowCompat;
25
- import androidx.core.view.WindowInsetsCompat;
26
-
27
20
  public abstract class ChildController<T extends ViewGroup> extends ViewController<T> {
28
21
  private final Presenter presenter;
29
22
  private final ChildControllersRegistry childRegistry;
@@ -3,8 +3,9 @@ package com.reactnativenavigation.viewcontrollers.component;
3
3
  import android.app.Activity;
4
4
  import android.content.res.Configuration;
5
5
  import android.view.View;
6
+ import android.view.ViewGroup;
6
7
 
7
- import com.reactnativenavigation.utils.LogKt;
8
+ import com.reactnativenavigation.options.OverlayAttachOptions;
8
9
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ScrollEventListener;
9
10
  import com.reactnativenavigation.options.Options;
10
11
  import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
@@ -13,9 +14,11 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ReactViewCreator
13
14
  import com.reactnativenavigation.viewcontrollers.child.ChildController;
14
15
  import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
15
16
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
17
+ import com.reactnativenavigation.views.overlay.ViewTooltip;
16
18
  import com.reactnativenavigation.views.component.ComponentLayout;
17
19
 
18
20
  import androidx.annotation.NonNull;
21
+ import androidx.annotation.Nullable;
19
22
  import androidx.core.graphics.Insets;
20
23
  import androidx.core.view.ViewCompat;
21
24
  import androidx.core.view.WindowInsetsCompat;
@@ -26,6 +29,11 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
26
29
  private final String componentName;
27
30
  private final ComponentPresenter presenter;
28
31
  private final ReactViewCreator viewCreator;
32
+ private boolean ignoreInsets = false;
33
+
34
+ public void ignoreInsets(boolean ignore) {
35
+ ignoreInsets = ignore;
36
+ }
29
37
 
30
38
  private enum VisibilityState {Appear, Disappear}
31
39
 
@@ -78,14 +86,17 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
78
86
  if (view != null)
79
87
  view.sendComponentWillStart();
80
88
  super.onViewDidAppear();
81
- view.requestApplyInsets();
82
- if (view != null && lastVisibilityState == VisibilityState.Disappear) view.sendComponentStart();
89
+ if (view != null) {
90
+ view.requestApplyInsets();
91
+ if (lastVisibilityState == VisibilityState.Disappear)
92
+ view.sendComponentStart();
93
+ }
83
94
  lastVisibilityState = VisibilityState.Appear;
84
95
  }
85
96
 
86
97
  @Override
87
98
  public void onViewDisappear() {
88
- if(lastVisibilityState == VisibilityState.Disappear)return;
99
+ if (lastVisibilityState == VisibilityState.Disappear) return;
89
100
  lastVisibilityState = VisibilityState.Disappear;
90
101
  if (view != null) view.sendComponentStop();
91
102
  super.onViewDisappear();
@@ -125,7 +136,7 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
125
136
 
126
137
  @Override
127
138
  public void applyTopInset() {
128
- if (view != null) presenter.applyTopInsets(view, getTopInset());
139
+ if (view != null && !ignoreInsets) presenter.applyTopInsets(view, getTopInset());
129
140
  }
130
141
 
131
142
  @Override
@@ -137,23 +148,28 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
137
148
 
138
149
  @Override
139
150
  public void applyBottomInset() {
140
- if (view != null) presenter.applyBottomInset(view, getBottomInset());
151
+ if (view != null && !ignoreInsets) presenter.applyBottomInset(view, getBottomInset());
141
152
  }
142
153
 
143
154
  @Override
144
155
  protected WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat insets) {
145
156
  ViewController<?> viewController = findController(view);
146
- if (viewController == null || viewController.getView() == null) return insets;
147
- final Insets keyboardInsets = insets.getInsets( WindowInsetsCompat.Type.ime());
148
- final Insets systemBarsInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars() );
149
- final int visibleNavBar = resolveCurrentOptions(presenter.defaultOptions).navigationBar.isVisible.isTrueOrUndefined()?1:0;
157
+ if (viewController == null || viewController.getView() == null || ignoreInsets) return insets;
158
+ final Options currentOptions = resolveCurrentOptions(presenter.defaultOptions);
159
+
160
+ final int keyboardBottomInset = currentOptions.layout.adjustResize.get(true) ? insets.getInsets(WindowInsetsCompat.Type.ime()).bottom : 0;
161
+ final Insets systemBarsInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars());
162
+ final int visibleNavBar = currentOptions.navigationBar.isVisible.isTrueOrUndefined() ? 1 : 0;
163
+ final int controllerBottomInset = currentOptions.bottomTabsOptions.isHiddenOrDrawBehind() ? 0 : getBottomInset();
150
164
  final WindowInsetsCompat finalInsets = new WindowInsetsCompat.Builder().setInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime(),
151
165
  Insets.of(systemBarsInsets.left,
152
166
  0,
153
167
  systemBarsInsets.right,
154
- Math.max(visibleNavBar*systemBarsInsets.bottom,keyboardInsets.bottom))
168
+ Math.max(0, Math.max(visibleNavBar * systemBarsInsets.bottom, keyboardBottomInset) - controllerBottomInset))
155
169
  ).build();
156
- return ViewCompat.onApplyWindowInsets(viewController.getView(), finalInsets);
170
+
171
+ ViewCompat.onApplyWindowInsets(viewController.getView(), finalInsets);
172
+ return insets;
157
173
  }
158
174
 
159
175
  @Override
@@ -173,6 +189,15 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
173
189
  }
174
190
  }
175
191
 
192
+ @Override
193
+ public ViewTooltip.TooltipView showAnchoredOverlay(@NonNull View anchorView, @NonNull OverlayAttachOptions overlayAttachOptions, @NonNull ViewController<?> overlayViewController) {
194
+ if (view != null) {
195
+ return view.getAttachedOverlayContainer().addAnchoredView(anchorView, overlayViewController.getView(),
196
+ overlayAttachOptions.gravity.get());
197
+ }
198
+ return null;
199
+ }
200
+
176
201
  @Override
177
202
  public void onConfigurationChanged(Configuration newConfig) {
178
203
  super.onConfigurationChanged(newConfig);
@@ -14,6 +14,7 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.overlay.ModalOve
14
14
 
15
15
  import java.util.ArrayList;
16
16
  import java.util.EmptyStackException;
17
+ import java.util.LinkedList;
17
18
  import java.util.List;
18
19
 
19
20
  import androidx.annotation.Nullable;
@@ -142,6 +143,9 @@ public class ModalStack {
142
143
  public boolean isEmpty() {
143
144
  return modals.isEmpty();
144
145
  }
146
+ public List<ViewController<?>> getChildren(){
147
+ return new LinkedList<>(modals);
148
+ }
145
149
 
146
150
  public int size() {
147
151
  return modals.size();
@@ -4,11 +4,13 @@ import android.app.Activity;
4
4
  import android.content.res.Configuration;
5
5
  import android.view.View;
6
6
  import android.view.ViewGroup;
7
+ import android.view.WindowInsets;
7
8
 
8
9
  import androidx.annotation.NonNull;
9
10
  import androidx.annotation.Nullable;
10
11
  import androidx.annotation.RestrictTo;
11
12
  import androidx.coordinatorlayout.widget.CoordinatorLayout;
13
+ import androidx.core.view.WindowInsetsCompat;
12
14
 
13
15
  import com.facebook.react.ReactInstanceManager;
14
16
  import com.reactnativenavigation.options.Options;
@@ -80,8 +82,13 @@ public class Navigator extends ParentController<ViewGroup> {
80
82
  rootLayout = new CoordinatorLayout(getActivity());
81
83
  modalsLayout = new CoordinatorLayout(getActivity());
82
84
  overlaysLayout = new CoordinatorLayout(getActivity());
85
+ overlayManager.setFindController(this::findController);
86
+ overlayManager.setFindAnchorView(this::findTooltipAnchorView);
87
+ overlayManager.setMainOverlayContainer(overlaysLayout);
83
88
  }
84
89
 
90
+
91
+
85
92
  public void bindViews() {
86
93
  modalStack.setModalsLayout(modalsLayout);
87
94
  modalStack.setRootLayout(rootLayout);
@@ -120,7 +127,7 @@ public class Navigator extends ParentController<ViewGroup> {
120
127
 
121
128
  public void destroyViews() {
122
129
  modalStack.destroy();
123
- overlayManager.destroy(overlaysLayout);
130
+ overlayManager.destroy();
124
131
  destroyRoot();
125
132
  }
126
133
 
@@ -147,6 +154,7 @@ public class Navigator extends ParentController<ViewGroup> {
147
154
  final ViewController<?> disappearing = previousRoot;
148
155
  root = appearing;
149
156
  root.setOverlay(new RootOverlay(getActivity(), contentLayout));
157
+ root.setParentController(this);
150
158
  rootPresenter.setRoot(appearing, disappearing, defaultOptions, new CommandListenerAdapter(commandListener) {
151
159
  @Override
152
160
  public void onSuccess(String childId) {
@@ -206,16 +214,27 @@ public class Navigator extends ParentController<ViewGroup> {
206
214
  modalStack.dismissAllModals(root, mergeOptions, listener);
207
215
  }
208
216
 
217
+ @Override
218
+ public List<ViewController<?>> getChildren() {
219
+ final List<ViewController<?>> children = modalStack.getChildren();
220
+ children.add(root);
221
+ return children;
222
+ }
223
+
209
224
  public void showOverlay(ViewController<?> overlay, CommandListener listener) {
210
- overlayManager.show(overlaysLayout, overlay, listener);
225
+ final Options options = overlay.resolveCurrentOptions();
226
+ overlayManager.show( overlay,options.overlayOptions, listener);
227
+
211
228
  }
212
229
 
213
230
  public void dismissOverlay(final String componentId, CommandListener listener) {
214
- overlayManager.dismiss(overlaysLayout, componentId, listener);
231
+ overlayManager.dismiss( componentId, listener);
232
+
215
233
  }
216
234
 
217
235
  public void dismissAllOverlays(CommandListener listener) {
218
- overlayManager.dismissAll(overlaysLayout, listener);
236
+ overlayManager.dismissAll();
237
+ listener.onSuccess("");
219
238
  }
220
239
 
221
240
  @Nullable
@@ -269,7 +288,7 @@ public class Navigator extends ParentController<ViewGroup> {
269
288
  overlayManager.onHostPause();
270
289
  if (!modalStack.isEmpty()) {
271
290
  modalStack.onHostPause();
272
- if(modalStack.peekDisplayedOverCurrentContext()){
291
+ if (modalStack.peekDisplayedOverCurrentContext()) {
273
292
  onViewDisappear();
274
293
  }
275
294
  } else {
@@ -281,7 +300,7 @@ public class Navigator extends ParentController<ViewGroup> {
281
300
  overlayManager.onHostResume();
282
301
  if (!modalStack.isEmpty()) {
283
302
  modalStack.onHostResume();
284
- if(modalStack.peekDisplayedOverCurrentContext()){
303
+ if (modalStack.peekDisplayedOverCurrentContext()) {
285
304
  onViewDidAppear();
286
305
  }
287
306
  } else {