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.Project;
import com.kickstarter.ui.viewholders.KSViewHolder;
import com.kickstarter.ui.viewholders.PopularSearchTitleViewHolder;
import com.kickstarter.ui.viewholders.ProjectSearchResultViewHolder;
import java.util.Collections;
import java.util.List;
import rx.Observable;
public final class SearchAdapter extends KSAdapter {
private final Delegate delegate;
public interface Delegate extends ProjectSearchResultViewHolder.Delegate {}
protected static final int SECTION_POPULAR_TITLE = 0;
protected static final int SECTION_FEATURED_PROJECT = 1;
protected static final int SECTION_PROJECT = 2;
public SearchAdapter(final @NonNull Delegate delegate) {
this.delegate = delegate;
}
public void loadPopularProjects(final @NonNull List<Project> newProjects) {
clearSections();
if (newProjects.size() > 0) {
this.insertSection(SECTION_POPULAR_TITLE, Collections.singletonList(null));
this.insertSection(
SECTION_FEATURED_PROJECT,
Collections.singletonList(
Pair.create(newProjects.get(0), true)
)
);
this.insertSection(
SECTION_PROJECT,
Observable.from(newProjects.subList(1, newProjects.size()))
.map(p -> Pair.create(p, false))
.toList().toBlocking().first()
);
}
notifyDataSetChanged();
}
public void loadSearchProjects(final @NonNull List<Project> newProjects) {
clearSections();
if (newProjects.size() > 0) {
this.insertSection(SECTION_POPULAR_TITLE, Collections.emptyList());
this.insertSection(
SECTION_FEATURED_PROJECT,
Collections.singletonList(
Pair.create(newProjects.get(0), true)
)
);
this.insertSection(
SECTION_PROJECT,
Observable.from(newProjects.subList(1, newProjects.size()))
.map(p -> Pair.create(p, false))
.toList().toBlocking().first()
);
}
notifyDataSetChanged();
}
protected @LayoutRes int layout(final @NonNull SectionRow sectionRow) {
switch (sectionRow.section()) {
case SECTION_POPULAR_TITLE:
return R.layout.search_popular_title_view;
case SECTION_FEATURED_PROJECT:
return R.layout.featured_search_result_view;
case SECTION_PROJECT:
return R.layout.project_search_result_view;
default:
throw new IllegalStateException("Invalid section row");
}
}
protected @NonNull KSViewHolder viewHolder(final @LayoutRes int layout, final @NonNull View view) {
switch (layout) {
case R.layout.search_popular_title_view:
return new PopularSearchTitleViewHolder(view);
case R.layout.featured_search_result_view:
return new ProjectSearchResultViewHolder(view, delegate);
case R.layout.project_search_result_view:
return new ProjectSearchResultViewHolder(view, delegate);
default:
throw new IllegalStateException("Invalid layout");
}
}
}