package com.wangdaye.mysplash.photo.presenter; import android.net.Uri; import com.wangdaye.mysplash.common.data.entity.unsplash.Photo; import com.wangdaye.mysplash.common.data.service.PhotoInfoService; import com.wangdaye.mysplash.common.i.model.BrowsableModel; import com.wangdaye.mysplash.common.i.presenter.BrowsablePresenter; import com.wangdaye.mysplash.common.i.view.BrowsableView; import retrofit2.Call; import retrofit2.Response; /** * Browsable implementor. * */ public class BrowsableImplementor implements BrowsablePresenter, PhotoInfoService.OnRequestSinglePhotoListener { private BrowsableModel model; private BrowsableView view; public BrowsableImplementor(BrowsableModel model, BrowsableView view) { this.model = model; this.view = view; } @Override public Uri getIntentUri() { return model.getIntentUri(); } @Override public boolean isBrowsable() { return model.isBrowsable(); } @Override public void requestBrowsableData() { view.showRequestDialog(); ((PhotoInfoService) model.getService()) .requestAPhoto(model.getBrowsableDataKey().get(0), this); } @Override public void visitPreviousPage() { view.visitPreviousPage(); } @Override public void cancelRequest() { ((PhotoInfoService) model.getService()).cancel(); } // interface. @Override public void onRequestSinglePhotoSuccess(Call<Photo> call, Response<Photo> response) { if (response.isSuccessful() && response.body() != null) { Photo photo = response.body(); photo.complete = true; view.dismissRequestDialog(); view.drawBrowsableView(photo); } else { ((PhotoInfoService) model.getService()) .requestAPhoto(model.getBrowsableDataKey().get(0), this); } } @Override public void onRequestSinglePhotoFailed(Call<Photo> call, Throwable t) { ((PhotoInfoService) model.getService()) .requestAPhoto(model.getBrowsableDataKey().get(0), this); } }