package com.progscrape.ui;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.progscrape.MainActivity;
import com.progscrape.R;
import com.progscrape.app.data.Story;
import com.progscrape.event.StoryEvent;
import com.squareup.otto.Bus;
import java.util.ArrayList;
import java.util.List;
public class TrendingStoryAdapter extends RecyclerView.Adapter<TrendingStoryAdapter.ViewHolder> {
private boolean loaded;
private Context context;
private Bus bus;
private List<Story> stories = new ArrayList<>();
private boolean errorState;
public TrendingStoryAdapter(Context context, Bus bus) {
this.context = context;
this.bus = bus;
loaded = false;
}
@Override
public int getItemViewType(int position) {
return loaded ? 1 : 0;
}
@Override
public TrendingStoryAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
StoryView view = (StoryView) LayoutInflater.from(context).inflate(R.layout.story_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(TrendingStoryAdapter.ViewHolder holder, int position) {
if (loaded) {
holder.bind(stories.get(position));
} else {
Story story = new Story();
story.setTitle(errorState ? "Failed to load stories" : "Loading...");
holder.bind(story);
}
}
@Override
public int getItemCount() {
return loaded ? stories.size() : 1;
}
public void setStories(List<Story> stories) {
loaded = true;
this.stories = stories;
notifyDataSetChanged();
}
public void setErrorState() {
loaded = false;
errorState = true;
}
public class ViewHolder extends RecyclerView.ViewHolder {
private StoryView itemView;
private Story story;
public ViewHolder(final StoryView itemView) {
super(itemView);
this.itemView = itemView;
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (story.getHref() != null)
bus.post(new StoryEvent(story, StoryEvent.What.ACTIVATE));
}
});
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (story.getHref() != null)
bus.post(new StoryEvent(story, v, StoryEvent.What.MENU));
return true;
}
});
}
public void bind(Story story) {
this.story = story;
itemView.setHasHref(story.getHref() != null);
itemView.setTags(story.getTags());
itemView.setText(story.getTitle());
itemView.setIconsVisible(story.getHackerNewsUrl() != null,
story.getRedditUrl() != null, story.getLobstersUrl() != null);
}
}
}