package com.luciofm.droidcon.ifican.fragment;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.graphics.Outline;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.view.ViewOutlineProvider;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.luciofm.droidcon.ifican.R;
import com.luciofm.droidcon.ifican.anim.AnimUtils;
import com.luciofm.droidcon.ifican.anim.XFractionProperty;
import com.luciofm.droidcon.ifican.util.Utils;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import pl.droidsonroids.gif.GifImageView;
public class CallAtentionFragment extends BaseFragment {
private static final long HEARTBEAT_ANIM_DELAY = 3000;
@InjectView(R.id.container)
ViewGroup container;
@InjectView(R.id.container2)
ViewGroup container2;
@InjectView(R.id.container3)
ViewGroup container3;
@InjectView(R.id.info)
View info;
@InjectView(R.id.text1)
TextView text1;
@InjectView(R.id.gif1)
GifImageView gif1;
@InjectView(R.id.gif2)
GifImageView gif2;
@InjectView(R.id.gif3)
GifImageView gif3;
public CallAtentionFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public int getLayout() {
return R.layout.fragment_call_atention;
}
@Override
public String getMessage() {
return "First, hello and thank you everyone…";
}
Handler handler = new Handler();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
View v = super.onCreateView(inflater, parent, savedInstanceState);
ButterKnife.inject(this, v);
currentStep = 1;
setOutlines(info);
AnimUtils.setupResizeTouchListener(info);
AnimUtils.popOutViewDelayed(info, 5000);
handler.removeCallbacks(heartbeatRunnable);
handler.postDelayed(heartbeatRunnable, HEARTBEAT_ANIM_DELAY);
Utils.stopGif(gif1, gif2, gif3);
Utils.resetGif(gif1, gif2, gif3);
return v;
}
@Override
public void onDestroyView() {
handler.removeCallbacks(heartbeatRunnable);
super.onDestroyView();
}
Runnable heartbeatRunnable = new Runnable() {
@Override
public void run() {
AnimUtils.animateHeartBeat(info);
handler.postDelayed(this, HEARTBEAT_ANIM_DELAY);
}
};
private void setOutlines(View v) {
v.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
int size = getResources().getDimensionPixelSize(R.dimen.floating_button_size);
outline.setOval(0, 0, size, size);
}
});
v.animate().alpha(1.0f);
}
@Override
public void onNextPressed() {
switch (++currentStep) {
case 2:
Utils.dispatchTouch(info, 300);
break;
case 3:
container2.animate().scaleY(0.5f).scaleX(0.5f);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) container2.getLayoutParams();
params.topMargin = Utils.dpToPx(getActivity(), 20) * -1;
container2.setLayoutParams(params);
container3.setVisibility(View.VISIBLE);
Utils.startGifDelayed(gif1, 600);
break;
case 4:
gif2.setVisibility(View.VISIBLE);
Utils.stopGif(gif1);
Utils.startGifDelayed(gif2);
break;
case 5:
gif3.setVisibility(View.VISIBLE);
Utils.stopGif(gif2);
Utils.startGifDelayed(gif3);
break;
default:
super.onNextPressed();
}
}
@Override
public void onPrevPressed() {
if (--currentStep == 1) {
Utils.dispatchTouch(info, 300);
return;
}
super.onPrevPressed();
}
@OnClick(R.id.info)
public void onInfoClick(View v) {
toggleCodeView(v);
}
private void toggleCodeView(View view) {
int cx = text1.getWidth();
int cy = 0;
float radius = text1.getWidth();
if (text1.getVisibility() == View.INVISIBLE) {
text1.setVisibility(View.VISIBLE);
ViewAnimationUtils.createCircularReveal(text1, cx, cy, 0, radius).start();
} else {
Animator reveal = ViewAnimationUtils.createCircularReveal(
text1, cx, cy, radius, 0);
reveal.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
text1.setVisibility(View.INVISIBLE);
}
});
reveal.start();
}
}
@OnClick(R.id.container)
public void onClick() {
onNextPressed();
}
@Override
public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) {
if (transit == 0 | enter) {
return null;
}
//Target will be filled in by the framework
return ObjectAnimator.ofFloat(null, new XFractionProperty(), 0f, -1f);
}
}