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.
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt +2 -5
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +120 -120
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt +3 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt +16 -16
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java +0 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +7 -6
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationPackage.kt +1 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +5 -5
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalLayoutController.kt +7 -7
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt +25 -9
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java +0 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java +5 -6
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt +0 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java +4 -5
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +6 -8
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +3 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java +3 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java +2 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java +5 -5
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +6 -6
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java +18 -18
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java +12 -12
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java +22 -22
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java +16 -16
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java +4 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java +8 -8
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java +14 -14
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +29 -29
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java +3 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +29 -28
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt +1 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java +2 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java +5 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java +8 -8
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt +1 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt +2 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt +2 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactViewRotationAnimator.kt +0 -5
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +1 -22
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java +2 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java +6 -6
- package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +23 -28
- package/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +4 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +3 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +0 -3
- package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +6 -6
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +3 -4
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java +13 -15
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +5 -5
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +4 -4
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +10 -10
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +25 -26
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +15 -15
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +11 -11
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +0 -4
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +15 -15
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +17 -17
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +3 -3
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +9 -9
- package/lib/dist/components/Modal.js +1 -2
- package/lib/src/components/Modal.tsx +1 -2
- package/package.json +1 -1
|
@@ -50,6 +50,7 @@ import java.util.HashMap;
|
|
|
50
50
|
import java.util.LinkedHashMap;
|
|
51
51
|
import java.util.List;
|
|
52
52
|
import java.util.Map;
|
|
53
|
+
import java.util.Objects;
|
|
53
54
|
|
|
54
55
|
import static com.reactnativenavigation.utils.CollectionUtils.difference;
|
|
55
56
|
import static com.reactnativenavigation.utils.CollectionUtils.filter;
|
|
@@ -124,7 +125,7 @@ public class StackPresenter {
|
|
|
124
125
|
}
|
|
125
126
|
|
|
126
127
|
public boolean isRendered(View component) {
|
|
127
|
-
ArrayList<ViewController
|
|
128
|
+
ArrayList<ViewController<?>> controllers = new ArrayList<>();
|
|
128
129
|
controllers.addAll(perform(componentRightButtons.get(component), new ArrayList<>(), Map::values));
|
|
129
130
|
controllers.addAll(perform(componentLeftButtons.get(component), new ArrayList<>(), Map::values));
|
|
130
131
|
controllers.add(backgroundControllers.get(component));
|
|
@@ -132,7 +133,7 @@ public class StackPresenter {
|
|
|
132
133
|
return renderChecker.areRendered(filter(controllers, ObjectUtils::notNull));
|
|
133
134
|
}
|
|
134
135
|
|
|
135
|
-
public void mergeOptions(Options options, StackController stack, ViewController currentChild) {
|
|
136
|
+
public void mergeOptions(Options options, StackController stack, ViewController<?> currentChild) {
|
|
136
137
|
TopBarOptions resolvedTopBarOptions = options.topBar.copy().mergeWithDefault(stack.resolveChildOptions(currentChild).topBar).mergeWithDefault(defaultOptions.topBar);
|
|
137
138
|
mergeOrientation(options.layout.orientation);
|
|
138
139
|
// mergeButtons(topBar, withDefault.topBar.buttons, child);
|
|
@@ -165,7 +166,7 @@ public class StackPresenter {
|
|
|
165
166
|
applyTopBarVisibility(withDefault.topBar);
|
|
166
167
|
}
|
|
167
168
|
|
|
168
|
-
public void applyChildOptions(Options currentChildOptions, StackController stack, ViewController child) {
|
|
169
|
+
public void applyChildOptions(Options currentChildOptions, StackController stack, ViewController<?> child) {
|
|
169
170
|
Options finalChildOptions = currentChildOptions.copy().withDefaultOptions(defaultOptions);
|
|
170
171
|
applyOrientation(finalChildOptions.layout.orientation);
|
|
171
172
|
applyButtons(finalChildOptions.topBar, child);
|
|
@@ -179,7 +180,7 @@ public class StackPresenter {
|
|
|
179
180
|
((Activity) topBar.getContext()).setRequestedOrientation(withDefaultOptions.getValue());
|
|
180
181
|
}
|
|
181
182
|
|
|
182
|
-
public void onChildDestroyed(ViewController child) {
|
|
183
|
+
public void onChildDestroyed(ViewController<?> child) {
|
|
183
184
|
perform(titleControllers.remove(child.getView()), TitleBarReactViewController::destroy);
|
|
184
185
|
perform(backgroundControllers.remove(child.getView()), TopBarBackgroundViewController::destroy);
|
|
185
186
|
destroyButtons(componentRightButtons.get(child.getView()));
|
|
@@ -192,7 +193,7 @@ public class StackPresenter {
|
|
|
192
193
|
if (buttons != null) forEach(buttons.values(), ViewController::destroy);
|
|
193
194
|
}
|
|
194
195
|
|
|
195
|
-
private void applyTopBarOptions(Options options, StackController stack, ViewController child) {
|
|
196
|
+
private void applyTopBarOptions(Options options, StackController stack, ViewController<?> child) {
|
|
196
197
|
final View component = child.getView();
|
|
197
198
|
TopBarOptions topBarOptions = options.topBar;
|
|
198
199
|
|
|
@@ -211,7 +212,7 @@ public class StackPresenter {
|
|
|
211
212
|
|
|
212
213
|
if (topBarOptions.title.component.hasValue()) {
|
|
213
214
|
if (titleControllers.containsKey(component)) {
|
|
214
|
-
topBarController.setTitleComponent(titleControllers.get(component));
|
|
215
|
+
topBarController.setTitleComponent(Objects.requireNonNull(titleControllers.get(component)));
|
|
215
216
|
} else {
|
|
216
217
|
TitleBarReactViewController controller = new TitleBarReactViewController(activity, titleViewCreator, topBarOptions.title.component);
|
|
217
218
|
controller.setWaitForRender(topBarOptions.title.component.waitForRender);
|
|
@@ -267,15 +268,15 @@ public class StackPresenter {
|
|
|
267
268
|
}
|
|
268
269
|
|
|
269
270
|
private void mergeStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Options toMerge) {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
271
|
+
if(toMerge.statusBar.drawBehind.hasValue()){
|
|
272
|
+
if(toMerge.statusBar.visible.isTrueOrUndefined() && toMerge.statusBar.drawBehind.isTrue()){
|
|
273
|
+
topBar.setTopPadding(StatusBarUtils.getStatusBarHeight(activity));
|
|
274
|
+
topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + StatusBarUtils.getStatusBarHeightDp(activity));
|
|
275
|
+
} else {
|
|
276
|
+
topBar.setTopPadding(0);
|
|
277
|
+
topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)));
|
|
278
|
+
}
|
|
279
|
+
}
|
|
279
280
|
}
|
|
280
281
|
|
|
281
282
|
@Nullable
|
|
@@ -289,7 +290,7 @@ public class StackPresenter {
|
|
|
289
290
|
return null;
|
|
290
291
|
}
|
|
291
292
|
|
|
292
|
-
private void applyTopBarVisibilityIfChildIsNotBeingAnimated(TopBarOptions options, StackController stack, ViewController child) {
|
|
293
|
+
private void applyTopBarVisibilityIfChildIsNotBeingAnimated(TopBarOptions options, StackController stack, ViewController<?> child) {
|
|
293
294
|
if (!stack.isChildInTransition(child) || options.animate.isFalse()) applyTopBarVisibility(options);
|
|
294
295
|
}
|
|
295
296
|
|
|
@@ -302,7 +303,7 @@ public class StackPresenter {
|
|
|
302
303
|
}
|
|
303
304
|
}
|
|
304
305
|
|
|
305
|
-
private void applyButtons(TopBarOptions options, ViewController child) {
|
|
306
|
+
private void applyButtons(TopBarOptions options, ViewController<?> child) {
|
|
306
307
|
if (options.buttons.right != null) {
|
|
307
308
|
List<ButtonOptions> rightButtons = mergeButtonsWithColor(options.buttons.right,
|
|
308
309
|
options.rightButtonColor
|
|
@@ -351,7 +352,7 @@ public class StackPresenter {
|
|
|
351
352
|
}
|
|
352
353
|
|
|
353
354
|
private List<ButtonController> getOrCreateButtonControllers(@Nullable Map<String, ButtonController> currentButtons, @NonNull List<ButtonOptions> buttons) {
|
|
354
|
-
ArrayList result = new ArrayList
|
|
355
|
+
ArrayList<ButtonController> result = new ArrayList<>();
|
|
355
356
|
for (ButtonOptions b : buttons) {
|
|
356
357
|
result.add(take(first(perform(currentButtons, null, Map::values), button -> button.getButton().equals(b)), createButtonController(b)));
|
|
357
358
|
}
|
|
@@ -383,7 +384,7 @@ public class StackPresenter {
|
|
|
383
384
|
}
|
|
384
385
|
}
|
|
385
386
|
|
|
386
|
-
public List<Animator> getAdditionalPushAnimations(StackController stack, ViewController appearing, Options appearingOptions) {
|
|
387
|
+
public List<Animator> getAdditionalPushAnimations(StackController stack, ViewController<?> appearing, Options appearingOptions) {
|
|
387
388
|
return CollectionUtils.asList(
|
|
388
389
|
topBarController.getPushAnimation(appearingOptions, getTopBarTranslationAnimationDelta(stack, appearing)),
|
|
389
390
|
perform(bottomTabsController, null, btc -> btc.getPushAnimation(appearingOptions))
|
|
@@ -397,14 +398,14 @@ public class StackPresenter {
|
|
|
397
398
|
);
|
|
398
399
|
}
|
|
399
400
|
|
|
400
|
-
public List<Animator> getAdditionalSetRootAnimations(StackController stack, ViewController appearing, Options appearingOptions) {
|
|
401
|
+
public List<Animator> getAdditionalSetRootAnimations(StackController stack, ViewController<?> appearing, Options appearingOptions) {
|
|
401
402
|
return CollectionUtils.asList(
|
|
402
403
|
topBarController.getSetStackRootAnimation(appearingOptions, getTopBarTranslationAnimationDelta(stack, appearing)),
|
|
403
404
|
perform(bottomTabsController, null, btc -> btc.getSetStackRootAnimation(appearingOptions))
|
|
404
405
|
);
|
|
405
406
|
}
|
|
406
407
|
|
|
407
|
-
public void mergeChildOptions(Options toMerge, Options resolvedOptions, StackController stack, ViewController child) {
|
|
408
|
+
public void mergeChildOptions(Options toMerge, Options resolvedOptions, StackController stack, ViewController<?> child) {
|
|
408
409
|
TopBarOptions topBar = toMerge.copy().topBar.mergeWithDefault(resolvedOptions.topBar).mergeWithDefault(defaultOptions.topBar);
|
|
409
410
|
mergeOrientation(toMerge.layout.orientation);
|
|
410
411
|
mergeButtons(topBar, toMerge.topBar, child.getView(), stack);
|
|
@@ -507,7 +508,7 @@ public class StackPresenter {
|
|
|
507
508
|
return result;
|
|
508
509
|
}
|
|
509
510
|
|
|
510
|
-
private void mergeTopBarOptions(TopBarOptions resolveOptions, Options options, StackController stack, ViewController child) {
|
|
511
|
+
private void mergeTopBarOptions(TopBarOptions resolveOptions, Options options, StackController stack, ViewController<?> child) {
|
|
511
512
|
TopBarOptions topBarOptions = options.topBar;
|
|
512
513
|
final View component = child.getView();
|
|
513
514
|
if (options.layout.direction.hasValue()) topBar.setLayoutDirection(options.layout.direction);
|
|
@@ -560,7 +561,7 @@ public class StackPresenter {
|
|
|
560
561
|
|
|
561
562
|
if (topBarOptions.background.component.hasValue()) {
|
|
562
563
|
if (backgroundControllers.containsKey(component)) {
|
|
563
|
-
topBar.setBackgroundComponent(backgroundControllers.get(component).getView());
|
|
564
|
+
topBar.setBackgroundComponent(Objects.requireNonNull(backgroundControllers.get(component)).getView());
|
|
564
565
|
} else {
|
|
565
566
|
TopBarBackgroundViewController controller = new TopBarBackgroundViewController(activity, topBarBackgroundViewCreator);
|
|
566
567
|
backgroundControllers.put(component, controller);
|
|
@@ -619,7 +620,7 @@ public class StackPresenter {
|
|
|
619
620
|
}
|
|
620
621
|
}
|
|
621
622
|
|
|
622
|
-
public boolean shouldPopOnHardwareButtonPress(ViewController viewController) {
|
|
623
|
+
public boolean shouldPopOnHardwareButtonPress(ViewController<?> viewController) {
|
|
623
624
|
return viewController.resolveCurrentOptions().hardwareBack.popStackOnPress.get(true);
|
|
624
625
|
}
|
|
625
626
|
|
|
@@ -650,7 +651,7 @@ public class StackPresenter {
|
|
|
650
651
|
}
|
|
651
652
|
|
|
652
653
|
|
|
653
|
-
public void applyTopInsets(StackController stack, ViewController child) {
|
|
654
|
+
public void applyTopInsets(StackController stack, ViewController<?> child) {
|
|
654
655
|
if (stack.isCurrentChild(child)) applyStatusBarInsets(stack, child);
|
|
655
656
|
child.applyTopInset();
|
|
656
657
|
}
|
|
@@ -663,18 +664,18 @@ public class StackPresenter {
|
|
|
663
664
|
return componentLeftButtons.containsKey(child) ? new ArrayList<>(componentLeftButtons.get(child).values()) : null;
|
|
664
665
|
}
|
|
665
666
|
|
|
666
|
-
private void applyStatusBarInsets(StackController stack, ViewController child) {
|
|
667
|
+
private void applyStatusBarInsets(StackController stack, ViewController<?> child) {
|
|
667
668
|
MarginLayoutParams lp = (MarginLayoutParams) topBar.getLayoutParams();
|
|
668
669
|
lp.topMargin = getTopBarTopMargin(stack, child);
|
|
669
670
|
topBar.requestLayout();
|
|
670
671
|
}
|
|
671
672
|
|
|
672
|
-
private int getTopBarTranslationAnimationDelta(StackController stack, ViewController child) {
|
|
673
|
+
private int getTopBarTranslationAnimationDelta(StackController stack, ViewController<?> child) {
|
|
673
674
|
Options options = stack.resolveChildOptions(child).withDefaultOptions(defaultOptions);
|
|
674
675
|
return options.statusBar.hasTransparency() ? getTopBarTopMargin(stack, child) : 0;
|
|
675
676
|
}
|
|
676
677
|
|
|
677
|
-
private int getTopBarTopMargin(StackController stack, ViewController child) {
|
|
678
|
+
private int getTopBarTopMargin(StackController stack, ViewController<?> child) {
|
|
678
679
|
Options withDefault = stack.resolveChildOptions(child).withDefaultOptions(defaultOptions);
|
|
679
680
|
int topMargin = UiUtils.dpToPx(activity, withDefault.topBar.topMargin.get(0));
|
|
680
681
|
int statusBarInset = withDefault.statusBar.visible.isTrueOrUndefined() && !withDefault.statusBar.drawBehind.isTrue() ? StatusBarUtils.getStatusBarHeight(child.getActivity()) : 0;
|
|
@@ -4,6 +4,7 @@ import com.reactnativenavigation.views.animations.BaseViewAnimator
|
|
|
4
4
|
import com.reactnativenavigation.views.stack.topbar.TopBar
|
|
5
5
|
|
|
6
6
|
class TopBarAnimator @JvmOverloads constructor(view: TopBar? = null) : BaseViewAnimator<TopBar>(HideDirection.Up, view) {
|
|
7
|
+
@Suppress("UNUSED_PARAMETER")
|
|
7
8
|
fun hideOnScroll(translationStart: Float, translationEndDy: Float) {
|
|
8
9
|
// NOOP for now - this entire mechanism needs to be reimplemented as it relies on bridge events which are obsolete in TurboModules config
|
|
9
10
|
}
|
|
@@ -5,7 +5,6 @@ import android.app.Activity;
|
|
|
5
5
|
import com.reactnativenavigation.options.ComponentOptions;
|
|
6
6
|
import com.reactnativenavigation.options.Options;
|
|
7
7
|
import com.reactnativenavigation.react.events.ComponentType;
|
|
8
|
-
import com.reactnativenavigation.react.events.EventEmitter;
|
|
9
8
|
import com.reactnativenavigation.utils.CompatUtils;
|
|
10
9
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
11
10
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.YellowBoxDelegate;
|
|
@@ -122,7 +122,7 @@ open class TopBarController(private val animator: TopBarAnimator = TopBarAnimato
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
open fun mergeLeftButtons(toAdd: List<ButtonController>, toRemove: List<ButtonController>) {
|
|
125
|
-
view.clearBackButton()
|
|
125
|
+
view.clearBackButton()
|
|
126
126
|
toRemove.forEach { view.removeLeftButton(it) }
|
|
127
127
|
forEachIndexed(toAdd) { b: ButtonController, i: Int -> b.addToMenu(leftButtonBar, i * 10) }
|
|
128
128
|
}
|
|
@@ -5,13 +5,13 @@ import com.reactnativenavigation.options.params.Bool;
|
|
|
5
5
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
6
6
|
|
|
7
7
|
public class BackButtonHelper {
|
|
8
|
-
public void clear(ViewController child) {
|
|
8
|
+
public void clear(ViewController<?> child) {
|
|
9
9
|
if (!child.options.topBar.buttons.back.hasValue()) {
|
|
10
10
|
child.options.topBar.buttons.back.visible = new Bool(false);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
public void addToPushedChild(ViewController child) {
|
|
14
|
+
public void addToPushedChild(ViewController<?> child) {
|
|
15
15
|
if (child.options.topBar.buttons.left != null || child.options.topBar.buttons.back.visible.isFalse()) return;
|
|
16
16
|
Options options = new Options();
|
|
17
17
|
options.topBar.buttons.back.setVisible();
|
|
@@ -88,7 +88,7 @@ open class ButtonPresenter(private val context: Context, private val button: But
|
|
|
88
88
|
menuItem.isEnabled = button.enabled.isTrueOrUndefined
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
private fun applyIconBackgroundDrawable(srcDrawable: Drawable): Drawable
|
|
91
|
+
private fun applyIconBackgroundDrawable(srcDrawable: Drawable): Drawable {
|
|
92
92
|
return if (button.iconBackground.hasValue()) {
|
|
93
93
|
val width = button.iconBackground.width.get(srcDrawable.intrinsicWidth).let { max(it, srcDrawable.intrinsicWidth) }
|
|
94
94
|
val height = button.iconBackground.height.get(srcDrawable.intrinsicHeight).let { max(it, srcDrawable.intrinsicHeight) }
|
|
@@ -5,7 +5,6 @@ import android.graphics.drawable.Drawable;
|
|
|
5
5
|
import android.util.Log;
|
|
6
6
|
|
|
7
7
|
import com.reactnativenavigation.options.ButtonOptions;
|
|
8
|
-
import com.reactnativenavigation.react.Constants;
|
|
9
8
|
import com.reactnativenavigation.utils.Functions.Func1;
|
|
10
9
|
import com.reactnativenavigation.utils.ImageLoader;
|
|
11
10
|
import com.reactnativenavigation.utils.ImageLoadingListenerAdapter;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
package com.reactnativenavigation.viewcontrollers.toptabs;
|
|
2
2
|
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
3
4
|
import androidx.viewpager.widget.PagerAdapter;
|
|
4
5
|
import androidx.viewpager.widget.ViewPager;
|
|
5
6
|
import android.view.View;
|
|
@@ -11,10 +12,10 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
|
11
12
|
import java.util.List;
|
|
12
13
|
|
|
13
14
|
public class TopTabsAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener {
|
|
14
|
-
private List<ViewController
|
|
15
|
+
private List<ViewController<?>> tabs;
|
|
15
16
|
private int currentPage = 0;
|
|
16
17
|
|
|
17
|
-
public TopTabsAdapter(List<ViewController
|
|
18
|
+
public TopTabsAdapter(List<ViewController<?>> tabs) {
|
|
18
19
|
this.tabs = tabs;
|
|
19
20
|
}
|
|
20
21
|
|
|
@@ -29,12 +30,12 @@ public class TopTabsAdapter extends PagerAdapter implements ViewPager.OnPageChan
|
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
@Override
|
|
32
|
-
public boolean isViewFromObject(View view, Object object) {
|
|
33
|
+
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
|
|
33
34
|
return view == object;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
@Override
|
|
37
|
-
public Object instantiateItem(ViewGroup component, int position) {
|
|
38
|
+
public Object instantiateItem(@NonNull ViewGroup component, int position) {
|
|
38
39
|
return tabs.get(position).getView();
|
|
39
40
|
}
|
|
40
41
|
|
|
@@ -21,14 +21,14 @@ import androidx.annotation.NonNull;
|
|
|
21
21
|
|
|
22
22
|
public class TopTabsController extends ParentController<TopTabsViewPager> {
|
|
23
23
|
|
|
24
|
-
private List<ViewController
|
|
24
|
+
private List<ViewController<?>> tabs;
|
|
25
25
|
private TopTabsLayoutCreator viewCreator;
|
|
26
26
|
|
|
27
|
-
public TopTabsController(Activity activity, ChildControllersRegistry childRegistry, String id, List<ViewController
|
|
27
|
+
public TopTabsController(Activity activity, ChildControllersRegistry childRegistry, String id, List<ViewController<?>> tabs, TopTabsLayoutCreator viewCreator, Options options, Presenter presenter) {
|
|
28
28
|
super(activity, childRegistry, id, presenter, options);
|
|
29
29
|
this.viewCreator = viewCreator;
|
|
30
30
|
this.tabs = tabs;
|
|
31
|
-
for (ViewController tab : tabs) {
|
|
31
|
+
for (ViewController<?> tab : tabs) {
|
|
32
32
|
tab.setParentController(this);
|
|
33
33
|
tab.setViewVisibilityListener(new ViewVisibilityListenerAdapter() {
|
|
34
34
|
@Override
|
|
@@ -40,7 +40,7 @@ public class TopTabsController extends ParentController<TopTabsViewPager> {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
@Override
|
|
43
|
-
public ViewController getCurrentChild() {
|
|
43
|
+
public ViewController<?> getCurrentChild() {
|
|
44
44
|
return tabs.get(getView().getCurrentItem());
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -53,7 +53,7 @@ public class TopTabsController extends ParentController<TopTabsViewPager> {
|
|
|
53
53
|
|
|
54
54
|
@NonNull
|
|
55
55
|
@Override
|
|
56
|
-
public Collection<? extends ViewController
|
|
56
|
+
public Collection<? extends ViewController<?>> getChildControllers() {
|
|
57
57
|
return tabs;
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -88,13 +88,13 @@ public class TopTabsController extends ParentController<TopTabsViewPager> {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
@Override
|
|
91
|
-
public void applyChildOptions(Options options, ViewController child) {
|
|
91
|
+
public void applyChildOptions(Options options, ViewController<?> child) {
|
|
92
92
|
super.applyChildOptions(options, child);
|
|
93
93
|
performOnParentController(parentController -> parentController.applyChildOptions(this.options.copy(), child));
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
@CallSuper
|
|
97
|
-
public void mergeChildOptions(Options options, ViewController child) {
|
|
97
|
+
public void mergeChildOptions(Options options, ViewController<?> child) {
|
|
98
98
|
super.mergeChildOptions(options, child);
|
|
99
99
|
performOnParentController(parentController -> parentController.applyChildOptions(options.copy(), child));
|
|
100
100
|
}
|
|
@@ -104,7 +104,7 @@ public class TopTabsController extends ParentController<TopTabsViewPager> {
|
|
|
104
104
|
getCurrentChild().onViewDidAppear();
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
private void performOnCurrentTab(Func1<ViewController
|
|
107
|
+
private void performOnCurrentTab(Func1<ViewController<?>> task) {
|
|
108
108
|
task.run(tabs.get(getView().getCurrentItem()));
|
|
109
109
|
}
|
|
110
110
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
package com.reactnativenavigation.views.bottomtabs
|
|
2
2
|
|
|
3
|
-
import android.R.attr.factor
|
|
4
3
|
import android.annotation.SuppressLint
|
|
5
4
|
import android.content.Context
|
|
6
5
|
import android.graphics.Color
|
|
7
6
|
import android.view.View
|
|
8
|
-
import android.widget.FrameLayout
|
|
9
7
|
import android.widget.LinearLayout
|
|
10
8
|
import androidx.annotation.RestrictTo
|
|
11
9
|
import androidx.core.graphics.ColorUtils
|
|
@@ -14,7 +12,6 @@ import kotlin.math.roundToInt
|
|
|
14
12
|
|
|
15
13
|
internal const val DEFAULT_SHADOW_COLOR = Color.BLACK
|
|
16
14
|
internal const val DEFAULT_SHADOW_RADIUS = 10
|
|
17
|
-
internal const val SHADOW_HEIGHT_DP = 20
|
|
18
15
|
internal const val DEFAULT_SHADOW_DISTANCE = 15f
|
|
19
16
|
internal const val DEFAULT_SHADOW_ANGLE = 270f
|
|
20
17
|
|
|
@@ -50,7 +47,7 @@ class BottomTabsContainer(context: Context, val bottomTabs: BottomTabs) : Shadow
|
|
|
50
47
|
setTopOutLineColor(DEFAULT_TOP_OUTLINE_COLOR)
|
|
51
48
|
this.topOutLineView.visibility = View.GONE
|
|
52
49
|
|
|
53
|
-
this.addView(linearLayout,
|
|
50
|
+
this.addView(linearLayout, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
|
|
54
51
|
}
|
|
55
52
|
|
|
56
53
|
override var shadowRadius: Float
|
|
@@ -21,7 +21,6 @@ public class BottomTabsLayout extends CoordinatorLayout {
|
|
|
21
21
|
@Override
|
|
22
22
|
public void addView(View child, int index, ViewGroup.LayoutParams params) {
|
|
23
23
|
if (bottomTabsContainer != null && child != bottomTabsContainer) {
|
|
24
|
-
int indexOfChild = this.indexOfChild(bottomTabsContainer);
|
|
25
24
|
super.addView(child, getChildCount() - 1, params);
|
|
26
25
|
} else {
|
|
27
26
|
super.addView(child, 0, params);
|
|
@@ -7,6 +7,7 @@ import com.reactnativenavigation.options.SharedElementTransitionOptions
|
|
|
7
7
|
import java.lang.reflect.ParameterizedType
|
|
8
8
|
|
|
9
9
|
abstract class PropertyAnimatorCreator<T : View> internal constructor(protected val from: View, protected val to: View) {
|
|
10
|
+
@Suppress("UNCHECKED_CAST")
|
|
10
11
|
@CallSuper
|
|
11
12
|
fun shouldAnimateProperty(): Boolean {
|
|
12
13
|
val type = childClass
|
|
@@ -21,6 +22,7 @@ abstract class PropertyAnimatorCreator<T : View> internal constructor(protected
|
|
|
21
22
|
protected open fun excludedViews() = emptyList<Class<*>>()
|
|
22
23
|
|
|
23
24
|
abstract fun create(options: SharedElementTransitionOptions): Animator
|
|
25
|
+
@Suppress("UNCHECKED_CAST")
|
|
24
26
|
private val childClass: Class<T>
|
|
25
27
|
get() = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<T>
|
|
26
28
|
|
|
@@ -4,7 +4,6 @@ import android.animation.Animator
|
|
|
4
4
|
import android.animation.ObjectAnimator
|
|
5
5
|
import android.graphics.Rect
|
|
6
6
|
import android.view.View
|
|
7
|
-
import android.widget.ImageView
|
|
8
7
|
import com.facebook.react.views.image.ReactImageView
|
|
9
8
|
import com.reactnativenavigation.options.SharedElementTransitionOptions
|
|
10
9
|
import com.reactnativenavigation.utils.ViewUtils
|
|
@@ -2,7 +2,6 @@ package com.reactnativenavigation.views.element.animators
|
|
|
2
2
|
|
|
3
3
|
import android.animation.Animator
|
|
4
4
|
import android.animation.ObjectAnimator
|
|
5
|
-
import android.animation.TypeEvaluator
|
|
6
5
|
import android.graphics.PointF
|
|
7
6
|
import android.graphics.Rect
|
|
8
7
|
import android.view.View
|
|
@@ -14,6 +13,7 @@ import com.reactnativenavigation.options.SharedElementTransitionOptions
|
|
|
14
13
|
import com.reactnativenavigation.utils.ViewUtils
|
|
15
14
|
import kotlin.math.max
|
|
16
15
|
import kotlin.math.roundToInt
|
|
16
|
+
import android.animation.TypeEvaluator
|
|
17
17
|
|
|
18
18
|
class ReactImageMatrixAnimator(from: View, to: View) : PropertyAnimatorCreator<ReactImageView>(from, to) {
|
|
19
19
|
override fun shouldAnimateProperty(fromChild: ReactImageView, toChild: ReactImageView): Boolean {
|
|
@@ -53,7 +53,7 @@ class ReactImageMatrixAnimator(from: View, to: View) : PropertyAnimatorCreator<R
|
|
|
53
53
|
|
|
54
54
|
private fun getScaleType(child: View): ScalingUtils.ScaleType {
|
|
55
55
|
return getScaleType(
|
|
56
|
-
|
|
56
|
+
child as ReactImageView, child.hierarchy.actualImageScaleType ?: ImageResizeMode.defaultValue()
|
|
57
57
|
)
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -2,14 +2,9 @@ package com.reactnativenavigation.views.element.animators
|
|
|
2
2
|
|
|
3
3
|
import android.animation.Animator
|
|
4
4
|
import android.animation.ObjectAnimator
|
|
5
|
-
import android.graphics.Rect
|
|
6
5
|
import android.view.View
|
|
7
|
-
import androidx.core.animation.doOnEnd
|
|
8
6
|
import com.facebook.react.views.view.ReactViewGroup
|
|
9
7
|
import com.reactnativenavigation.options.SharedElementTransitionOptions
|
|
10
|
-
import com.reactnativenavigation.utils.areDimensionsWithInheritedScaleEqual
|
|
11
|
-
import com.reactnativenavigation.utils.computeInheritedScale
|
|
12
|
-
import kotlin.math.roundToInt
|
|
13
8
|
|
|
14
9
|
class ReactViewRotationAnimator(from: View, to: View) : PropertyAnimatorCreator<ReactViewGroup>(from, to) {
|
|
15
10
|
private val fromRotation = from.rotation
|
|
@@ -2,30 +2,9 @@ package com.reactnativenavigation.views.stack.topbar.titlebar
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
5
|
-
import androidx.core.view.children
|
|
6
5
|
import com.facebook.react.ReactInstanceManager
|
|
7
6
|
import com.reactnativenavigation.react.ReactView
|
|
8
7
|
|
|
9
8
|
@SuppressLint("ViewConstructor")
|
|
10
9
|
class TitleBarReactView(context: Context?, reactInstanceManager: ReactInstanceManager?, componentId: String?,
|
|
11
|
-
componentName: String?) : ReactView(context, reactInstanceManager, componentId, componentName)
|
|
12
|
-
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
|
13
|
-
super.onMeasure(interceptReactRootViewMeasureSpec(widthMeasureSpec), heightMeasureSpec)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
private fun interceptReactRootViewMeasureSpec(widthMeasureSpec: Int): Int {
|
|
17
|
-
// This is a HACK.
|
|
18
|
-
// ReactRootView has problematic behavior when setting width to WRAP_CONTENT,
|
|
19
|
-
// It's causing infinite measurements, that hung up the UI.
|
|
20
|
-
// Intercepting largest child by width, and use its width as (parent) ReactRootView width fixed that.
|
|
21
|
-
// See for more details https://github.com/wix/react-native-navigation/pull/7096
|
|
22
|
-
var measuredWidth = 0;
|
|
23
|
-
this.children.forEach {
|
|
24
|
-
if (it.measuredWidth > measuredWidth) {
|
|
25
|
-
measuredWidth = it.measuredWidth
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return if (measuredWidth > 0) MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY) else
|
|
29
|
-
widthMeasureSpec
|
|
30
|
-
}
|
|
31
|
-
}
|
|
10
|
+
componentName: String?) : ReactView(context, reactInstanceManager, componentId, componentName)
|
|
@@ -9,9 +9,9 @@ import java.util.List;
|
|
|
9
9
|
|
|
10
10
|
public class TopTabsLayoutCreator {
|
|
11
11
|
private Context context;
|
|
12
|
-
private List<ViewController
|
|
12
|
+
private List<ViewController<?>> tabs;
|
|
13
13
|
|
|
14
|
-
public TopTabsLayoutCreator(Context context, List<ViewController
|
|
14
|
+
public TopTabsLayoutCreator(Context context, List<ViewController<?>> tabs) {
|
|
15
15
|
this.context = context;
|
|
16
16
|
this.tabs = tabs;
|
|
17
17
|
}
|
package/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java
CHANGED
|
@@ -22,9 +22,9 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
|
|
22
22
|
public class TopTabsViewPager extends ViewPager implements Component, ButtonController.OnClickListener {
|
|
23
23
|
|
|
24
24
|
private static final int OFFSCREEN_PAGE_LIMIT = 99;
|
|
25
|
-
private List<ViewController
|
|
25
|
+
private List<ViewController<?>> tabs;
|
|
26
26
|
|
|
27
|
-
public TopTabsViewPager(Context context, List<ViewController
|
|
27
|
+
public TopTabsViewPager(Context context, List<ViewController<?>> tabs, TopTabsAdapter adapter) {
|
|
28
28
|
super(context);
|
|
29
29
|
this.tabs = tabs;
|
|
30
30
|
initTabs(adapter);
|
|
@@ -32,7 +32,7 @@ public class TopTabsViewPager extends ViewPager implements Component, ButtonCont
|
|
|
32
32
|
|
|
33
33
|
private void initTabs(TopTabsAdapter adapter) {
|
|
34
34
|
setOffscreenPageLimit(OFFSCREEN_PAGE_LIMIT);
|
|
35
|
-
for (ViewController tab : tabs) {
|
|
35
|
+
for (ViewController<?> tab : tabs) {
|
|
36
36
|
addView(tab.getView(), new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
|
|
37
37
|
}
|
|
38
38
|
setAdapter(adapter);
|
|
@@ -45,7 +45,7 @@ public class TopTabsViewPager extends ViewPager implements Component, ButtonCont
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
private boolean areAllTabsRendered() {
|
|
48
|
-
for (ViewController tab : tabs) {
|
|
48
|
+
for (ViewController<?> tab : tabs) {
|
|
49
49
|
if (!tab.isRendered()) return false;
|
|
50
50
|
}
|
|
51
51
|
return true;
|
|
@@ -61,13 +61,13 @@ public class TopTabsViewPager extends ViewPager implements Component, ButtonCont
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
public void destroy() {
|
|
64
|
-
for (ViewController tab : tabs) {
|
|
64
|
+
for (ViewController<?> tab : tabs) {
|
|
65
65
|
tab.destroy();
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
public boolean isCurrentView(View view) {
|
|
70
|
-
for (ViewController tab : tabs) {
|
|
70
|
+
for (ViewController<?> tab : tabs) {
|
|
71
71
|
if (tab.getView() == view) {
|
|
72
72
|
return true;
|
|
73
73
|
}
|
|
@@ -8,7 +8,6 @@ import com.facebook.react.ReactPackage;
|
|
|
8
8
|
import com.facebook.react.common.LifecycleState;
|
|
9
9
|
import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
|
|
10
10
|
import com.reactnativenavigation.NavigationApplication;
|
|
11
|
-
import com.reactnativenavigation.react.DevBundleDownloadListenerAdapter;
|
|
12
11
|
|
|
13
12
|
import androidx.annotation.NonNull;
|
|
14
13
|
import androidx.annotation.Nullable;
|