package com.luciofm.droidcon.ifican.activity;
import android.animation.Animator;
import android.animation.TimeInterpolator;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.transition.Transition;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AnticipateOvershootInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.TextView;
import com.luciofm.droidcon.ifican.IfICan;
import com.luciofm.droidcon.ifican.R;
import com.luciofm.droidcon.ifican.anim.SimpleAnimatorListener;
import com.luciofm.droidcon.ifican.anim.TransitionAdapter;
import com.luciofm.droidcon.ifican.model.Dog;
import com.luciofm.droidcon.ifican.util.IOUtils;
import com.luciofm.droidcon.ifican.util.Utils;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import butterknife.Optional;
public class LTransitionActivity extends Activity {
private static final TimeInterpolator sDecelerator = new DecelerateInterpolator();
private static final TimeInterpolator sAccelerator = new AccelerateInterpolator();
private static final TimeInterpolator interpolator = new AnticipateOvershootInterpolator();
private static final int ANIM_DURATION = 800;
@InjectView(R.id.toplevel)
ViewGroup topLevel;
@InjectView(R.id.thumb)
ImageView image;
@InjectView(R.id.text1)
TextView text1;
@InjectView(R.id.text2)
TextView text2;
@InjectView(R.id.text3)
TextView text3;
@Optional
@InjectView(R.id.text4)
TextView text4;
Dog dog;
int currentStep = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_l_transition);
ButterKnife.inject(this);
Bundle bundle = getIntent().getExtras();
dog = bundle.getParcelable("DOG");
image.setImageResource(dog.getResource());
text1.setText(Html.fromHtml(IOUtils.readFile(this, "source/ltransition1.java.html")));
text2.setText(Html.fromHtml(IOUtils.readFile(this, "source/ltransition2.java.html")));
text3.setText(Html.fromHtml(IOUtils.readFile(this, "source/ltransition3.java.html")));
if (text4 != null)
text4.setText(Html.fromHtml(IOUtils.readFile(this, "source/ltransition4.java.html")));
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
animateTextIn();
}
}, 600);
getWindow().getEnterTransition().addListener(new TransitionAdapter() {
@Override
public void onTransitionEnd(Transition transition) {
getWindow().getEnterTransition().removeListener(this);
}
});
}
public void animateTextIn() {
final long duration = Utils.ANIM_DURATION;
text1.setVisibility(View.VISIBLE);
text1.setAlpha(0);
text1.setTranslationY(text1.getHeight());
text1.animate().setDuration(duration / 2)
.translationY(0).alpha(1)
.setInterpolator(sDecelerator);
}
public void onNextPressed() {
switch (++currentStep) {
case 2:
onText1Click();
break;
case 3:
onText2Click();
break;
case 4:
onText3Click();
break;
/*case 5:
onText4Click();
break;*/
}
}
@OnClick(R.id.text1)
public void onText1Click() {
final long duration = (long) (ANIM_DURATION);
animateText(text1, text2);
}
@OnClick(R.id.text2)
public void onText2Click() {
final long duration = (long) (ANIM_DURATION);
animateText(text2, text3);
}
@OnClick(R.id.text3)
public void onText3Click() {
//animateText(text3, text4);
setResult(RESULT_OK);
finishAfterTransition();
}
private void animateText(final View oldView, final View newView) {
final long duration = (long) (ANIM_DURATION);
newView.setAlpha(0);
newView.setVisibility(View.VISIBLE);
oldView.animate().translationY(oldView.getHeight())
.setDuration(duration / 2).alpha(0)
.setInterpolator(sDecelerator)
.setListener(new SimpleAnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
newView.setTranslationY(newView.getHeight());
newView.animate().setDuration(duration / 2)
.translationY(0).alpha(1)
.setInterpolator(sDecelerator);
oldView.setVisibility(View.GONE);
}
});
}
@Optional @OnClick(R.id.text4)
public void onText4Click() {
setResult(RESULT_OK);
finishAfterTransition();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d("IFICAN", "onKeyDown: " + keyCode + " - event: " + event);
int scanCode = event.getScanCode();
switch (scanCode) {
case IfICan.BUTTON_NEXT:
case 28:
case 229:
case 0x74:
onNextPressed();
return true;
case IfICan.BUTTON_PREV:
case 0x79:
case 57:
onBackPressed();
return true;
}
return super.onKeyDown(keyCode, event);
}
}