package no.agens.depth;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.app.Fragment;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.StateListDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.SeekBar;
public class WindFragment extends Fragment implements MenuAnimation {
public static final int FLAMES_INITIAL_HEIGHT = 50;
private boolean introAnimate;
public WindFragment() {
}
View root;
MaterialMenuDrawable menuIcon;
BearSceneView bearsScene;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
root = inflater.inflate(R.layout.fragment_wind, container, false);
bearsScene = (BearSceneView) root.findViewById(R.id.water_scene);
doIntroAnimation();
setupFabButton();
setupMenuButton();
((RootActivity) getActivity()).setCurretMenuIndex(1);
setupSliders();
return root;
}
private void setupSliders() {
SeekBar windSeekbar = (SeekBar) root.findViewById(R.id.wind_seekbar);
final SeekBar flamesSeekbar = (SeekBar) root.findViewById(R.id.flames_seekbar);
setProgressBarColor(windSeekbar, getResources().getColor(R.color.fab2));
setProgressBarColor(flamesSeekbar, getResources().getColor(R.color.fab2));
windSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
bearsScene.setWind(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
flamesSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
bearsScene.setFlamesHeight(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
bearsScene.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
bearsScene.getViewTreeObserver().removeOnGlobalLayoutListener(this);
flamesSeekbar.setProgress(FLAMES_INITIAL_HEIGHT);
}
});
}
private void doIntroAnimation() {
if (introAnimate)
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
root.getViewTreeObserver().removeOnGlobalLayoutListener(this);
TransitionHelper.startIntroAnim(root, showShadowListener);
hideShadow();
bearsScene.postDelayed(new Runnable() {
@Override
public void run() {
bearsScene.setPause(true);
}
}, 10);
}
});
}
private void setupFabButton() {
root.findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
root.getViewTreeObserver().removeOnGlobalLayoutListener(this);
TransitionHelper.startExitAnim(root);
}
});
WaterFragment waterFragment = new WaterFragment();
waterFragment.setIntroAnimate(true);
((RootActivity) getActivity()).goToFragment(waterFragment);
if (((RootActivity) getActivity()).isMenuVisible)
((RootActivity) getActivity()).hideMenu();
hideShadow();
bearsScene.setPause(true);
}
});
}
private void setupMenuButton() {
ImageView menu = (ImageView) root.findViewById(R.id.menu);
menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!((RootActivity) getActivity()).isMenuVisible)
((RootActivity) getActivity()).showMenu();
else
getActivity().onBackPressed();
}
});
menuIcon = new MaterialMenuDrawable(getActivity(), Color.WHITE, MaterialMenuDrawable.Stroke.THIN, WaterFragment.TRANSFORM_DURATION);
menu.setImageDrawable(menuIcon);
}
public static void setProgressBarColor(SeekBar progressBar, int newColor) {
if (progressBar.getProgressDrawable() instanceof StateListDrawable) {
StateListDrawable ld = (StateListDrawable) progressBar.getProgressDrawable();
ld.setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
progressBar.getThumb().setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
} else if (progressBar.getProgressDrawable() instanceof LayerDrawable) {
LayerDrawable ld = (LayerDrawable) progressBar.getProgressDrawable();
for (int i = 0; i < ld.getNumberOfLayers(); i++) {
Drawable d1 = ld.getDrawable(i);
d1.setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
}
progressBar.getThumb().setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
}
}
public void setIntroAnimate(boolean introAnimate) {
this.introAnimate = introAnimate;
}
@Override
public void animateTOMenu() {
TransitionHelper.animateToMenuState(root, new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
bearsScene.setPause(false);
}
});
menuIcon.animateIconState(MaterialMenuDrawable.IconState.ARROW);
hideShadow();
bearsScene.setPause(true);
}
private void hideShadow() {
View actionbarShadow = root.findViewById(R.id.actionbar_shadow);
actionbarShadow.setVisibility(View.GONE);
}
@Override
public void revertFromMenu() {
TransitionHelper.startRevertFromMenu(root, showShadowListener);
menuIcon.animateIconState(MaterialMenuDrawable.IconState.BURGER);
bearsScene.setPause(true);
}
AnimatorListenerAdapter showShadowListener = new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
showShadow();
bearsScene.setPause(false);
}
};
private void showShadow() {
View actionbarShadow = root.findViewById(R.id.actionbar_shadow);
actionbarShadow.setVisibility(View.VISIBLE);
ObjectAnimator.ofFloat(actionbarShadow, View.ALPHA, 0, 0.8f).setDuration(400).start();
}
@Override
public void exitFromMenu() {
TransitionHelper.animateMenuOut(root);
bearsScene.setPause(true);
}
}