react-native-navigation 7.22.0 → 7.22.2

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 (86) hide show
  1. package/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt +0 -1
  2. package/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt +2 -5
  3. package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +120 -120
  4. package/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt +3 -3
  5. package/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt +16 -16
  6. package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt +0 -1
  7. package/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java +0 -2
  8. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +7 -6
  9. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationPackage.kt +1 -2
  10. package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +5 -5
  11. package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalLayoutController.kt +7 -7
  12. package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt +25 -9
  13. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java +1 -1
  14. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt +0 -1
  15. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java +1 -1
  16. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java +1 -1
  17. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java +0 -2
  18. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java +5 -6
  19. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt +0 -3
  20. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java +4 -5
  21. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +6 -8
  22. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt +0 -1
  23. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +3 -3
  24. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java +1 -1
  25. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java +3 -3
  26. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java +2 -2
  27. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +1 -1
  28. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java +5 -5
  29. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java +0 -1
  30. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +1 -1
  31. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +6 -6
  32. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java +18 -18
  33. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java +12 -12
  34. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java +22 -22
  35. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java +16 -16
  36. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java +4 -4
  37. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java +8 -8
  38. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java +14 -14
  39. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +29 -29
  40. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java +3 -3
  41. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +29 -28
  42. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt +1 -0
  43. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java +0 -1
  44. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +1 -1
  45. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java +2 -2
  46. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt +1 -1
  47. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt +0 -1
  48. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java +0 -1
  49. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java +5 -4
  50. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java +8 -8
  51. package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt +1 -4
  52. package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java +0 -1
  53. package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt +2 -0
  54. package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt +0 -1
  55. package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt +2 -2
  56. package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactViewRotationAnimator.kt +0 -5
  57. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +1 -22
  58. package/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java +2 -2
  59. package/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java +6 -6
  60. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -1
  61. package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +23 -28
  62. package/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +4 -2
  63. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +3 -1
  64. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +0 -3
  65. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +6 -6
  66. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +3 -4
  67. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +1 -1
  68. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java +13 -15
  69. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +5 -5
  70. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +2 -2
  71. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +2 -2
  72. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +4 -4
  73. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +10 -10
  74. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +25 -26
  75. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +2 -2
  76. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +15 -15
  77. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +11 -11
  78. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +2 -2
  79. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +0 -4
  80. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +15 -15
  81. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +17 -17
  82. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +3 -3
  83. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +9 -9
  84. package/lib/dist/components/Modal.js +1 -2
  85. package/lib/src/components/Modal.tsx +1 -2
  86. package/package.json +1 -1
@@ -1,7 +1,6 @@
1
1
  package com.reactnativenavigation.options
2
2
 
3
3
  import android.animation.Animator
4
- import android.animation.AnimatorSet
5
4
  import android.view.View
6
5
  import org.json.JSONObject
7
6
 
@@ -1,11 +1,8 @@
1
1
  package com.reactnativenavigation.options
2
2
 
3
- import android.content.Context
4
- import com.reactnativenavigation.options.animations.ViewAnimationOptions
5
- import com.reactnativenavigation.options.params.*
3
+ import com.reactnativenavigation.options.params.Bool
4
+ import com.reactnativenavigation.options.params.NullBool
6
5
  import com.reactnativenavigation.options.parsers.BoolParser
7
- import com.reactnativenavigation.options.parsers.ColorParser
8
- import com.reactnativenavigation.options.parsers.FractionParser
9
6
  import org.json.JSONObject
10
7
 
11
8
 
@@ -47,37 +47,37 @@ import static com.reactnativenavigation.utils.CollectionUtils.*;
47
47
 
48
48
  public class LayoutFactory {
49
49
  private Activity activity;
50
- private ChildControllersRegistry childRegistry;
50
+ private ChildControllersRegistry childRegistry;
51
51
  private final ReactInstanceManager reactInstanceManager;
52
- private EventEmitter eventEmitter;
53
- private Map<String, ExternalComponentCreator> externalComponentCreators;
54
- private @NonNull Options defaultOptions = new Options();
55
- private TypefaceLoader typefaceManager;
56
-
57
- public void setDefaultOptions(@NonNull Options defaultOptions) {
58
- Assertions.assertNotNull(defaultOptions);
59
- this.defaultOptions = defaultOptions;
60
- }
61
-
62
- public LayoutFactory(final ReactInstanceManager reactInstanceManager) {
63
- this.reactInstanceManager = reactInstanceManager;
64
- }
65
-
66
- public void init(Activity activity, EventEmitter eventEmitter, ChildControllersRegistry childRegistry, Map<String, ExternalComponentCreator> externalComponentCreators) {
67
- this.activity = activity;
68
- this.eventEmitter = eventEmitter;
69
- this.childRegistry = childRegistry;
70
- this.externalComponentCreators = externalComponentCreators;
71
- typefaceManager = new TypefaceLoader(activity);
72
- }
73
-
74
- public ViewController create(final LayoutNode node) {
52
+ private EventEmitter eventEmitter;
53
+ private Map<String, ExternalComponentCreator> externalComponentCreators;
54
+ private @NonNull Options defaultOptions = new Options();
55
+ private TypefaceLoader typefaceManager;
56
+
57
+ public void setDefaultOptions(@NonNull Options defaultOptions) {
58
+ Assertions.assertNotNull(defaultOptions);
59
+ this.defaultOptions = defaultOptions;
60
+ }
61
+
62
+ public LayoutFactory(final ReactInstanceManager reactInstanceManager) {
63
+ this.reactInstanceManager = reactInstanceManager;
64
+ }
65
+
66
+ public void init(Activity activity, EventEmitter eventEmitter, ChildControllersRegistry childRegistry, Map<String, ExternalComponentCreator> externalComponentCreators) {
67
+ this.activity = activity;
68
+ this.eventEmitter = eventEmitter;
69
+ this.childRegistry = childRegistry;
70
+ this.externalComponentCreators = externalComponentCreators;
71
+ typefaceManager = new TypefaceLoader(activity);
72
+ }
73
+
74
+ public ViewController<?> create(final LayoutNode node) {
75
75
  final ReactContext context = reactInstanceManager.getCurrentReactContext();
76
76
  switch (node.type) {
77
77
  case Component:
78
78
  return createComponent(context, node);
79
- case ExternalComponent:
80
- return createExternalComponent(context, node);
79
+ case ExternalComponent:
80
+ return createExternalComponent(context, node);
81
81
  case Stack:
82
82
  return createStack(context, node);
83
83
  case BottomTabs:
@@ -90,22 +90,22 @@ public class LayoutFactory {
90
90
  return createSideMenuLeft(node);
91
91
  case SideMenuRight:
92
92
  return createSideMenuRight(node);
93
- case TopTabs:
94
- return createTopTabs(context, node);
93
+ case TopTabs:
94
+ return createTopTabs(context, node);
95
95
  default:
96
96
  throw new IllegalArgumentException("Invalid node type: " + node.type);
97
97
  }
98
98
  }
99
99
 
100
- private ViewController createSideMenuRoot(ReactContext context, LayoutNode node) {
100
+ private ViewController<?> createSideMenuRoot(ReactContext context, LayoutNode node) {
101
101
  SideMenuController sideMenuController = new SideMenuController(activity,
102
- childRegistry,
103
- node.id,
104
- parse(context, typefaceManager, node.getOptions()),
105
- new SideMenuPresenter(),
106
- new Presenter(activity, defaultOptions)
107
- );
108
- ViewController childControllerCenter = null, childControllerLeft = null, childControllerRight = null;
102
+ childRegistry,
103
+ node.id,
104
+ parse(context, typefaceManager, node.getOptions()),
105
+ new SideMenuPresenter(),
106
+ new Presenter(activity, defaultOptions)
107
+ );
108
+ ViewController<?> childControllerCenter = null, childControllerLeft = null, childControllerRight = null;
109
109
 
110
110
  for (LayoutNode child : node.children) {
111
111
  switch (child.type) {
@@ -141,105 +141,105 @@ public class LayoutFactory {
141
141
  return sideMenuController;
142
142
  }
143
143
 
144
- private ViewController createSideMenuContent(LayoutNode node) {
144
+ private ViewController<?> createSideMenuContent(LayoutNode node) {
145
145
  return create(node.children.get(0));
146
146
  }
147
147
 
148
- private ViewController createSideMenuLeft(LayoutNode node) {
148
+ private ViewController<?> createSideMenuLeft(LayoutNode node) {
149
149
  return create(node.children.get(0));
150
150
  }
151
151
 
152
- private ViewController createSideMenuRight(LayoutNode node) {
152
+ private ViewController<?> createSideMenuRight(LayoutNode node) {
153
153
  return create(node.children.get(0));
154
154
  }
155
155
 
156
- private ViewController createComponent(ReactContext context, LayoutNode node) {
156
+ private ViewController<?> createComponent(ReactContext context, LayoutNode node) {
157
157
  String id = node.id;
158
158
  String name = node.data.optString("name");
159
- return new ComponentViewController(activity,
160
- childRegistry,
161
- id,
162
- name,
163
- new ComponentViewCreator(reactInstanceManager),
164
- parse(context, typefaceManager, node.getOptions()),
165
- new Presenter(activity, defaultOptions),
166
- new ComponentPresenter(defaultOptions)
167
- );
159
+ return new ComponentViewController(activity,
160
+ childRegistry,
161
+ id,
162
+ name,
163
+ new ComponentViewCreator(reactInstanceManager),
164
+ parse(context, typefaceManager, node.getOptions()),
165
+ new Presenter(activity, defaultOptions),
166
+ new ComponentPresenter(defaultOptions)
167
+ );
168
168
  }
169
169
 
170
- private ViewController createExternalComponent(ReactContext context, LayoutNode node) {
171
- final ExternalComponent externalComponent = ExternalComponent.parse(node.data);
172
- return new ExternalComponentViewController(activity,
173
- childRegistry,
174
- node.id,
175
- new Presenter(activity, defaultOptions),
176
- externalComponent,
177
- externalComponentCreators.get(externalComponent.name.get()),
178
- reactInstanceManager,
179
- new EventEmitter(context),
180
- new ExternalComponentPresenter(),
181
- parse(context, typefaceManager, node.getOptions())
182
- );
183
- }
184
-
185
- private ViewController createStack(ReactContext context, LayoutNode node) {
186
- return new StackControllerBuilder(activity, eventEmitter)
187
- .setChildren(createChildren(node.children))
188
- .setChildRegistry(childRegistry)
189
- .setTopBarController(new TopBarController())
190
- .setId(node.id)
191
- .setInitialOptions(parse(context, typefaceManager, node.getOptions()))
192
- .setStackPresenter(new StackPresenter(activity,
193
- new TitleBarReactViewCreator(reactInstanceManager),
194
- new TopBarBackgroundViewCreator(reactInstanceManager),
195
- new TitleBarButtonCreator(reactInstanceManager),
196
- new IconResolver(activity, new ImageLoader()),
197
- new TypefaceLoader(activity),
198
- new RenderChecker(),
199
- defaultOptions
200
- ))
201
- .setPresenter(new Presenter(activity, defaultOptions))
202
- .build();
170
+ private ViewController<?> createExternalComponent(ReactContext context, LayoutNode node) {
171
+ final ExternalComponent externalComponent = ExternalComponent.parse(node.data);
172
+ return new ExternalComponentViewController(activity,
173
+ childRegistry,
174
+ node.id,
175
+ new Presenter(activity, defaultOptions),
176
+ externalComponent,
177
+ externalComponentCreators.get(externalComponent.name.get()),
178
+ reactInstanceManager,
179
+ new EventEmitter(context),
180
+ new ExternalComponentPresenter(),
181
+ parse(context, typefaceManager, node.getOptions())
182
+ );
203
183
  }
204
184
 
205
- private List<ViewController> createChildren(List<LayoutNode> children) {
206
- List<ViewController> result = new ArrayList<>();
207
- for (LayoutNode child : children) {
208
- result.add(create(child));
209
- }
210
- return result;
211
- }
212
-
213
- private ViewController createBottomTabs(ReactContext context, LayoutNode node) {
214
- List<ViewController<?>> tabs = map(node.children, this::create);
215
- BottomTabsPresenter bottomTabsPresenter = new BottomTabsPresenter(tabs, defaultOptions, new BottomTabsAnimator());
216
- return new BottomTabsController(activity,
217
- tabs,
218
- childRegistry,
219
- eventEmitter,
220
- new ImageLoader(),
221
- node.id,
222
- parse(context, typefaceManager, node.getOptions()),
223
- new Presenter(activity, defaultOptions),
224
- new BottomTabsAttacher(tabs, bottomTabsPresenter, defaultOptions),
225
- bottomTabsPresenter,
226
- new BottomTabPresenter(activity, tabs, new ImageLoader(), new TypefaceLoader(activity), defaultOptions));
185
+ private ViewController<?> createStack(ReactContext context, LayoutNode node) {
186
+ return new StackControllerBuilder(activity, eventEmitter)
187
+ .setChildren(createChildren(node.children))
188
+ .setChildRegistry(childRegistry)
189
+ .setTopBarController(new TopBarController())
190
+ .setId(node.id)
191
+ .setInitialOptions(parse(context, typefaceManager, node.getOptions()))
192
+ .setStackPresenter(new StackPresenter(activity,
193
+ new TitleBarReactViewCreator(reactInstanceManager),
194
+ new TopBarBackgroundViewCreator(reactInstanceManager),
195
+ new TitleBarButtonCreator(reactInstanceManager),
196
+ new IconResolver(activity, new ImageLoader()),
197
+ new TypefaceLoader(activity),
198
+ new RenderChecker(),
199
+ defaultOptions
200
+ ))
201
+ .setPresenter(new Presenter(activity, defaultOptions))
202
+ .build();
227
203
  }
228
204
 
229
- private ViewController createTopTabs(ReactContext context, LayoutNode node) {
230
- final List<ViewController> tabs = new ArrayList<>();
231
- for (int i = 0; i < node.children.size(); i++) {
232
- ViewController tabController = create(node.children.get(i));
233
- Options options = parse(context, typefaceManager, node.children.get(i).getOptions());
234
- options.setTopTabIndex(i);
235
- tabs.add(tabController);
236
- }
237
- return new TopTabsController(activity, childRegistry, node.id, tabs, new TopTabsLayoutCreator(activity, tabs), parse(context, typefaceManager, node.getOptions()), new Presenter(activity, defaultOptions));
238
- }
239
-
240
- @NonNull
241
- @RestrictTo(RestrictTo.Scope.TESTS)
242
- public Options getDefaultOptions() {
243
- return defaultOptions;
244
- }
205
+ private List<ViewController<?>> createChildren(List<LayoutNode> children) {
206
+ List<ViewController<?>> result = new ArrayList<>();
207
+ for (LayoutNode child : children) {
208
+ result.add(create(child));
209
+ }
210
+ return result;
211
+ }
212
+
213
+ private ViewController<?> createBottomTabs(ReactContext context, LayoutNode node) {
214
+ List<ViewController<?>> tabs = map(node.children, this::create);
215
+ BottomTabsPresenter bottomTabsPresenter = new BottomTabsPresenter(tabs, defaultOptions, new BottomTabsAnimator());
216
+ return new BottomTabsController(activity,
217
+ tabs,
218
+ childRegistry,
219
+ eventEmitter,
220
+ new ImageLoader(),
221
+ node.id,
222
+ parse(context, typefaceManager, node.getOptions()),
223
+ new Presenter(activity, defaultOptions),
224
+ new BottomTabsAttacher(tabs, bottomTabsPresenter, defaultOptions),
225
+ bottomTabsPresenter,
226
+ new BottomTabPresenter(activity, tabs, new ImageLoader(), new TypefaceLoader(activity), defaultOptions));
227
+ }
228
+
229
+ private ViewController<?> createTopTabs(ReactContext context, LayoutNode node) {
230
+ final List<ViewController<?>> tabs = new ArrayList<>();
231
+ for (int i = 0; i < node.children.size(); i++) {
232
+ ViewController<?> tabController = create(node.children.get(i));
233
+ Options options = parse(context, typefaceManager, node.children.get(i).getOptions());
234
+ options.setTopTabIndex(i);
235
+ tabs.add(tabController);
236
+ }
237
+ return new TopTabsController(activity, childRegistry, node.id, tabs, new TopTabsLayoutCreator(activity, tabs), parse(context, typefaceManager, node.getOptions()), new Presenter(activity, defaultOptions));
238
+ }
239
+
240
+ @NonNull
241
+ @RestrictTo(RestrictTo.Scope.TESTS)
242
+ public Options getDefaultOptions() {
243
+ return defaultOptions;
244
+ }
245
245
  }
@@ -60,9 +60,9 @@ class ValueAnimationOptions {
60
60
  return animator
61
61
  }
62
62
 
63
- override fun equals(o: Any?): Boolean {
64
- if (this === o) return true
65
- return if (o == null || javaClass != o.javaClass) false else animProp == (o as ValueAnimationOptions).animProp
63
+ override fun equals(other: Any?): Boolean {
64
+ if (this === other) return true
65
+ return if (other == null || javaClass != other.javaClass) false else animProp == (other as ValueAnimationOptions).animProp
66
66
  }
67
67
 
68
68
  fun equals(animationProperty: Property<View?, Float?>): Boolean {
@@ -7,35 +7,35 @@ class SpringInterpolator(private val mass: Float = 3f, private val damping: Floa
7
7
  private val velocity: Float = initialVelocity
8
8
 
9
9
  override fun getInterpolation(t: Float): Float {
10
- val b = damping;
11
- val m = mass;
12
- val k = stiffness;
13
- val v0 = velocity;
10
+ val b = damping
11
+ val m = mass
12
+ val k = stiffness
13
+ val v0 = velocity
14
14
 
15
- var beta = b / (2 * m);
16
- val omega0 = sqrt(k / m);
17
- val omega1 = sqrt((omega0 * omega0) - (beta * beta));
18
- val omega2 = sqrt((beta * beta) - (omega0 * omega0));
15
+ var beta = b / (2 * m)
16
+ val omega0 = sqrt(k / m)
17
+ val omega1 = sqrt((omega0 * omega0) - (beta * beta))
18
+ val omega2 = sqrt((beta * beta) - (omega0 * omega0))
19
19
 
20
- val x0 = -1;
20
+ val x0 = -1
21
21
 
22
- if (!this.allowsOverdamping && beta > omega0) beta = omega0;
22
+ if (!this.allowsOverdamping && beta > omega0) beta = omega0
23
23
  if (t == 1f) {
24
24
  return 1f
25
25
  }
26
26
  return when {
27
27
  beta < omega0 -> {
28
28
  // Underdamped
29
- val envelope = exp(-beta * t);
30
- -x0 + envelope * (x0 * cos(omega1 * t) + ((beta * x0 + v0) / omega1) * sin(omega1 * t));
29
+ val envelope = exp(-beta * t)
30
+ -x0 + envelope * (x0 * cos(omega1 * t) + ((beta * x0 + v0) / omega1) * sin(omega1 * t))
31
31
  }
32
32
  beta == omega0 -> {
33
- val envelope = exp(-beta * t);
34
- -x0 + envelope * (x0 + (beta * x0 + v0) * t);
33
+ val envelope = exp(-beta * t)
34
+ -x0 + envelope * (x0 + (beta * x0 + v0) * t)
35
35
  }
36
36
  else -> {
37
- val envelope = exp(-beta * t);
38
- -x0 + envelope * (x0 * cosh(omega2 * t) + ((beta * x0 + v0) / omega2) * sinh(omega2 * t));
37
+ val envelope = exp(-beta * t)
38
+ -x0 + envelope * (x0 * cosh(omega2 * t) + ((beta * x0 + v0) / omega2) * sinh(omega2 * t))
39
39
  }
40
40
  }
41
41
  }
@@ -2,7 +2,6 @@ package com.reactnativenavigation.options.parsers
2
2
 
3
3
  import android.content.Context
4
4
  import android.graphics.Typeface
5
- import android.text.TextUtils
6
5
  import com.reactnativenavigation.utils.ReactTypefaceUtils
7
6
 
8
7
  open class TypefaceLoader(private val context: Context) {
@@ -1,7 +1,5 @@
1
1
  package com.reactnativenavigation.react;
2
2
 
3
- import com.reactnativenavigation.react.CommandListener;
4
-
5
3
  import androidx.annotation.Nullable;
6
4
 
7
5
  public class CommandListenerAdapter implements CommandListener {
@@ -30,6 +30,7 @@ import com.reactnativenavigation.viewcontrollers.navigator.Navigator;
30
30
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
31
31
 
32
32
  import java.util.ArrayList;
33
+ import java.util.Objects;
33
34
 
34
35
  import static com.reactnativenavigation.utils.UiUtils.pxToDp;
35
36
 
@@ -107,9 +108,9 @@ public class NavigationModule extends ReactContextBaseJavaModule {
107
108
 
108
109
  @ReactMethod
109
110
  public void setRoot(String commandId, ReadableMap rawLayoutTree, Promise promise) {
110
- final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree).optJSONObject("root"));
111
+ final LayoutNode layoutTree = LayoutNodeParser.parse(Objects.requireNonNull(jsonParser.parse(rawLayoutTree).optJSONObject("root")));
111
112
  handle(() -> {
112
- final ViewController viewController = layoutFactory.create(layoutTree);
113
+ final ViewController<?> viewController = layoutFactory.create(layoutTree);
113
114
  navigator().setRoot(viewController, new NativeCommandListener("setRoot", commandId, promise, eventEmitter, now), reactInstanceManager);
114
115
  });
115
116
  }
@@ -132,7 +133,7 @@ public class NavigationModule extends ReactContextBaseJavaModule {
132
133
  public void push(String commandId, String onComponentId, ReadableMap rawLayoutTree, Promise promise) {
133
134
  final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree));
134
135
  handle(() -> {
135
- final ViewController viewController = layoutFactory.create(layoutTree);
136
+ final ViewController<?> viewController = layoutFactory.create(layoutTree);
136
137
  navigator().push(onComponentId, viewController, new NativeCommandListener("push", commandId, promise, eventEmitter, now));
137
138
  });
138
139
  }
@@ -140,7 +141,7 @@ public class NavigationModule extends ReactContextBaseJavaModule {
140
141
  @ReactMethod
141
142
  public void setStackRoot(String commandId, String onComponentId, ReadableArray children, Promise promise) {
142
143
  handle(() -> {
143
- ArrayList<ViewController> _children = new ArrayList<>();
144
+ ArrayList<ViewController<?>> _children = new ArrayList<>();
144
145
  for (int i = 0; i < children.size(); i++) {
145
146
  final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(children.getMap(i)));
146
147
  _children.add(layoutFactory.create(layoutTree));
@@ -168,7 +169,7 @@ public class NavigationModule extends ReactContextBaseJavaModule {
168
169
  public void showModal(String commandId, ReadableMap rawLayoutTree, Promise promise) {
169
170
  final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree));
170
171
  handle(() -> {
171
- final ViewController viewController = layoutFactory.create(layoutTree);
172
+ final ViewController<?> viewController = layoutFactory.create(layoutTree);
172
173
  navigator().showModal(viewController, new NativeCommandListener("showModal", commandId, promise, eventEmitter, now));
173
174
  });
174
175
  }
@@ -190,7 +191,7 @@ public class NavigationModule extends ReactContextBaseJavaModule {
190
191
  public void showOverlay(String commandId, ReadableMap rawLayoutTree, Promise promise) {
191
192
  final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree));
192
193
  handle(() -> {
193
- final ViewController viewController = layoutFactory.create(layoutTree);
194
+ final ViewController<?> viewController = layoutFactory.create(layoutTree);
194
195
  navigator().showOverlay(viewController, new NativeCommandListener("showOverlay", commandId, promise, eventEmitter, now));
195
196
  });
196
197
  }
@@ -5,7 +5,6 @@ import com.facebook.react.ReactPackage
5
5
  import com.facebook.react.bridge.NativeModule
6
6
  import com.facebook.react.bridge.ReactApplicationContext
7
7
  import com.facebook.react.uimanager.ViewManager
8
- import com.reactnativenavigation.NavigationActivity
9
8
  import com.reactnativenavigation.options.LayoutFactory
10
9
  import com.reactnativenavigation.react.modal.ModalViewManager
11
10
 
@@ -22,6 +21,6 @@ class NavigationPackage(private val reactNativeHost: ReactNativeHost) : ReactPac
22
21
 
23
22
  override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
24
23
 
25
- return listOf(ModalViewManager((reactContext.currentActivity as NavigationActivity).navigator))
24
+ return listOf(ModalViewManager(reactContext))
26
25
  }
27
26
  }
@@ -28,13 +28,13 @@ class ModalContentLayout(context: Context?) : ReactViewGroup(context), RootView{
28
28
  val reactContext: ReactContext = this.getReactContext()
29
29
  reactContext.runOnNativeModulesQueueThread(object : GuardedRunnable(reactContext) {
30
30
  override fun runGuarded() {
31
- val uiManager = this@ModalContentLayout.getReactContext().getNativeModule<UIManagerModule>(
32
- UIManagerModule::class.java
31
+ val uiManager = this@ModalContentLayout.getReactContext().getNativeModule(
32
+ UIManagerModule::class.java
33
33
  ) as UIManagerModule
34
34
  uiManager.updateNodeSize(
35
- viewTag,
36
- this@ModalContentLayout.viewWidth,
37
- this@ModalContentLayout.viewHeight
35
+ viewTag,
36
+ this@ModalContentLayout.viewWidth,
37
+ this@ModalContentLayout.viewHeight
38
38
  )
39
39
  }
40
40
  })
@@ -36,16 +36,16 @@ class ModalLayoutController(
36
36
  override fun sendOnNavigationButtonPressed(buttonId: String?) {
37
37
  if (buttonId == Constants.HARDWARE_BACK_BUTTON_ID) {
38
38
  val dispatcher = reactContext.getNativeModule(
39
- UIManagerModule::class.java
40
- ).eventDispatcher
41
- dispatcher.dispatchEvent(RequestCloseModalEvent(getHostId()))
39
+ UIManagerModule::class.java
40
+ )?.eventDispatcher
41
+ dispatcher?.dispatchEvent(RequestCloseModalEvent(getHostId()))
42
42
  }
43
43
  }
44
44
 
45
45
  fun sendShowEvent() {
46
46
  val dispatcher = reactContext.getNativeModule(
47
- UIManagerModule::class.java
48
- ).eventDispatcher
49
- dispatcher.dispatchEvent(ShowModalEvent(getHostId()))
47
+ UIManagerModule::class.java
48
+ )?.eventDispatcher
49
+ dispatcher?.dispatchEvent(ShowModalEvent(getHostId()))
50
50
  }
51
- }
51
+ }
@@ -4,6 +4,7 @@ import android.content.Context
4
4
  import android.graphics.Point
5
5
  import android.view.WindowManager
6
6
  import com.facebook.infer.annotation.Assertions
7
+ import com.facebook.react.bridge.ReactContext
7
8
  import com.facebook.react.bridge.ReadableMap
8
9
  import com.facebook.react.common.MapBuilder
9
10
  import com.facebook.react.module.annotations.ReactModule
@@ -12,6 +13,7 @@ import com.facebook.react.uimanager.ReactShadowNodeImpl
12
13
  import com.facebook.react.uimanager.ThemedReactContext
13
14
  import com.facebook.react.uimanager.ViewGroupManager
14
15
  import com.facebook.react.uimanager.annotations.ReactProp
16
+ import com.reactnativenavigation.NavigationActivity
15
17
  import com.reactnativenavigation.options.ModalPresentationStyle
16
18
  import com.reactnativenavigation.options.Options
17
19
  import com.reactnativenavigation.options.params.Bool
@@ -25,7 +27,15 @@ import com.reactnativenavigation.viewcontrollers.navigator.Navigator
25
27
  private const val MODAL_MANAGER_NAME = "RNNModalViewManager"
26
28
 
27
29
  @ReactModule(name = MODAL_MANAGER_NAME)
28
- class ModalViewManager(private val navigator: Navigator) : ViewGroupManager<ModalHostLayout>() {
30
+ class ModalViewManager(val reactContext: ReactContext) : ViewGroupManager<ModalHostLayout>() {
31
+
32
+ private val navigator: Navigator?
33
+ get() {
34
+ val navigationActivity = reactContext.currentActivity as? NavigationActivity
35
+ return navigationActivity?.let {
36
+ if (it.isFinishing || it.isDestroyed) null else it.navigator
37
+ }
38
+ }
29
39
  private val jsonParser = JSONParser()
30
40
  override fun getName(): String = MODAL_MANAGER_NAME
31
41
 
@@ -41,15 +51,18 @@ class ModalViewManager(private val navigator: Navigator) : ViewGroupManager<Moda
41
51
  return ModalHostShadowNode::class.java
42
52
  }
43
53
 
54
+
44
55
  override fun onDropViewInstance(modal: ModalHostLayout) {
45
56
  super.onDropViewInstance(modal)
46
- navigator.dismissModal(modal.viewController.id, CommandListenerAdapter())
47
- modal.onDropInstance()
57
+ navigator?.let {
58
+ it.dismissModal(modal.viewController.id, CommandListenerAdapter())
59
+ modal.onDropInstance()
60
+ }
48
61
  }
49
62
 
50
63
  override fun onAfterUpdateTransaction(modal: ModalHostLayout) {
51
64
  super.onAfterUpdateTransaction(modal)
52
- navigator.showModal(modal.viewController, CommandListenerAdapter(object : CommandListener {
65
+ navigator?.showModal(modal.viewController, CommandListenerAdapter(object : CommandListener {
53
66
  override fun onSuccess(childId: String?) {
54
67
  modal.viewController.sendShowEvent()
55
68
  }
@@ -70,23 +83,26 @@ class ModalViewManager(private val navigator: Navigator) : ViewGroupManager<Moda
70
83
  @ReactProp(name = "animation")
71
84
  fun setAnimation(modal: ModalHostLayout, animation: ReadableMap) {
72
85
  modal.viewController.mergeOptions(Options().apply {
73
- val animationJson = jsonParser.parse(animation)
86
+ val animationJson = jsonParser.parse(animation)
74
87
  val showModal = parseTransitionAnimationOptions(animationJson.optJSONObject("showModal"))
75
88
  val dismissModal = parseTransitionAnimationOptions(animationJson.optJSONObject("dismissModal"))
76
89
  this.animations.showModal = showModal
77
90
  this.animations.dismissModal = dismissModal
78
91
  })
79
92
  }
93
+
80
94
  @ReactProp(name = "blurOnUnmount")
81
95
  fun setBlurOnUnmount(modal: ModalHostLayout, blurOnUnmount: Boolean) {
82
- modal.viewController.mergeOptions(Options().apply {
83
- this.modal.blurOnUnmount = Bool(blurOnUnmount)
84
- })
96
+ modal.viewController.mergeOptions(Options().apply {
97
+ this.modal.blurOnUnmount = Bool(blurOnUnmount)
98
+ })
85
99
  }
100
+
86
101
  @ReactProp(name = "transparent")
87
102
  fun setTransparent(modal: ModalHostLayout, transparent: Boolean) {
88
103
  modal.viewController.mergeOptions(Options().apply {
89
- this.modal.presentationStyle = if(transparent) ModalPresentationStyle.OverCurrentContext else ModalPresentationStyle.None
104
+ this.modal.presentationStyle =
105
+ if (transparent) ModalPresentationStyle.OverCurrentContext else ModalPresentationStyle.None
90
106
  })
91
107
  }
92
108
  }
@@ -13,7 +13,7 @@ public class CoordinatorLayoutUtils {
13
13
  return new CoordinatorLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT);
14
14
  }
15
15
 
16
- public static CoordinatorLayout.LayoutParams matchParentWithBehaviour(CoordinatorLayout.Behavior behavior) {
16
+ public static CoordinatorLayout.LayoutParams matchParentWithBehaviour(CoordinatorLayout.Behavior<?> behavior) {
17
17
  CoordinatorLayout.LayoutParams lp = new CoordinatorLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT);
18
18
  lp.setBehavior(behavior);
19
19
  return lp;
@@ -2,7 +2,6 @@ package com.reactnativenavigation.utils
2
2
 
3
3
  import android.graphics.Outline
4
4
  import android.os.Build
5
- import android.util.Log
6
5
  import android.view.View
7
6
  import android.view.ViewOutlineProvider
8
7
  import androidx.annotation.RequiresApi
@@ -33,7 +33,7 @@ public class ReflectionUtils {
33
33
  return null;
34
34
  }
35
35
 
36
- private static Field getField(Class clazz, String name) {
36
+ private static Field getField(Class<?> clazz, String name) {
37
37
  try {
38
38
  return clazz.getDeclaredField(name);
39
39
  } catch (NoSuchFieldException nsfe) {
@@ -7,7 +7,7 @@ import java.util.Collection;
7
7
  import static com.reactnativenavigation.utils.CollectionUtils.reduce;
8
8
 
9
9
  public class RenderChecker {
10
- public boolean areRendered(Collection<ViewController> components) {
10
+ public boolean areRendered(Collection<ViewController<?>> components) {
11
11
  return reduce(components, true, ViewController::isRendered);
12
12
  }
13
13
  }
@@ -9,8 +9,6 @@ import android.view.WindowManager;
9
9
  import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
10
10
  import static com.reactnativenavigation.utils.UiUtils.dpToPx;
11
11
 
12
- import androidx.annotation.VisibleForTesting;
13
-
14
12
  public class StatusBarUtils {
15
13
  private static final int STATUS_BAR_HEIGHT_M = 24;
16
14
  private static final int STATUS_BAR_HEIGHT_L = 25;