package com.kickstarter.viewmodels; import android.support.annotation.NonNull; import com.kickstarter.libs.ActivityViewModel; import com.kickstarter.libs.Environment; import com.kickstarter.libs.utils.ObjectUtils; import com.kickstarter.models.Project; import com.kickstarter.models.Video; import com.kickstarter.ui.IntentKey; import com.kickstarter.ui.activities.VideoActivity; import rx.Observable; import rx.subjects.BehaviorSubject; public interface VideoViewModel { interface Outputs { /** Emits the video for the player. */ Observable<String> preparePlayerWithUrl(); } final class ViewModel extends ActivityViewModel<VideoActivity> implements Outputs { public ViewModel(final @NonNull Environment environment) { super(environment); intent() .map(i -> i.getParcelableExtra(IntentKey.PROJECT)) .ofType(Project.class) .filter(ObjectUtils::isNotNull) .map(Project::video) .filter(ObjectUtils::isNotNull) .map(Video::high) .take(1) .compose(bindToLifecycle()) .subscribe(this.preparePlayerWithUrl::onNext); } private final BehaviorSubject<String> preparePlayerWithUrl = BehaviorSubject.create(); public final Outputs outputs = this; @Override public Observable<String> preparePlayerWithUrl() { return this.preparePlayerWithUrl; } } }