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.libs.utils.RewardUtils; import com.kickstarter.models.Project; import com.kickstarter.models.Reward; import com.kickstarter.ui.viewholders.KSViewHolder; import com.kickstarter.ui.viewholders.ProjectViewHolder; import com.kickstarter.ui.viewholders.RewardViewHolder; import java.util.Collections; import java.util.List; import rx.Observable; public final class ProjectAdapter extends KSAdapter { private final Delegate delegate; public interface Delegate extends ProjectViewHolder.Delegate {} public ProjectAdapter(final @NonNull Delegate delegate) { this.delegate = delegate; } protected @LayoutRes int layout(final @NonNull SectionRow sectionRow) { if (sectionRow.section() == 0) { return R.layout.project_main_layout; } else { return R.layout.reward_view; } } /** * Populate adapter data when we know we're working with a Project object. */ public void takeProject(final @NonNull Project project, final @NonNull String configCountry) { sections().clear(); sections().add(Collections.singletonList(Pair.create(project, configCountry))); final List<Reward> rewards = project.rewards(); if (rewards != null) { addSection(Observable.from(rewards) .filter(RewardUtils::isReward) .map(reward -> Pair.create(project, reward)) .toList().toBlocking().single() ); } notifyDataSetChanged(); } protected @NonNull KSViewHolder viewHolder(final @LayoutRes int layout, final @NonNull View view) { if (layout == R.layout.project_main_layout) { return new ProjectViewHolder(view, delegate); } return new RewardViewHolder(view); } }