package com.kickstarter.ui.adapters; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.util.Pair; import android.view.View; import com.kickstarter.R; import com.kickstarter.models.Comment; import com.kickstarter.models.Project; import com.kickstarter.models.User; import com.kickstarter.ui.adapters.data.CommentsData; import com.kickstarter.ui.viewholders.CommentViewHolder; import com.kickstarter.ui.viewholders.EmptyCommentsViewHolder; import com.kickstarter.ui.viewholders.KSViewHolder; import com.kickstarter.ui.viewholders.ProjectContextViewHolder; import java.util.Collections; import java.util.List; import rx.Observable; public final class CommentsAdapter extends KSAdapter { private final Delegate delegate; public interface Delegate extends ProjectContextViewHolder.Delegate, EmptyCommentsViewHolder.Delegate {} public CommentsAdapter(final @NonNull Delegate delegate) { this.delegate = delegate; } protected @LayoutRes int layout(final @NonNull SectionRow sectionRow) { if (sectionRow.section() == 0) { return R.layout.project_context_view; } else if (sectionRow.section() == 1){ return R.layout.comment_card_view; } else { return R.layout.empty_comments_layout; } } public void takeData(final @NonNull CommentsData data) { final Project project = data.project(); final List<Comment> comments = data.comments(); final User user = data.user(); sections().clear(); sections().add(Collections.singletonList(project)); addSection(Observable.from(comments) .map(comment -> Pair.create(project, comment)) .toList().toBlocking().single()); if (comments.size() == 0) { sections().add(Collections.singletonList(new Pair<>(project, user))); } else { sections().add(Collections.emptyList()); } notifyDataSetChanged(); } protected @NonNull KSViewHolder viewHolder(final @LayoutRes int layout, final @NonNull View view) { if (layout == R.layout.project_context_view) { return new ProjectContextViewHolder(view, delegate); } else if (layout == R.layout.empty_comments_layout) { return new EmptyCommentsViewHolder(view, delegate); } else { return new CommentViewHolder(view); } } }