/**
*
*/
package com.umeng.comm.ui.presenter.impl;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import com.umeng.comm.core.beans.CommConfig;
import com.umeng.comm.core.beans.CommUser;
import com.umeng.comm.core.constants.ErrorCode;
import com.umeng.comm.core.db.ctrl.FollowDBAPI;
import com.umeng.comm.core.db.ctrl.impl.DatabaseAPI;
import com.umeng.comm.core.listeners.Listeners.FetchListener;
import com.umeng.comm.core.listeners.Listeners.SimpleFetchListener;
import com.umeng.comm.core.nets.responses.FansResponse;
import com.umeng.comm.core.nets.uitls.NetworkUtils;
import com.umeng.comm.core.utils.CommonUtils;
import com.umeng.comm.ui.mvpview.MvpFollowedUserView;
import com.umeng.comm.ui.presenter.BaseFragmentPresenter;
import com.umeng.comm.ui.utils.BroadcastUtils;
import com.umeng.comm.ui.utils.BroadcastUtils.BROADCAST_TYPE;
import com.umeng.comm.ui.utils.BroadcastUtils.DefalutReceiver;
/**
*
*/
public class FollowedUserFgPresenter extends BaseFragmentPresenter<List<CommUser>> {
protected String mUid;
protected MvpFollowedUserView mFollowedUserView;
private FollowDBAPI mFollowDBAPI = DatabaseAPI.getInstance().getFollowDBAPI();
protected String nextPageUrl;
private boolean hasRefresh = false;
// protected boolean isFollowPage = true;
public FollowedUserFgPresenter(MvpFollowedUserView followedUserView, String uid) {
this.mFollowedUserView = followedUserView;
this.mUid = uid;
}
@Override
public void attach(Context context) {
super.attach(context);
BroadcastUtils.registerUserBroadcast(mContext, mReceiver);
}
@Override
public void detach() {
BroadcastUtils.unRegisterBroadcast(mContext, mReceiver);
}
@Override
public void loadDataFromServer() {
mCommunitySDK.fetchFollowedUser(mUid, new FetchListener<FansResponse>() {
@Override
public void onStart() {
mFollowedUserView.onRefreshStart();
}
@Override
public void onComplete(FansResponse response) {
// 根据response进行Toast
if (NetworkUtils.handleResponseAll(response)) {
mFollowedUserView.onRefreshEnd();
if (response.errCode == ErrorCode.NO_ERROR) {
nextPageUrl = "";
}
return;
}
final List<CommUser> followedUsers = response.result;
// 保存数据
if (CommonUtils.isMyself(new CommUser(mUid))) {
mFollowDBAPI.follow(followedUsers);
}
mFollowedUserView.executeCallback(followedUsers.size());
// 更新GridView
List<CommUser> dataSource = mFollowedUserView.getBindDataSource();
followedUsers.removeAll(dataSource);
dataSource.addAll(followedUsers);
mFollowedUserView.notifyDataSetChanged();
// 解析下一页地址
parseNextpageUrl(response, true);
mFollowedUserView.onRefreshEnd();
}
});
}
private DefalutReceiver mReceiver = new DefalutReceiver() {
public void onReceiveUser(Intent intent) {
if (mUid.equals(CommConfig.getConfig().loginedUser.id)) {
CommUser user = getUser(intent);// 取消关注某个用户
BROADCAST_TYPE type = getType(intent);
onUserFollowStateChange(user, type);
}
}
};
protected Activity convertContextToActivity() {
if (mContext instanceof Activity) {
return (Activity) mContext;
}
return null;
}
@Override
public void loadDataFromDB() {
if (!mUid.equals(CommConfig.getConfig().loginedUser.id)) {
return;
}
mFollowDBAPI.loadFollowedUsersFromDB(mUid, new
SimpleFetchListener<List<CommUser>>() {
@Override
public void onComplete(List<CommUser> fans) {
if (CommonUtils.isActivityAlive(convertContextToActivity())
&& !CommonUtils.isListEmpty(fans)) {
List<CommUser> dataSource = mFollowedUserView.getBindDataSource();
fans.removeAll(dataSource);
if (fans.size() > 0) {
dataSource.addAll(fans);
mFollowedUserView.notifyDataSetChanged();
}
mFollowedUserView.executeCallback(fans.size());
}
}
});
}
@Override
public void loadMoreData() {
if (TextUtils.isEmpty(nextPageUrl)) {
mFollowedUserView.onRefreshEnd();
return;
}
mCommunitySDK.fetchNextPageData(nextPageUrl, FansResponse.class,
new SimpleFetchListener<FansResponse>() {
@Override
public void onComplete(FansResponse response) {
// 根据response进行Toast
if (NetworkUtils.handleResponseAll(response)) {
if (response.errCode == ErrorCode.NO_ERROR) {
nextPageUrl = "";
}
mFollowedUserView.onRefreshEnd();
return;
}
// 保存到数据库
mFollowDBAPI.follow(response.result);
appendUsers(response.result);
parseNextpageUrl(response, false);
mFollowedUserView.onRefreshEnd();
}
});
}
/**
* 追加已关注的用户,并刷新adapter</br>
*
* @param uewUsers 新关注的好友
*/
protected void appendUsers(List<CommUser> newUsers) {
List<CommUser> dataSource = mFollowedUserView.getBindDataSource();
newUsers.removeAll(dataSource);
dataSource.addAll(newUsers);
mFollowedUserView.notifyDataSetChanged();
}
/**
* 在其他页面对某个用户进行取消关注、关注之后需要从关注列表中移除或者添加
*
* @param user
* @param type
*/
protected void onUserFollowStateChange(CommUser user, BROADCAST_TYPE type) {
List<CommUser> dataSource = mFollowedUserView.getBindDataSource();
if (type == BROADCAST_TYPE.TYPE_USER_FOLLOW) {
if (!dataSource.contains(user)) {
dataSource.add(user);
mFollowDBAPI.follow(user);
}
} else {
dataSource.remove(user);
// 从DB中移除
mFollowDBAPI.unfollow(user);
}
mFollowedUserView.notifyDataSetChanged();
}
protected void parseNextpageUrl(FansResponse response, boolean fromRefersh) {
if (fromRefersh && TextUtils.isEmpty(nextPageUrl) && !hasRefresh) {
hasRefresh = true;
nextPageUrl = response.nextPageUrl;
} else if (!fromRefersh) {
nextPageUrl = response.nextPageUrl;
}
}
}