package com.example.administrator.cookman.ui.component.fab_transformation;
import android.os.Build;
import android.view.View;
import com.example.administrator.cookman.ui.component.fab_transformation.animation.FabAnimator;
import com.example.administrator.cookman.ui.component.fab_transformation.animation.FabAnimatorLollipop;
import com.example.administrator.cookman.ui.component.fab_transformation.animation.FabAnimatorPreL;
public class FabTransformation {
private static final boolean IS_PRE_LOLLIPOP = Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP;
private static final long DEFAULT_DURATION = 300;
public static Builder with(View fab) {
return new Builder(fab);
}
public interface OnTransformListener {
void onStartTransform();
void onEndTransform();
}
public static class Builder {
private View fab;
private View overlay;
private FabAnimator animator;
private long duration;
private OnTransformListener listener;
public Builder(View fab) {
this.fab = fab;
this.animator = IS_PRE_LOLLIPOP ? new FabAnimatorPreL() : new FabAnimatorLollipop();
this.duration = DEFAULT_DURATION;
}
public Builder duration(long millsecond) {
this.duration = millsecond;
return this;
}
public Builder setListener(OnTransformListener listener) {
this.listener = listener;
return this;
}
public Builder setOverlay(View overlay) {
this.overlay = overlay;
return this;
}
public void transformTo(View transformView) {
if (transformView == null) {
throw new IllegalStateException("transformView is not set.");
}
if (fab.getVisibility() == View.VISIBLE) {
animator.transformTo(fab, transformView, duration, overlay, listener);
}
}
public void transformFrom(View transformView) {
if (transformView == null) {
throw new IllegalStateException("transformView is not set.");
}
if (fab.getVisibility() != View.VISIBLE) {
animator.transformOut(fab, transformView, duration, overlay, listener);
}
}
}
}