use of com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController in project react-native-navigation by wix.
the class LayoutFactory method createBottomTabs.
private ViewController<?> createBottomTabs(LayoutNode node) {
List<ViewController<?>> tabs = map(node.children, this::create);
BottomTabsPresenter bottomTabsPresenter = new BottomTabsPresenter(tabs, defaultOptions, new BottomTabsAnimator());
return new BottomTabsController(activity, tabs, childRegistry, eventEmitter, new ImageLoader(), node.id, parseOptions(node.getOptions()), new Presenter(activity, defaultOptions), new BottomTabsAttacher(tabs, bottomTabsPresenter, defaultOptions), bottomTabsPresenter, new BottomTabPresenter(activity, tabs, new ImageLoader(), new TypefaceLoader(activity), defaultOptions));
}
use of com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController in project react-native-navigation by wix.
the class ParentControllerTest method beforeEach.
@Override
public void beforeEach() {
super.beforeEach();
activity = newActivity();
childRegistry = new ChildControllersRegistry();
children = new ArrayList<>();
Options initialOptions = new Options();
initialOptions.topBar.title.text = new Text(INITIAL_TITLE);
presenter = spy(new Presenter(activity, new Options()));
uut = spy(new ParentController<ViewGroup>(activity, childRegistry, "uut", presenter, initialOptions) {
@Override
public ViewController<?> getCurrentChild() {
return children.get(0);
}
@NonNull
@Override
public ViewGroup createView() {
FrameLayout layout = new FrameLayout(activity);
for (ViewController<?> child : children) {
child.setParentController(this);
layout.addView(child.getView());
}
return layout;
}
@Override
public void sendOnNavigationButtonPressed(String buttonId) {
}
@NonNull
@Override
public Collection<ViewController<?>> getChildControllers() {
return children;
}
});
}
use of com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController in project react-native-navigation by wix.
the class ParentControllerTest method resolveCurrentOptions_mergesWithCurrentChild.
@Test
public void resolveCurrentOptions_mergesWithCurrentChild() {
ViewController child1 = Mockito.mock(ViewController.class);
when(child1.getView()).thenReturn(new FrameLayout(activity));
Options copiedChildOptions = spy(new Options());
Options childOptions = spy(new Options() {
@Override
public Options copy() {
return copiedChildOptions;
}
});
when(child1.resolveCurrentOptions()).thenReturn(childOptions);
children.add(child1);
uut.ensureViewIsCreated();
assertThat(uut.getCurrentChild()).isEqualTo(child1);
uut.resolveCurrentOptions();
verify(child1).resolveCurrentOptions();
verify(copiedChildOptions).withDefaultOptions(uut.initialOptions);
}
use of com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController in project react-native-navigation by wix.
the class StackPresenter method mergeTopBarOptions.
private void mergeTopBarOptions(TopBarOptions resolveOptions, Options toMerge, StackController stack, ViewController<?> child) {
TopBarOptions topBarOptions = toMerge.topBar;
final View component = child.getView();
if (toMerge.layout.direction.hasValue())
topBar.setLayoutDirection(toMerge.layout.direction);
if (topBarOptions.height.hasValue())
topBar.setHeight(topBarOptions.height.get());
if (topBarOptions.elevation.hasValue())
topBar.setElevation(topBarOptions.elevation.get());
if (topBarOptions.topMargin.hasValue() && topBar.getLayoutParams() instanceof MarginLayoutParams) {
((MarginLayoutParams) topBar.getLayoutParams()).topMargin = UiUtils.dpToPx(activity, topBarOptions.topMargin.get());
}
Options childOptions = stack.resolveChildOptions(child).mergeWith(toMerge).withDefaultOptions(defaultOptions);
mergeStatusBarDrawBehindOptions(resolveOptions, childOptions);
if (topBarOptions.title.height.hasValue())
topBar.setTitleHeight(topBarOptions.title.height.get());
if (topBarOptions.title.topMargin.hasValue())
topBar.setTitleTopMargin(topBarOptions.title.topMargin.get());
if (topBarOptions.animateLeftButtons.hasValue())
topBar.animateLeftButtons(topBarOptions.animateLeftButtons.isTrue());
if (topBarOptions.animateRightButtons.hasValue())
topBar.animateRightButtons(topBarOptions.animateRightButtons.isTrue());
if (topBarOptions.title.component.hasValue()) {
TitleBarReactViewController controller = findTitleComponent(topBarOptions.title.component);
if (controller == null) {
controller = new TitleBarReactViewController(activity, titleViewCreator, topBarOptions.title.component);
perform(titleControllers.put(component, controller), ViewController::destroy);
}
topBarController.setTitleComponent(controller);
topBarController.alignTitleComponent(topBarOptions.title.component.alignment);
} else if (topBarOptions.title.text.hasValue()) {
perform(titleControllers.remove(component), ViewController::destroy);
topBar.setTitle(topBarOptions.title.text.get());
topBarController.alignTitleComponent(topBarOptions.title.alignment);
}
if (resolveOptions.title.alignment != Alignment.Default) {
topBarController.alignTitleComponent(resolveOptions.title.alignment);
}
if (resolveOptions.title.color.hasValue())
topBar.setTitleTextColor(resolveOptions.title.color.get());
if (resolveOptions.title.fontSize.hasValue())
topBar.setTitleFontSize(resolveOptions.title.fontSize.get());
if (resolveOptions.title.font.hasValue())
topBar.setTitleTypeface(typefaceLoader, resolveOptions.title.font);
if (resolveOptions.subtitle.text.hasValue()) {
topBar.setSubtitle(resolveOptions.subtitle.text.get());
topBar.setSubtitleAlignment(resolveOptions.subtitle.alignment);
}
if (resolveOptions.subtitle.color.hasValue())
topBar.setSubtitleColor(resolveOptions.subtitle.color.get());
if (resolveOptions.subtitle.fontSize.hasValue()) {
topBar.setSubtitleFontSize(resolveOptions.subtitle.fontSize.get());
}
if (resolveOptions.subtitle.font.hasValue()) {
topBar.setSubtitleTypeface(typefaceLoader, resolveOptions.subtitle.font);
}
if (topBarOptions.background.color.hasValue())
topBar.setBackgroundColor(topBarOptions.background.color.get());
if (topBarOptions.background.component.hasValue()) {
if (backgroundControllers.containsKey(component)) {
topBar.setBackgroundComponent(Objects.requireNonNull(backgroundControllers.get(component)).getView());
} else {
TopBarBackgroundViewController controller = new TopBarBackgroundViewController(activity, topBarBackgroundViewCreator);
backgroundControllers.put(component, controller);
controller.setComponent(topBarOptions.background.component);
controller.getView().setLayoutParams(new RelativeLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
topBar.setBackgroundComponent(controller.getView());
}
}
if (topBarOptions.testId.hasValue())
topBar.setTestId(topBarOptions.testId.get());
if (topBarOptions.visible.isFalse()) {
if (topBarOptions.animate.isTrueOrUndefined()) {
topBarController.hideAnimate(new AnimationOptions(), getTopBarTranslationAnimationDelta(stack, child));
} else {
topBarController.hide();
}
}
if (topBarOptions.visible.isTrue()) {
if (topBarOptions.animate.isTrueOrUndefined()) {
topBarController.showAnimate(new AnimationOptions(), getTopBarTranslationAnimationDelta(stack, child));
} else {
topBarController.show();
}
}
if (topBarOptions.hideOnScroll.isTrue() && component instanceof IReactView) {
topBar.enableCollapse(((IReactView) component).getScrollEventListener());
}
if (topBarOptions.hideOnScroll.isFalse()) {
topBar.disableCollapse();
}
}
use of com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController in project react-native-navigation by wix.
the class NavigationModuleTest method setRoot_delegatesToNavigator.
@Test
public void setRoot_delegatesToNavigator() throws JSONException {
when(reactApplicationContext.getCurrentActivity()).thenReturn(activity);
ReadableMap root = mock(ReadableMap.class);
when(jsonParser.parse(root)).thenReturn(rootJson());
ViewController rootViewController = mock(ViewController.class);
when(layoutFactory.create(any(LayoutNode.class))).thenReturn(rootViewController);
uut.setRoot("1", root, mock(Promise.class));
ShadowLooper.idleMainLooper();
verify(navigator).setRoot(eq(rootViewController), any(), any());
}
Aggregations