package com.luciofm.droidcon.ifican.fragment;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
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 android.widget.TextView;
import com.luciofm.droidcon.ifican.R;
import com.luciofm.droidcon.ifican.activity.LTransitionActivity;
import com.luciofm.droidcon.ifican.activity.MainActivity;
import com.luciofm.droidcon.ifican.anim.XFractionProperty;
import com.luciofm.droidcon.ifican.anim.YFractionProperty;
import com.luciofm.droidcon.ifican.model.Dog;
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 ActivityLTransitionsCodeFragment extends BaseFragment {
private static final int REQUEST_CODE = 666;
@InjectView(R.id.container)
ViewGroup container;
@InjectView(R.id.grid)
GridView grid;
@InjectView(R.id.text1)
TextView text1;
ArrayList<Dog> dogs;
private int currentStep;
boolean override;
public ActivityLTransitionsCodeFragment() {
}
@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"));
}
@Override
public int getLayout() {
return R.layout.fragment_activity_transitions_code;
}
@Override
public String getMessage() {
return "";
}
@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;
text1.setText("Activity Transitions - L");
return v;
}
@Override
public void onNextPressed() {
switch (++currentStep) {
case 2:
int position = new Random().nextInt(grid.getChildCount());
clickListener.onItemClick(grid, grid.getChildAt(position), position, 0);
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();
Intent intent = new Intent(getActivity(), LTransitionActivity.class);
intent.putExtra("DOG", dog);
ImageView hero = (ImageView) ((ViewGroup) view).getChildAt(0);
//grid.setTransitionGroup(false);
container.setTransitionGroup(false);
ActivityOptions options =
ActivityOptions.makeSceneTransitionAnimation(getActivity(), hero, "photo_hero");
startActivityForResult(intent, REQUEST_CODE, options.toBundle());
}
};
@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 YFractionProperty(), 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);
image.setTransitionName(dog.getName());
return v;
}
}
}