package com.malmstein.yahnac.views.recyclerview.adapter;
import android.content.Intent;
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.TextView;
import com.malmstein.yahnac.R;
import com.malmstein.yahnac.data.DataPersister;
import com.malmstein.yahnac.injection.Inject;
import com.malmstein.yahnac.model.Story;
import com.malmstein.yahnac.stories.StoryListener;
import com.novoda.notils.caster.Views;
import java.util.ArrayList;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private final StoryListener listener;
private List<Story> items;
public RecyclerViewAdapter(Cursor cursor, StoryListener listener) {
items = new ArrayList<>();
if (cursor != null) {
for (int i = 0; cursor.moveToNext(); i++) {
add(Story.fromBookmark(cursor), i);
}
}
this.listener = listener;
}
public void swapCursor(Cursor cursor) {
removeAll();
if (cursor != null) {
for (int i = 0; cursor.moveToNext(); i++) {
add(Story.fromBookmark(cursor), i);
}
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_bookmark_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final Story story = items.get(position);
holder.title.setText(story.getTitle());
holder.card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onContentClicked(story);
}
});
holder.share_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onShareClicked(createShareIntent(story.getUrl()));
}
});
holder.bookmark_action.setSelected(story.isBookmark());
holder.bookmark_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataPersister persister = Inject.dataPersister();
if (story.isBookmark()) {
persister.removeBookmark(story);
listener.onBookmarkRemoved(story);
} else {
persister.addBookmark(story);
listener.onBookmarkAdded(story);
}
}
});
if (story.isStoryAJob()) {
holder.user.setVisibility(View.GONE);
holder.comments_action.setVisibility(View.GONE);
} else {
holder.user.setText(holder.user.getResources().getString(R.string.story_by, story.getSubmitter()));
holder.comments_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (story.isJob()) {
listener.onContentClicked(story);
} else {
listener.onCommentsClicked(story);
}
}
});
}
if (story.isHackerNewsLocalItem()) {
holder.external_action.setVisibility(View.GONE);
} else {
holder.external_action.setVisibility(View.VISIBLE);
holder.external_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onExternalLinkClicked(story);
}
});
}
}
@Override
public int getItemCount() {
return items.size();
}
private void add(Story item, int position) {
items.add(position, item);
notifyDataSetChanged();
}
private void removeAll() {
items.removeAll(items);
notifyDataSetChanged();
}
private Intent createShareIntent(String url) {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, url);
return shareIntent;
}
protected static class ViewHolder extends RecyclerView.ViewHolder {
public final TextView title;
public final TextView user;
public final View card;
public final View external_action;
public final View share_action;
public final View comments_action;
public final View bookmark_action;
public final TextView domain;
public ViewHolder(View view) {
super(view);
title = Views.findById(view, R.id.article_title);
user = Views.findById(view, R.id.article_user);
card = Views.findById(view, R.id.article_card_root);
external_action = Views.findById(view, R.id.article_external_action);
share_action = Views.findById(view, R.id.article_share_action);
comments_action = Views.findById(view, R.id.article_comments_action);
bookmark_action = Views.findById(view, R.id.article_bookmark_action);
domain = Views.findById(view, R.id.article_domain);
}
}
}