package com.distantfuture.videos.misc; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckedTextView; import android.widget.ImageView; import android.widget.TextView; 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.squareup.picasso.Picasso; import java.util.List; import de.greenrobot.event.EventBus; public class ActionBarSpinnerAdapter extends ArrayAdapter<CharSequence> { Content mContent; private List<YouTubeData> mChannels; // we save this to get thumbnails in getView() private Context mContext; private CharSequence mTitle; private CharSequence mSubtitle; private CircleImageTransformation mCircleTransform; public ActionBarSpinnerAdapter(Context context, Content content) { super(context, R.layout.view_ab_spinner, android.R.id.text1); mContext = context.getApplicationContext(); mContent = content; mCircleTransform = new CircleImageTransformation(); EventBus.getDefault().register(this); setDropDownViewResource(R.layout.view_ab_spinner_item); updateChannels(); } @Override protected void finalize() throws Throwable { EventBus.getDefault().unregister(this); super.finalize(); } private void updateChannels() { clear(); mChannels = mContent.channels(); if (mChannels != null) { for (YouTubeData data : mChannels) add(data.mTitle); } } public void setTitleAndSubtitle(CharSequence title, CharSequence subtitle) { mTitle = title; mSubtitle = subtitle; notifyDataSetChanged(); } @Override public View getView(int position, View view, ViewGroup parent) { ViewHolder2 holder; if (view == null) { view = LayoutInflater.from(mContext).inflate(R.layout.view_ab_spinner, parent, false); holder = new ViewHolder2(); holder.subtitle = (TextView) view.findViewById(R.id.action_bar_subtitle); holder.title = (TextView) view.findViewById(android.R.id.text1); view.setTag(holder); } else { holder = (ViewHolder2) view.getTag(); } holder.title.setText(mTitle); holder.subtitle.setText(mSubtitle); return view; } // eventbus event public void onEventMainThread(BusEvents.ContentEvent event) { updateChannels(); } @Override public View getDropDownView(int position, View view, ViewGroup parent) { if (mChannels == null) return super.getDropDownView(position, view, parent); ViewHolder holder; if (view == null) { view = LayoutInflater.from(mContext).inflate(R.layout.view_ab_spinner_item, parent, false); holder = new ViewHolder(); holder.imageView = (ImageView) view.findViewById(android.R.id.icon1); holder.textView = (CheckedTextView) view.findViewById(android.R.id.text1); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } final YouTubeData data = mChannels.get(position); holder.textView.setText(getItem(position)); Picasso.with(mContext).load(data.mThumbnail) .fit() .transform(mCircleTransform) // .noFade() // .resize(250, 250) // put into dimens for dp values .into(holder.imageView); if ((position % 2) != 0) view.setBackgroundColor(0x05ffffff); else view.setBackgroundColor(0); return view; } private static class ViewHolder { ImageView imageView; CheckedTextView textView; } private static class ViewHolder2 { TextView title; TextView subtitle; } }