package com.luciofm.droidcon.ifican.fragment;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import com.luciofm.droidcon.ifican.IfICan;
import com.luciofm.droidcon.ifican.R;
import com.luciofm.droidcon.ifican.activity.MainActivity;
import com.luciofm.droidcon.ifican.activity.TransitionActivity;
import com.luciofm.droidcon.ifican.anim.XFractionProperty;
import com.luciofm.droidcon.ifican.model.Dog;
import com.luciofm.droidcon.ifican.model.ViewInfo;
import com.luciofm.droidcon.ifican.util.ActivityFinishEvent;
import com.luciofm.droidcon.ifican.util.Utils;
import com.squareup.otto.Subscribe;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
/**
* A simple {@link android.app.Fragment} subclass.
*
*/
public class ActivityTransitionsCodeFragment extends BaseFragment {
private static final int REQUEST_CODE = 666;
@InjectView(R.id.grid)
GridView grid;
ArrayList<Dog> dogs;
private int currentStep;
private View currentView;
private int currentPosition = -1;
boolean override;
public ActivityTransitionsCodeFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dogs = new ArrayList<>();
dogs.add(new Dog(R.drawable.dog1, "dog1"));
dogs.add(new Dog(R.drawable.dog2, "dog2"));
dogs.add(new Dog(R.drawable.dog3, "dog3"));
dogs.add(new Dog(R.drawable.dog6, "dog6"));
dogs.add(new Dog(R.drawable.dog7, "dog7"));
dogs.add(new Dog(R.drawable.dog8, "dog8"));
dogs.add(new Dog(R.drawable.dog9, "dog9"));
dogs.add(new Dog(R.drawable.dog10, "dog10"));
IfICan.getBusInstance().register(this);
}
@Override
public int getLayout() {
return R.layout.fragment_activity_transitions_code;
}
@Override
public String getMessage() {
return null;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.inject(this, v);
grid.setAdapter(new DogsAdapter(getActivity(), dogs));
grid.setSelector(android.R.color.transparent);
grid.setOnItemClickListener(clickListener);
currentStep = 1;
return v;
}
@Override
public void onDestroy() {
IfICan.getBusInstance().unregister(this);
super.onDestroy();
}
@Override
public void onNextPressed() {
switch (++currentStep) {
case 2:
int position = new Random().nextInt(grid.getChildCount());
Utils.dispatchTouch(grid.getChildAt(position));
break;
case 3:
override = false;
super.onNextPressed();
break;
}
}
AdapterView.OnItemClickListener clickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (override == true) {
override = false;
((MainActivity) getActivity()).nextFragment();
return;
}
if (currentStep == 1)
currentStep = 2;
Dog dog = (Dog) view.getTag();
ViewInfo info = new ViewInfo(view, position);
currentView = view;
currentView.animate().alpha(0f).setDuration(50);
currentPosition = position;
Intent intent = new Intent(getActivity(), TransitionActivity.class);
intent.putExtra("DOG", dog);
intent.putExtra("INFO", info);
startActivityForResult(intent, REQUEST_CODE);
getActivity().overridePendingTransition(0, 0);
}
};
@Subscribe
public void onActivityFinishedEvent(ActivityFinishEvent event) {
if (currentView != null) {
currentView.setAlpha(0f);
currentView.animate().alpha(1f)
.setStartDelay(Utils.calcDuration(currentPosition) - 300)
.setDuration(350);
}
}
@OnClick(R.id.container)
public void onClick() {
onNextPressed();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
/* Ok, we didn' went through all the steps in the TransitionActivity */
if (requestCode == REQUEST_CODE) {
override = false;
if (resultCode != Activity.RESULT_OK)
currentStep--;
else if (resultCode == Activity.RESULT_OK)
override = true;
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) {
if (transit == 0) {
return null;
}
//Target will be filled in by the framework
return enter ? ObjectAnimator.ofFloat(null, new XFractionProperty(), 1f, 0f)
: ObjectAnimator.ofFloat(null, new XFractionProperty(), 0f, -1f);
}
public class DogsAdapter extends ArrayAdapter<Dog> {
LayoutInflater inflater;
public DogsAdapter(Context context, List<Dog> objects) {
super(context, 0, objects);
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
v = inflater.inflate(R.layout.adapter_image, parent, false);
}
Dog dog = getItem(position);
ImageView image = ButterKnife.findById(v, R.id.image);
image.setImageResource(dog.getResource());
v.setTag(dog);
return v;
}
}
}