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();
}
}