package de.danoeh.antennapod.adapter; import java.text.DateFormat; import java.util.List; import android.content.Context; import android.graphics.Typeface; import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.R; import de.danoeh.antennapod.feed.FeedItem; import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.storage.DownloadRequester; import de.danoeh.antennapod.util.Converter; import de.danoeh.antennapod.util.EpisodeFilter; public class FeedItemlistAdapter extends ArrayAdapter { private OnClickListener onButActionClicked; private boolean showFeedtitle; private int selectedItemIndex; private List objects; public static final int SELECTION_NONE = -1; public FeedItemlistAdapter(Context context, int textViewResourceId, List objects, OnClickListener onButActionClicked, boolean showFeedtitle) { super(context, textViewResourceId, objects); this.objects = objects; this.onButActionClicked = onButActionClicked; this.showFeedtitle = showFeedtitle; this.selectedItemIndex = SELECTION_NONE; } @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder; FeedItem item = getItem(position); if (convertView == null) { holder = new Holder(); LayoutInflater inflater = (LayoutInflater) getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.feeditemlist_item, null); holder.title = (TextView) convertView .findViewById(R.id.txtvItemname); holder.lenSize = (TextView) convertView .findViewById(R.id.txtvLenSize); holder.butAction = (ImageButton) convertView .findViewById(R.id.butAction); holder.published = (TextView) convertView .findViewById(R.id.txtvPublished); holder.inPlaylist = (ImageView) convertView .findViewById(R.id.imgvInPlaylist); holder.downloaded = (ImageView) convertView .findViewById(R.id.imgvDownloaded); holder.type = (ImageView) convertView.findViewById(R.id.imgvType); holder.downloading = (ImageView) convertView .findViewById(R.id.imgvDownloading); holder.encInfo = (RelativeLayout) convertView .findViewById(R.id.enc_info); if (showFeedtitle) { holder.feedtitle = (TextView) convertView .findViewById(R.id.txtvFeedname); } convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); } if (!(getItemViewType(position) == Adapter.IGNORE_ITEM_VIEW_TYPE)) { convertView.setVisibility(View.VISIBLE); if (position == selectedItemIndex) { convertView.setBackgroundColor(convertView.getResources() .getColor(R.color.selection_background)); } else { convertView.setBackgroundResource(0); } holder.title.setText(item.getTitle()); if (showFeedtitle) { holder.feedtitle.setVisibility(View.VISIBLE); holder.feedtitle.setText(item.getFeed().getTitle()); } if (!item.isRead()) { holder.title.setTypeface(Typeface.DEFAULT_BOLD); } else { holder.title.setTypeface(Typeface.DEFAULT); } holder.published.setText(convertView.getResources().getString( R.string.published_prefix) + DateUtils.formatSameDayTime(item.getPubDate().getTime(), System.currentTimeMillis(), DateFormat.SHORT, DateFormat.SHORT)); if (item.getMedia() == null) { holder.encInfo.setVisibility(View.GONE); } else { holder.encInfo.setVisibility(View.VISIBLE); if (FeedManager.getInstance().isInQueue(item)) { holder.inPlaylist.setVisibility(View.VISIBLE); } else { holder.inPlaylist.setVisibility(View.GONE); } if (item.getMedia().isDownloaded()) { holder.lenSize.setText(convertView.getResources() .getString(R.string.length_prefix) + Converter.getDurationStringLong(item.getMedia() .getDuration())); holder.downloaded.setVisibility(View.VISIBLE); } else { holder.lenSize .setText(convertView.getResources().getString( R.string.size_prefix) + Converter.byteToString(item.getMedia() .getSize())); holder.downloaded.setVisibility(View.GONE); } if (DownloadRequester.getInstance().isDownloadingFile( item.getMedia())) { holder.downloading.setVisibility(View.VISIBLE); } else { holder.downloading.setVisibility(View.GONE); } String type = item.getMedia().getMime_type(); if (type.startsWith("audio")) { holder.type.setImageResource(R.drawable.type_audio); } else if (type.startsWith("video")) { holder.type.setImageResource(R.drawable.type_video); } else { holder.type.setImageBitmap(null); } } holder.butAction.setFocusable(false); holder.butAction.setOnClickListener(onButActionClicked); } else { convertView.setVisibility(View.GONE); } return convertView; } static class Holder { TextView title; TextView feedtitle; TextView published; TextView lenSize; ImageView inPlaylist; ImageView downloaded; ImageView type; ImageView downloading; ImageButton butAction; RelativeLayout encInfo; } public int getSelectedItemIndex() { return selectedItemIndex; } public void setSelectedItemIndex(int selectedItemIndex) { this.selectedItemIndex = selectedItemIndex; notifyDataSetChanged(); } @Override public int getCount() { if (PodcastApp.getInstance().displayOnlyEpisodes()) { return EpisodeFilter.countItemsWithEpisodes(objects); } else { return super.getCount(); } } @Override public FeedItem getItem(int position) { if (PodcastApp.getInstance().displayOnlyEpisodes()) { return EpisodeFilter.accessEpisodeByIndex(objects, position); } else { return super.getItem(position); } } }