package com.kickstarter.ui.adapters;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
import com.kickstarter.R;
import com.kickstarter.libs.utils.ListUtils;
import com.kickstarter.models.Activity;
import com.kickstarter.models.SurveyResponse;
import com.kickstarter.ui.viewholders.EmptyActivityFeedViewHolder;
import com.kickstarter.ui.viewholders.EmptyViewHolder;
import com.kickstarter.ui.viewholders.FriendBackingViewHolder;
import com.kickstarter.ui.viewholders.FriendFollowViewHolder;
import com.kickstarter.ui.viewholders.KSViewHolder;
import com.kickstarter.ui.viewholders.ProjectStateChangedPositiveViewHolder;
import com.kickstarter.ui.viewholders.ProjectStateChangedViewHolder;
import com.kickstarter.ui.viewholders.ProjectUpdateViewHolder;
import com.kickstarter.ui.viewholders.UnansweredSurveyHeaderViewHolder;
import com.kickstarter.ui.viewholders.UnansweredSurveyViewHolder;
import java.util.Collections;
import java.util.List;
public final class ActivityFeedAdapter extends KSAdapter {
private static final int SECTION_LOGGED_IN_EMPTY_VIEW = 0;
private static final int SECTION_LOGGED_OUT_EMPTY_VIEW = 1;
private static final int SECTION_SURVEYS_HEADER_VIEW = 2;
private static final int SECTION_SURVEYS_VIEW = 3;
private static final int SECTION_ACTIVITIES_VIEW = 4;
private final @Nullable Delegate delegate;
public interface Delegate extends FriendBackingViewHolder.Delegate, ProjectStateChangedPositiveViewHolder.Delegate,
ProjectStateChangedViewHolder.Delegate, ProjectUpdateViewHolder.Delegate, EmptyActivityFeedViewHolder.Delegate,
UnansweredSurveyViewHolder.Delegate {}
public ActivityFeedAdapter(final @Nullable Delegate delegate) {
this.delegate = delegate;
insertSection(SECTION_LOGGED_IN_EMPTY_VIEW, Collections.emptyList());
insertSection(SECTION_LOGGED_OUT_EMPTY_VIEW, Collections.emptyList());
insertSection(SECTION_SURVEYS_HEADER_VIEW, Collections.emptyList());
insertSection(SECTION_SURVEYS_VIEW, Collections.emptyList());
insertSection(SECTION_ACTIVITIES_VIEW, Collections.emptyList());
}
public void takeActivities(final @NonNull List<Activity> activities) {
setSection(SECTION_ACTIVITIES_VIEW, activities);
notifyDataSetChanged();
}
public void takeSurveys(final @NonNull List<SurveyResponse> surveyResponses) {
if (surveyResponses.size() > 0) {
setSection(SECTION_SURVEYS_HEADER_VIEW, Collections.singletonList(surveyResponses.size()));
setSection(SECTION_SURVEYS_VIEW, surveyResponses);
} else {
setSection(SECTION_SURVEYS_HEADER_VIEW, Collections.emptyList());
setSection(SECTION_SURVEYS_VIEW, Collections.emptyList());
}
notifyDataSetChanged();
}
public void showLoggedInEmptyState(final boolean show) {
setSection(SECTION_LOGGED_IN_EMPTY_VIEW, show ? Collections.singletonList(true) : ListUtils.empty());
notifyDataSetChanged();
}
public void showLoggedOutEmptyState(final boolean show) {
setSection(SECTION_LOGGED_OUT_EMPTY_VIEW, show ? Collections.singletonList(false) : ListUtils.empty());
notifyDataSetChanged();
}
@Override
protected @LayoutRes int layout(final @NonNull SectionRow sectionRow) {
switch (sectionRow.section()) {
case SECTION_LOGGED_IN_EMPTY_VIEW:
return R.layout.empty_activity_feed_view;
case SECTION_LOGGED_OUT_EMPTY_VIEW:
return R.layout.empty_activity_feed_view;
case SECTION_SURVEYS_HEADER_VIEW:
return R.layout.unanswered_surveys_header_view;
case SECTION_SURVEYS_VIEW:
return R.layout.unanswered_survey_view;
case SECTION_ACTIVITIES_VIEW:
return getActivityLayoutId(sectionRow);
}
return R.layout.empty_view;
}
private int getActivityLayoutId(final @NonNull SectionRow sectionRow) {
if (objectFromSectionRow(sectionRow) instanceof Activity) {
final Activity activity = (Activity) objectFromSectionRow(sectionRow);
switch (activity.category()) {
case Activity.CATEGORY_BACKING:
return R.layout.activity_friend_backing_view;
case Activity.CATEGORY_FOLLOW:
return R.layout.activity_friend_follow_view;
case Activity.CATEGORY_FAILURE:
case Activity.CATEGORY_CANCELLATION:
case Activity.CATEGORY_SUSPENSION:
return R.layout.activity_project_state_changed_view;
case Activity.CATEGORY_LAUNCH:
case Activity.CATEGORY_SUCCESS:
return R.layout.activity_project_state_changed_positive_view;
case Activity.CATEGORY_UPDATE:
return R.layout.activity_project_update_view;
}
}
return R.layout.empty_view;
}
@Override
protected @NonNull KSViewHolder viewHolder(final @LayoutRes int layout, final @NonNull View view) {
switch (layout) {
case R.layout.unanswered_surveys_header_view:
return new UnansweredSurveyHeaderViewHolder(view);
case R.layout.unanswered_survey_view:
return new UnansweredSurveyViewHolder(view, delegate);
case R.layout.activity_friend_backing_view:
return new FriendBackingViewHolder(view, delegate);
case R.layout.activity_friend_follow_view:
return new FriendFollowViewHolder(view);
case R.layout.activity_project_state_changed_view:
return new ProjectStateChangedViewHolder(view, delegate);
case R.layout.activity_project_state_changed_positive_view:
return new ProjectStateChangedPositiveViewHolder(view, delegate);
case R.layout.activity_project_update_view:
return new ProjectUpdateViewHolder(view, delegate);
case R.layout.empty_activity_feed_view:
return new EmptyActivityFeedViewHolder(view, delegate);
default:
return new EmptyViewHolder(view);
}
}
}