package com.kickstarter.ui.viewholders; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.kickstarter.KSApplication; import com.kickstarter.R; import com.kickstarter.libs.KSString; import com.kickstarter.libs.utils.ObjectUtils; import com.kickstarter.models.Activity; import com.kickstarter.models.Photo; import com.kickstarter.models.Project; import com.kickstarter.models.Update; import com.kickstarter.models.User; import com.squareup.picasso.Picasso; import javax.inject.Inject; import butterknife.Bind; import butterknife.BindString; import butterknife.ButterKnife; import butterknife.OnClick; public class ActivitySampleProjectViewHolder extends KSViewHolder { @Inject KSString ksString; protected @Bind(R.id.activity_click_area) LinearLayout activityClickArea; protected @Bind(R.id.activity_image) ImageView activityImageView; protected @Bind(R.id.activity_title) TextView activityTitleTextView; protected @Bind(R.id.activity_subtitle) TextView activitySubtitleTextView; protected @Bind(R.id.see_activity_button) Button seeActivityButton; protected @BindString(R.string.activity_project_was_not_successfully_funded) String categoryFailureString; protected @BindString(R.string.activity_user_name_launched_project) String categoryLaunchString; protected @BindString(R.string.activity_successfully_funded) String categorySuccessString; protected @BindString(R.string.activity_funding_canceled) String categoryCancellationString; protected @BindString(R.string.activity_posted_update_number_title) String categoryUpdateString; private Activity activity; private final Delegate delegate; public interface Delegate { void activitySampleProjectViewHolderSeeActivityClicked(ActivitySampleProjectViewHolder viewHolder); void activitySampleProjectViewHolderProjectClicked(ActivitySampleProjectViewHolder viewHolder, Project project); void activitySampleProjectViewHolderUpdateClicked(ActivitySampleProjectViewHolder viewHolder, Activity activity); } public ActivitySampleProjectViewHolder(final @NonNull View view, final @NonNull Delegate delegate) { super(view); this.delegate = delegate; ((KSApplication) view.getContext().getApplicationContext()).component().inject(this); ButterKnife.bind(this, view); } @Override public void bindData(final @Nullable Object data) throws Exception { activity = ObjectUtils.requireNonNull((Activity) data, Activity.class); } public void onBind() { final Context context = context(); final Project project = activity.project(); if (project != null) { final Photo photo = project.photo(); if (photo != null) { Picasso.with(context) .load(photo.little()) .into(activityImageView); } activityTitleTextView.setText(project.name()); switch(activity.category()) { case Activity.CATEGORY_FAILURE: activitySubtitleTextView.setText(categoryFailureString); break; case Activity.CATEGORY_CANCELLATION: activitySubtitleTextView.setText(categoryCancellationString); break; case Activity.CATEGORY_LAUNCH: final User user = activity.user(); if (user != null) { activitySubtitleTextView.setText(ksString.format(categoryLaunchString, "user_name", user.name())); } break; case Activity.CATEGORY_SUCCESS: activitySubtitleTextView.setText(categorySuccessString); break; case Activity.CATEGORY_UPDATE: final Update update = activity.update(); if (update != null) { activitySubtitleTextView.setText(ksString.format(categoryUpdateString, "update_number", String.valueOf(update.sequence()), "update_title", update.title())); } break; default: break; } } } @OnClick(R.id.see_activity_button) protected void seeActivityOnClick() { delegate.activitySampleProjectViewHolderSeeActivityClicked(this); } @OnClick(R.id.activity_click_area) protected void activityProjectOnClick() { if (activity.category().equals(Activity.CATEGORY_UPDATE)) { delegate.activitySampleProjectViewHolderUpdateClicked(this, activity); } else { delegate.activitySampleProjectViewHolderProjectClicked(this, activity.project()); } } }