package org.cnodejs.android.md.presenter.implement;
import android.app.Activity;
import android.support.annotation.NonNull;
import org.cnodejs.android.md.R;
import org.cnodejs.android.md.model.api.ApiClient;
import org.cnodejs.android.md.model.api.DefaultCallback;
import org.cnodejs.android.md.model.api.ForegroundCallback;
import org.cnodejs.android.md.model.entity.Result;
import org.cnodejs.android.md.model.entity.Topic;
import org.cnodejs.android.md.model.entity.User;
import org.cnodejs.android.md.presenter.contract.IUserDetailPresenter;
import org.cnodejs.android.md.ui.util.ActivityUtils;
import org.cnodejs.android.md.ui.view.IUserDetailView;
import org.cnodejs.android.md.util.HandlerUtils;
import java.util.List;
import okhttp3.Headers;
public class UserDetailPresenter implements IUserDetailPresenter {
private final Activity activity;
private final IUserDetailView userDetailView;
private boolean loading = false;
public UserDetailPresenter(@NonNull Activity activity, @NonNull IUserDetailView userDetailView) {
this.activity = activity;
this.userDetailView = userDetailView;
}
@Override
public void getUserAsyncTask(@NonNull String loginName) {
if (!loading) {
loading = true;
userDetailView.onGetUserStart();
ApiClient.service.getUser(loginName).enqueue(new ForegroundCallback<Result.Data<User>>(activity) {
private long startLoadingTime = System.currentTimeMillis();
private long getPostTime() {
long postTime = 1000 - (System.currentTimeMillis() - startLoadingTime);
if (postTime > 0) {
return postTime;
} else {
return 0;
}
}
@Override
public boolean onResultOk(int code, Headers headers, final Result.Data<User> result) {
HandlerUtils.handler.postDelayed(new Runnable() {
@Override
public void run() {
if (ActivityUtils.isAlive(getActivity())) {
userDetailView.onGetUserOk(result.getData());
onFinish();
}
}
}, getPostTime());
return true;
}
@Override
public boolean onResultError(final int code, Headers headers, final Result.Error error) {
HandlerUtils.handler.postDelayed(new Runnable() {
@Override
public void run() {
if (ActivityUtils.isAlive(getActivity())) {
userDetailView.onGetUserError(code == 404 ? error.getErrorMessage() : getActivity().getString(R.string.data_load_faild_and_click_avatar_to_reload));
onFinish();
}
}
}, getPostTime());
return true;
}
@Override
public boolean onCallException(Throwable t, Result.Error error) {
HandlerUtils.handler.postDelayed(new Runnable() {
@Override
public void run() {
if (ActivityUtils.isAlive(getActivity())) {
userDetailView.onGetUserError(getActivity().getString(R.string.data_load_faild_and_click_avatar_to_reload));
onFinish();
}
}
}, getPostTime());
return true;
}
@Override
public void onFinish() {
userDetailView.onGetUserFinish();
loading = false;
}
});
ApiClient.service.getCollectTopicList(loginName).enqueue(new DefaultCallback<Result.Data<List<Topic>>>(activity) {
@Override
public boolean onResultOk(int code, Headers headers, Result.Data<List<Topic>> result) {
userDetailView.onGetCollectTopicListOk(result.getData());
return false;
}
});
}
}
}