package com.andrewpham.android.khanacademy_learnanything.adapters;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.andrewpham.android.khanacademy_learnanything.R;
import com.andrewpham.android.khanacademy_learnanything.api.ApiClient;
import com.andrewpham.android.khanacademy_learnanything.controllers.SubtopicActivity;
import com.andrewpham.android.khanacademy_learnanything.controllers.TopicFragment;
import com.andrewpham.android.khanacademy_learnanything.node_object.NodeObject;
import com.andrewpham.android.khanacademy_learnanything.topic_model.Child;
import com.andrewpham.android.khanacademy_learnanything.topic_model.TopicData;
import java.util.ArrayList;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
/**
* Created by andrewpham on 4/24/15.
*/
public class TopicItemAdapter extends ArrayAdapter<NodeObject> {
Activity mActivity;
Context mContext;
ArrayList<NodeObject> mNodeObjects;
ViewHolder holder;
static class ViewHolder {
TextView title;
TextView description;
}
public TopicItemAdapter(Activity activity, Context context, ArrayList<NodeObject> items) {
super(activity, 0, items);
mActivity = activity;
mContext = context;
mNodeObjects = items;
}
private void getSubtopic(int pos) {
final NodeObject item = mNodeObjects.get(pos);
final ArrayList<String> nodeSlugs = new ArrayList<>();
ApiClient.get().getTopicData(item.getNodeSlug(), new Callback<TopicData>() {
@Override
public void success(final TopicData topicData, Response response) {
for (Child child : topicData.getChildren()) {
final String nodeSlug = child.getNodeSlug();
if (nodeSlug.startsWith("e/") || nodeSlug.startsWith("a/") ||
nodeSlug.startsWith("p/")) continue;
nodeSlugs.add(nodeSlug);
}
if (!nodeSlugs.isEmpty()) {
Intent i = new Intent(mActivity, SubtopicActivity.class);
i.putExtra(TopicFragment.EXTRA_NODE_SLUG, item.getNodeSlug());
i.putExtra(TopicFragment.EXTRA_TITLE, item.getTitle());
mContext.startActivity(i);
}
}
@Override
public void failure(RetrofitError error) {
}
});
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mActivity.getLayoutInflater()
.inflate(R.layout.topic_list_item, parent, false);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.description = (TextView) convertView.findViewById(R.id.description);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
NodeObject item = getItem(position);
holder.title.setText(item.getTitle());
holder.description.setText(item.getDescription());
convertView.setOnTouchListener(new View.OnTouchListener() {
private float startX;
private float startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
v.setBackgroundResource(R.drawable.list_item_shape_pressed);
v.setPadding(v.getPaddingLeft(), v.getPaddingTop() + 4,
v.getPaddingRight(), v.getPaddingBottom() - 4);
break;
case MotionEvent.ACTION_UP:
float endX = event.getX();
float endY = event.getY();
v.setBackgroundResource(R.drawable.list_item_shape_normal);
v.setPadding(v.getPaddingLeft(), v.getPaddingTop() - 4,
v.getPaddingRight(), v.getPaddingBottom() + 4);
if (TopicFragment.isAClick(startX, endX, startY, endY)) {
v.playSoundEffect(android.view.SoundEffectConstants.CLICK);
getSubtopic(position);
}
break;
case MotionEvent.ACTION_CANCEL:
v.setBackgroundResource(R.drawable.list_item_shape_normal);
v.setPadding(v.getPaddingLeft(), v.getPaddingTop() - 4,
v.getPaddingRight(), v.getPaddingBottom() + 4);
break;
}
return true;
}
});
return convertView;
}
}