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