package de.tum.in.tumcampusapp.adapters; import android.content.Context; import android.database.Cursor; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.text.DateFormat; import java.util.Date; import java.util.regex.Pattern; import de.tum.in.tumcampusapp.R; import de.tum.in.tumcampusapp.auxiliary.NetUtils; import de.tum.in.tumcampusapp.auxiliary.Utils; import de.tum.in.tumcampusapp.cards.FilmCard; import de.tum.in.tumcampusapp.cards.NewsCard; import de.tum.in.tumcampusapp.cards.generic.Card; public class NewsAdapter extends RecyclerView.Adapter<Card.CardViewHolder> { private static final Pattern COMPILE = Pattern.compile("^[0-9]+\\. [0-9]+\\. [0-9]+:[ ]*"); private final NetUtils net; private final Cursor c; private final Context mContext; public NewsAdapter(Context context, Cursor c) { this.mContext = context; net = new NetUtils(context); this.c = c; } public static NewsViewHolder newNewsView(ViewGroup parent, boolean isFilm) { View card; if (isFilm) { card = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_news_film_item, parent, false); } else { card = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_news_item, parent, false); } NewsViewHolder holder = new NewsViewHolder(card); holder.title = (TextView) card.findViewById(R.id.news_title); holder.img = (ImageView) card.findViewById(R.id.news_img); holder.srcDate = (TextView) card.findViewById(R.id.news_src_date); holder.srcIcon = (ImageView) card.findViewById(R.id.news_src_icon); holder.srcTitle = (TextView) card.findViewById(R.id.news_src_title); card.setTag(holder); return holder; } public static void bindNewsView(NetUtils net, RecyclerView.ViewHolder newsViewHolder, Cursor cursor) { NewsViewHolder holder = (NewsViewHolder) newsViewHolder; // Set image String imgUrl = cursor.getString(4); if (imgUrl == null || imgUrl.isEmpty() || imgUrl.equals("null")) { holder.img.setVisibility(View.GONE); } else { holder.img.setVisibility(View.VISIBLE); net.loadAndSetImage(imgUrl, holder.img); } String title = cursor.getString(2); if (cursor.getInt(1) == 2) { title = COMPILE.matcher(title).replaceAll(""); } holder.title.setText(title); // Adds date String date = cursor.getString(5); Date d = Utils.getISODateTime(date); DateFormat sdf = DateFormat.getDateInstance(); holder.srcDate.setText(sdf.format(d)); holder.srcTitle.setText(cursor.getString(8)); String icon = cursor.getString(7); if (icon.isEmpty() || "null".equals(icon)) { holder.srcIcon.setImageResource(R.drawable.ic_comment); } else { net.loadAndSetImage(icon, holder.srcIcon); } } @Override public Card.CardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return NewsCard.inflateViewHolder(parent, viewType); } @Override public void onBindViewHolder(Card.CardViewHolder holder, int position) { NewsViewHolder nHolder = (NewsViewHolder) holder; NewsCard card; if (FilmCard.isNewsAFilm(c, position)) { card = new FilmCard(mContext); } else { card = new NewsCard(mContext); } card.setNews(c, position); nHolder.setCurrentCard(card); c.moveToPosition(position); bindNewsView(net, holder, c); } @Override public int getItemViewType(int position) { c.moveToPosition(position); return "2".equals(c.getString(1)) ? 0 : 1; } @Override public int getItemCount() { return c.getCount(); } private static class NewsViewHolder extends Card.CardViewHolder { ImageView img; TextView title; TextView srcDate; TextView srcTitle; ImageView srcIcon; NewsViewHolder(View itemView) { super(itemView); } } }