package com.reactnativenavigation.params.parsers;
import android.os.Bundle;
import com.reactnativenavigation.params.InterpolationParams;
import com.reactnativenavigation.params.LinearInterpolationParams;
import com.reactnativenavigation.params.PathInterpolationParams;
import com.reactnativenavigation.views.sharedElementTransition.ControlPoint;
class InterpolationParser extends Parser {
private Bundle params;
private static final float[] defaultShowControlPoints = new float[]{0.5f, 1, 0, 0.5f};
private static final float[] defaultHideControlPoints = new float[]{0.5f, 0, 1, 0.5f};
InterpolationParser(Bundle params) {
this.params = params;
}
InterpolationParams parseShowInterpolation() {
if (params.isEmpty()) {
return new LinearInterpolationParams();
}
return parse(params, defaultShowControlPoints);
}
InterpolationParams parseHideInterpolation() {
if (params.isEmpty()) {
return new LinearInterpolationParams();
}
return parse(params, defaultHideControlPoints);
}
private InterpolationParams parse(Bundle params, float[] defaultControlPoints) {
InterpolationParams.Type type = InterpolationParams.Type.fromString(params.getString("type"));
InterpolationParams result = InterpolationParams.Type.Path.equals(type) ?
parsePathInterpolation(params, defaultControlPoints) :
new LinearInterpolationParams();
result.easing = InterpolationParams.Easing.fromString(params.getString("easing"));
return result;
}
private InterpolationParams parsePathInterpolation(Bundle params, float[] defaultValues) {
PathInterpolationParams result = new PathInterpolationParams();
result.p1 = new ControlPoint(
Float.valueOf(params.getString("controlX1")), defaultValues[0],
Float.valueOf(params.getString("controlY1")), defaultValues[1]);
result.p2 = new ControlPoint(
Float.valueOf(params.getString("controlX2")), defaultValues[2],
Float.valueOf(params.getString("controlY2")), defaultValues[3]
);
return result;
}
}