package com.reactnativenavigation.views;
import android.content.Context;
import android.view.View;
import com.facebook.react.ReactRootView;
import com.reactnativenavigation.NavigationApplication;
import com.reactnativenavigation.params.NavigationParams;
import com.reactnativenavigation.screens.SingleScreen;
import com.reactnativenavigation.utils.ViewUtils;
import com.reactnativenavigation.views.utils.ViewMeasurer;
public class ContentView extends ReactRootView {
private final String screenId;
private final NavigationParams navigationParams;
boolean isContentVisible = false;
private SingleScreen.OnDisplayListener onDisplayListener;
protected ViewMeasurer viewMeasurer;
public void setOnDisplayListener(SingleScreen.OnDisplayListener onDisplayListener) {
this.onDisplayListener = onDisplayListener;
}
public ContentView(Context context, String screenId, NavigationParams navigationParams) {
super(context);
this.screenId = screenId;
this.navigationParams = navigationParams;
attachToJS();
viewMeasurer = new ViewMeasurer();
}
public void setViewMeasurer(ViewMeasurer viewMeasurer) {
this.viewMeasurer = viewMeasurer;
}
private void attachToJS() {
startReactApplication(NavigationApplication.instance.getReactGateway().getReactInstanceManager(), screenId,
navigationParams.toBundle());
}
public String getNavigatorEventId() {
return navigationParams.navigatorEventId;
}
public void unmountReactView() {
unmountReactApplication();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int measuredHeight = viewMeasurer.getMeasuredHeight(heightMeasureSpec);
setMeasuredDimension(viewMeasurer.getMeasuredWidth(widthMeasureSpec),
measuredHeight);
}
@Override
public void onViewAdded(final View child) {
super.onViewAdded(child);
detectContentViewVisible(child);
}
private void detectContentViewVisible(View child) {
if (onDisplayListener != null) {
ViewUtils.runOnPreDraw(child, new Runnable() {
@Override
public void run() {
if (!isContentVisible) {
isContentVisible = true;
onDisplayListener.onDisplay();
onDisplayListener = null;
}
}
});
}
}
}