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
package/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
package com.reactnativenavigation.options
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import com.reactnativenavigation.options.
|
|
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
|
-
|
|
50
|
+
private ChildControllersRegistry childRegistry;
|
|
51
51
|
private final ReactInstanceManager reactInstanceManager;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
80
|
-
|
|
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
|
-
|
|
94
|
-
|
|
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
|
-
|
|
100
|
+
private ViewController<?> createSideMenuRoot(ReactContext context, LayoutNode node) {
|
|
101
101
|
SideMenuController sideMenuController = new SideMenuController(activity,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
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
|
}
|
package/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt
CHANGED
|
@@ -60,9 +60,9 @@ class ValueAnimationOptions {
|
|
|
60
60
|
return animator
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
override fun equals(
|
|
64
|
-
if (this ===
|
|
65
|
-
return if (
|
|
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
|
}
|
package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt
CHANGED
|
@@ -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) {
|
|
@@ -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
|
|
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(
|
|
24
|
+
return listOf(ModalViewManager(reactContext))
|
|
26
25
|
}
|
|
27
26
|
}
|
package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt
CHANGED
|
@@ -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
|
|
32
|
-
|
|
31
|
+
val uiManager = this@ModalContentLayout.getReactContext().getNativeModule(
|
|
32
|
+
UIManagerModule::class.java
|
|
33
33
|
) as UIManagerModule
|
|
34
34
|
uiManager.updateNodeSize(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
viewTag,
|
|
36
|
+
this@ModalContentLayout.viewWidth,
|
|
37
|
+
this@ModalContentLayout.viewHeight
|
|
38
38
|
)
|
|
39
39
|
}
|
|
40
40
|
})
|
package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalLayoutController.kt
CHANGED
|
@@ -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
|
-
|
|
40
|
-
)
|
|
41
|
-
dispatcher
|
|
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
|
-
|
|
48
|
-
)
|
|
49
|
-
dispatcher
|
|
47
|
+
UIManagerModule::class.java
|
|
48
|
+
)?.eventDispatcher
|
|
49
|
+
dispatcher?.dispatchEvent(ShowModalEvent(getHostId()))
|
|
50
50
|
}
|
|
51
|
-
}
|
|
51
|
+
}
|
package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt
CHANGED
|
@@ -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(
|
|
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
|
|
47
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
83
|
-
|
|
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 =
|
|
104
|
+
this.modal.presentationStyle =
|
|
105
|
+
if (transparent) ModalPresentationStyle.OverCurrentContext else ModalPresentationStyle.None
|
|
90
106
|
})
|
|
91
107
|
}
|
|
92
108
|
}
|
package/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java
CHANGED
|
@@ -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;
|
|
@@ -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
|
|
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;
|