package com.distantfuture.videos.channellookup;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.cocosw.undobar.UndoBarController;
import com.distantfuture.videos.R;
import com.distantfuture.videos.content.Content;
import com.distantfuture.videos.database.YouTubeData;
import com.distantfuture.videos.imageutils.CircleImageTransformation;
import com.distantfuture.videos.imageutils.ToolbarIcons;
import com.squareup.picasso.Picasso;
import java.util.List;
public class ChannelLookupAdapter extends ArrayAdapter<YouTubeData> {
private final Activity mActivity;
private final float mAspectRatio = 4f / 5f;
private View.OnClickListener mButtonListener;
private Content mContent;
private CircleImageTransformation mCircleTransform;
public ChannelLookupAdapter(Activity activity) {
super(activity, 0);
this.mActivity = activity;
this.mContent = Content.instance();
mCircleTransform = new CircleImageTransformation();
mButtonListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
YouTubeData data = (YouTubeData) v.getTag();
if (mContent.hasChannel(data.mChannel)) {
if (mContent.removeChannel(data.mChannel))
showUndoBar(data.mChannel);
} else
mContent.addChannel(data.mChannel);
notifyDataSetChanged(); // needed to refresh find results
}
};
}
private void showUndoBar(String channelId) {
UndoBarController.UndoListener listener = new UndoBarController.UndoListener() {
@Override
public void onUndo(Parcelable parcelable) {
// was getting crashes here, this fixed it. I think quickly double tapping the undo button triggers this
if (parcelable == null) {
return;
}
Bundle info = (Bundle) parcelable;
String channelId = info.getString("channelId");
mContent.addChannel(channelId);
notifyDataSetChanged(); // needed to refresh find results
}
};
Bundle info = new Bundle();
info.putString("channelId", channelId);
UndoBarController.show(mActivity, "Channel removed", listener, info);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
YouTubeData data = getItem(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.channel_lookup_list_item, parent, false);
holder = new ViewHolder();
holder.imgView = (ImageView) convertView.findViewById(R.id.imageView1);
holder.addButton = (ImageView) convertView.findViewById(R.id.add_remove_button);
holder.titleView = (TextView) convertView.findViewById(R.id.textView1);
holder.descrView = (TextView) convertView.findViewById(R.id.textView2);
convertView.setTag(holder);
holder.addButton.setOnClickListener(mButtonListener);
} else {
holder = (ViewHolder) convertView.getTag();
}
Picasso.with(mActivity).load(data.mThumbnail)
.fit()
.transform(mCircleTransform)
.into(holder.imgView);
holder.titleView.setText(data.mTitle);
holder.descrView.setText(data.mDescription);
// used for clicks
holder.addButton.setTag(data);
holder.addButton.setImageDrawable(buttonDrawable(mActivity, !mContent.hasChannel(data.mChannel)));
return convertView;
}
public void setData(List<YouTubeData> dataList) {
clear();
if (dataList != null) {
addAll(dataList);
}
}
private Drawable buttonDrawable(Context context, boolean plusButton) {
if (plusButton)
return ToolbarIcons.icon(context, ToolbarIcons.IconID.ADD, 0xff009900, 36);
return ToolbarIcons.icon(context, ToolbarIcons.IconID.REMOVE, Color.RED, 36);
}
private class ViewHolder {
TextView titleView;
TextView descrView;
ImageView imgView;
ImageView addButton;
}
}