package what.whatandroid.search;
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.CardView;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import api.cli.Utils;
import api.search.requests.Request;
import api.soup.MySoup;
import what.whatandroid.R;
import what.whatandroid.WhatApplication;
import what.whatandroid.callbacks.ViewRequestCallbacks;
import what.whatandroid.imgloader.ImageLoadFailTracker;
import what.whatandroid.settings.SettingsActivity;
import java.util.Date;
/**
* Adapter to display request search results
*/
public class RequestSearchAdapter extends ArrayAdapter<Request> implements AdapterView.OnItemClickListener {
private final LayoutInflater inflater;
/**
* Callbacks to view the selected request
*/
private ViewRequestCallbacks callbacks;
private ImageLoadFailTracker imageFailTracker;
private boolean imagesEnabled;
/**
* Construct the empty adapter. A new search can be set to be displayed via viewSearch
*/
public RequestSearchAdapter(Context context, View footer){
super(context, R.layout.list_request);
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imagesEnabled = SettingsActivity.imagesEnabled(context);
imageFailTracker = new ImageLoadFailTracker();
try {
callbacks = (ViewRequestCallbacks)context;
}
catch (ClassCastException e){
throw new ClassCastException(context.toString() + " must implement ViewRequestCallbacks");
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView != null){
holder = (ViewHolder)convertView.getTag();
}
else {
convertView = inflater.inflate(R.layout.list_request_search, parent, false);
holder = new ViewHolder();
holder.art = (ImageView)convertView.findViewById(R.id.art);
holder.spinner = (ProgressBar)convertView.findViewById(R.id.loading_indicator);
holder.artContainer = convertView.findViewById(R.id.art_container);
holder.artistName = (TextView)convertView.findViewById(R.id.artist_name);
holder.albumName = (TextView)convertView.findViewById(R.id.album_name);
holder.year = (TextView)convertView.findViewById(R.id.year);
holder.votes = (TextView)convertView.findViewById(R.id.votes);
holder.bounty = (TextView)convertView.findViewById(R.id.bounty);
holder.created = (TextView)convertView.findViewById(R.id.created);
holder.rootView = (CardView)convertView.findViewById(R.id.card_root_view);
convertView.setTag(holder);
}
Request r = getItem(position);
holder.rootView.setBackgroundColor(r.filled() ? ContextCompat.getColor(getContext(), R.color.BackgroundAccentDark) : ContextCompat.getColor(getContext(), R.color.Background));
holder.albumName.setText(r.getTitle());
holder.votes.setText(r.getVoteCount().toString());
holder.bounty.setText(Utils.toHumanReadableSize(r.getBounty().longValue()));
Date createDate = MySoup.parseDate(r.getTimeAdded());
holder.created.setText(DateUtils.getRelativeTimeSpanString(createDate.getTime(),
new Date().getTime(), DateUtils.WEEK_IN_MILLIS));
if (r.getArtists().isEmpty() || r.getArtists().get(0).isEmpty()){
holder.artistName.setVisibility(View.GONE);
}
else {
holder.artistName.setVisibility(View.VISIBLE);
if (r.getArtists().get(0).size() > 2){
holder.artistName.setText("Various Artists");
}
else if (r.getArtists().get(0).size() == 2){
holder.artistName.setText(r.getArtists().get(0).get(0).getName()
+ " & " + r.getArtists().get(0).get(1).getName());
}
else {
holder.artistName.setText(r.getArtists().get(0).get(0).getName());
}
}
String imgUrl = r.getImage();
if (!imagesEnabled) {
holder.artContainer.setVisibility(View.GONE);
} else {
holder.artContainer.setVisibility(View.VISIBLE);
WhatApplication.loadImage(getContext(), imgUrl, holder.art, holder.spinner, imageFailTracker, null);
}
if (r.getYear().intValue() != 0){
holder.year.setText(r.getYear().toString());
}
else {
holder.year.setVisibility(View.GONE);
}
return convertView;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
//Clicking the footer gives us an out of bounds event so account for this
if (position - 1 < getCount()){
callbacks.viewRequest(getItem(position - 1).getRequestId().intValue());
}
}
private class ViewHolder {
public ImageView art;
public ProgressBar spinner;
public View artContainer;
public TextView artistName, albumName, year, votes, bounty, created;
public CardView rootView;
}
}