package com.wangdaye.mysplash.user.presenter.activity; import android.net.Uri; import com.wangdaye.mysplash.common.data.entity.unsplash.User; import com.wangdaye.mysplash.common.data.service.UserService; 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, UserService.OnRequestUserProfileListener { 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(); requestUser(); } @Override public void visitPreviousPage() { view.visitPreviousPage(); } @Override public void cancelRequest() { ((UserService) model.getService()).cancel(); } private void requestUser() { ((UserService) model.getService()).requestUserProfile( model.getBrowsableDataKey().get(0).substring(1), this); } // interface. @Override public void onRequestUserProfileSuccess(Call<User> call, Response<User> response) { if (response.isSuccessful() && response.body() != null) { view.dismissRequestDialog(); view.drawBrowsableView(response.body()); } else { requestUser(); } } @Override public void onRequestUserProfileFailed(Call<User> call, Throwable t) { requestUser(); } }