package com.reactnativenavigation.screens;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.widget.ScrollView;
import com.facebook.react.uimanager.RootViewUtil;
import com.reactnativenavigation.params.ScreenParams;
import com.reactnativenavigation.views.CollapsingContentView;
import com.reactnativenavigation.views.LeftButtonOnClickListener;
import com.reactnativenavigation.views.TopBar;
import com.reactnativenavigation.views.collapsingToolbar.CollapseAmount;
import com.reactnativenavigation.views.collapsingToolbar.CollapseCalculator;
import com.reactnativenavigation.views.collapsingToolbar.CollapsingTopBar;
import com.reactnativenavigation.views.collapsingToolbar.CollapsingView;
import com.reactnativenavigation.views.collapsingToolbar.CollapsingViewMeasurer;
import com.reactnativenavigation.views.collapsingToolbar.OnScrollListener;
import com.reactnativenavigation.views.collapsingToolbar.OnScrollViewAddedListener;
import com.reactnativenavigation.views.collapsingToolbar.ScrollListener;
import com.reactnativenavigation.views.collapsingToolbar.behaviours.CollapseBehaviour;
public class CollapsingSingleScreen extends SingleScreen {
public CollapsingSingleScreen(AppCompatActivity activity, ScreenParams screenParams, LeftButtonOnClickListener titleBarBarBackButtonListener) {
super(activity, screenParams, titleBarBarBackButtonListener);
}
@Override
public void destroy() {
super.destroy();
((CollapsingContentView) contentView).destroy();
}
@Override
protected TopBar createTopBar() {
final CollapsingTopBar topBar = new CollapsingTopBar(getContext(), styleParams);
topBar.setScrollListener(getScrollListener(topBar));
return topBar;
}
@Override
protected void createContent() {
contentView = new CollapsingContentView(getContext(), screenParams.screenId, screenParams.navigationParams);
setViewMeasurer();
setupCollapseDetection((CollapsingTopBar) topBar);
post(new Runnable() {
@Override
public void run() {
addView(contentView, createLayoutParams());
}
});
}
private void setViewMeasurer() {
if (screenParams.styleParams.drawScreenBelowTopBar || screenParams.styleParams.drawScreenAboveBottomTabs) {
contentView.setViewMeasurer(new CollapsingViewMeasurer((CollapsingTopBar) topBar, this, screenParams.styleParams));
}
}
private void setupCollapseDetection(final CollapsingTopBar topBar) {
((CollapsingContentView) contentView).setupCollapseDetection(getScrollListener(topBar), new OnScrollViewAddedListener() {
@Override
public void onScrollViewAdded(ScrollView scrollView) {
topBar.onScrollViewAdded(scrollView);
}
});
}
private ScrollListener getScrollListener(final CollapsingTopBar topBar) {
return new ScrollListener(new CollapseCalculator(topBar, getCollapseBehaviour()),
new OnScrollListener() {
@Override
public void onScroll(MotionEvent event, CollapseAmount amount) {
if (screenParams.styleParams.drawScreenBelowTopBar) {
RootViewUtil.getRootView(contentView).onChildStartedNativeGesture(event);
((CollapsingView) contentView).collapse(amount);
}
topBar.collapse(amount);
}
@Override
public void onFling(CollapseAmount amount) {
if (screenParams.styleParams.drawScreenBelowTopBar) {
((CollapsingView) contentView).fling(amount);
}
topBar.fling(amount);
}
},
getCollapseBehaviour()
);
}
private CollapseBehaviour getCollapseBehaviour() {
return screenParams.styleParams.collapsingTopBarParams.collapseBehaviour;
}
}