package com.esoxjem.movieguide.details; import com.esoxjem.movieguide.Movie; import com.esoxjem.movieguide.Review; import com.esoxjem.movieguide.Video; import com.esoxjem.movieguide.favorites.FavoritesInteractor; import com.esoxjem.movieguide.util.RxUtils; import java.util.List; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * @author arun */ class MovieDetailsPresenterImpl implements MovieDetailsPresenter { private MovieDetailsView view; private MovieDetailsInteractor movieDetailsInteractor; private FavoritesInteractor favoritesInteractor; private Subscription trailersSubscription; private Subscription reviewSubscription; MovieDetailsPresenterImpl(MovieDetailsInteractor movieDetailsInteractor, FavoritesInteractor favoritesInteractor) { this.movieDetailsInteractor = movieDetailsInteractor; this.favoritesInteractor = favoritesInteractor; } @Override public void setView(MovieDetailsView view) { this.view = view; } @Override public void destroy() { view = null; RxUtils.unsubscribe(trailersSubscription, reviewSubscription); } @Override public void showDetails(Movie movie) { if (isViewAttached()) { view.showDetails(movie); } } private boolean isViewAttached() { return view != null; } @Override public void showTrailers(Movie movie) { trailersSubscription = movieDetailsInteractor.getTrailers(movie.getId()).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::onGetTrailersSuccess, t -> onGetTrailersFailure()); } private void onGetTrailersSuccess(List<Video> videos) { if (isViewAttached()) { view.showTrailers(videos); } } private void onGetTrailersFailure() { // Do nothing } @Override public void showReviews(Movie movie) { reviewSubscription = movieDetailsInteractor.getReviews(movie.getId()).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::onGetReviewsSuccess, t -> onGetReviewsFailure()); } private void onGetReviewsSuccess(List<Review> reviews) { if (isViewAttached()) { view.showReviews(reviews); } } private void onGetReviewsFailure() { // Do nothing } @Override public void showFavoriteButton(Movie movie) { boolean isFavorite = favoritesInteractor.isFavorite(movie.getId()); if (isViewAttached()) { if (isFavorite) { view.showFavorited(); } else { view.showUnFavorited(); } } } @Override public void onFavoriteClick(Movie movie) { if (isViewAttached()) { boolean isFavorite = favoritesInteractor.isFavorite(movie.getId()); if (isFavorite) { favoritesInteractor.unFavorite(movie.getId()); view.showUnFavorited(); } else { favoritesInteractor.setFavorite(movie); view.showFavorited(); } } } }