package com.kickstarter.ui.viewholders; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.Html; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.kickstarter.R; import com.kickstarter.libs.KSString; import com.kickstarter.libs.transformations.CircleTransformation; import com.kickstarter.models.Project; import com.kickstarter.models.SurveyResponse; import com.kickstarter.viewmodels.UnansweredSurveyHolderViewModel; import com.squareup.picasso.Picasso; import butterknife.Bind; import butterknife.BindString; import butterknife.ButterKnife; import static com.kickstarter.libs.rx.transformers.Transformers.observeForUI; import static com.kickstarter.libs.utils.ObjectUtils.requireNonNull; public final class UnansweredSurveyViewHolder extends KSViewHolder { private final @Nullable Delegate delegate; private final KSString ksString; private SurveyResponse survey; private final UnansweredSurveyHolderViewModel.ViewModel viewModel; @Bind(R.id.survey_avatar_image) ImageView creatorAvatarImageView; @Bind(R.id.survey_title) TextView surveyTitleTextView; @Bind(R.id.survey_text) TextView surveyTextView; @BindString(R.string.Creator_name_needs_some_information_to_deliver_your_reward_for_project_name) String surveyDescriptionString; public interface Delegate { void surveyClicked(UnansweredSurveyViewHolder viewHolder, SurveyResponse surveyResponse); } public UnansweredSurveyViewHolder(final @NonNull View view, final @Nullable Delegate delegate) { super(view); this.delegate = delegate; this.viewModel = new UnansweredSurveyHolderViewModel.ViewModel(environment()); this.ksString = environment().ksString(); ButterKnife.bind(this, view); this.viewModel.outputs.creatorAvatarImage() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(this::setCreatorAvatarImage); this.viewModel.outputs.creatorName() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(this.surveyTitleTextView::setText); this.viewModel.outputs.projectForSurveyDescription() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(this::setSurveyDescription); } private void setSurveyDescription(final @NonNull Project projectForSurveyDescription) { this.surveyTextView.setText(Html.fromHtml( ksString.format( surveyDescriptionString, "creator_name", projectForSurveyDescription.creator().name(), "project_name", projectForSurveyDescription.name() ))); } @Override public void bindData(final @Nullable Object data) throws Exception { final SurveyResponse configData = requireNonNull( (SurveyResponse) data ); this.survey = configData; this.viewModel.inputs.configureWith(configData); } private void setCreatorAvatarImage(final @NonNull String creatorAvatarImage) { Picasso.with(context()).load(creatorAvatarImage).transform(new CircleTransformation()).into(this.creatorAvatarImageView); } @Override public void onClick(final @NonNull View view) { if (delegate != null) { delegate.surveyClicked(this, this.survey); } } }