package com.kickstarter.ui.viewholders; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.SwitchCompat; import android.view.View; import android.widget.TextView; import com.jakewharton.rxbinding.view.RxView; import com.kickstarter.R; import com.kickstarter.libs.qualifiers.RequiresActivityViewModel; import com.kickstarter.libs.utils.SwitchCompatUtils; import com.kickstarter.libs.utils.ViewUtils; import com.kickstarter.models.ProjectNotification; import com.kickstarter.viewmodels.ProjectNotificationViewModel; import butterknife.Bind; import butterknife.BindString; import butterknife.ButterKnife; import rx.android.schedulers.AndroidSchedulers; import static com.kickstarter.libs.utils.ObjectUtils.requireNonNull; @RequiresActivityViewModel(ProjectNotificationViewModel.class) public final class ProjectNotificationViewHolder extends KSViewHolder { private final ProjectNotificationViewModel viewModel; protected @Bind(R.id.enabled_switch) SwitchCompat enabledSwitch; protected @Bind(R.id.project_name) TextView projectNameTextView; protected @BindString(R.string.profile_settings_error) String unableToSaveString; public ProjectNotificationViewHolder(final @NonNull View view) { super(view); ButterKnife.bind(this, view); viewModel = new ProjectNotificationViewModel(environment()); RxView.clicks(enabledSwitch) .map(__ -> enabledSwitch.isChecked()) .compose(bindToLifecycle()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(viewModel.inputs::enabledSwitchClick); viewModel.outputs.projectName() .compose(bindToLifecycle()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(projectNameTextView::setText); viewModel.outputs.enabledSwitch() .compose(bindToLifecycle()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(SwitchCompatUtils.setCheckedWithoutAnimation(enabledSwitch)); viewModel.errors.showUnableToSaveProjectNotificationError() .map(__ -> unableToSaveString) .compose(bindToLifecycle()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(ViewUtils.showToast(context())); } @Override public void bindData(final @Nullable Object data) throws Exception { final ProjectNotification projectNotification = requireNonNull((ProjectNotification) data, ProjectNotification.class); viewModel.projectNotification(projectNotification); } }