/** * */ package com.umeng.comm.ui.presenter.impl; import java.util.List; import android.content.Context; import android.content.Intent; import android.text.TextUtils; import android.widget.ToggleButton; import com.umeng.comm.core.beans.CommConfig; import com.umeng.comm.core.beans.CommUser; import com.umeng.comm.core.beans.Topic; import com.umeng.comm.core.constants.Constants; import com.umeng.comm.core.constants.ErrorCode; 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.Response; import com.umeng.comm.core.nets.responses.FansResponse; import com.umeng.comm.core.nets.responses.UsersResponse; import com.umeng.comm.core.nets.uitls.NetworkUtils; import com.umeng.comm.core.utils.CommonUtils; import com.umeng.comm.core.utils.ToastMsg; import com.umeng.comm.ui.mvpview.MvpActiveUserFgView; 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 ActiveUserFgPresenter extends BaseFragmentPresenter<List<CommUser>> { protected MvpActiveUserFgView mActiveUserFgView; private Topic mTopic; protected String mNextPageUrl; private boolean hasRefresh; public ActiveUserFgPresenter(MvpActiveUserFgView activeUserFgView, Topic topic) { this.mActiveUserFgView = activeUserFgView; this.mTopic = topic; } public ActiveUserFgPresenter(MvpActiveUserFgView activeUserFgView) { this.mActiveUserFgView = activeUserFgView; } @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.fetchActiveUsers(mTopic.id, new FetchListener<UsersResponse>() { @Override public void onStart() { mActiveUserFgView.onRefreshStart(); } @Override public void onComplete(UsersResponse response) { mActiveUserFgView.onRefreshEnd(); dealResult(response, true); } }); } @Override public void loadDataFromDB() { } @Override public void loadMoreData() { mActiveUserFgView.onRefreshEnd(); } /** * 处理结果集数据</br> * * @param response * @param addFirst */ void dealResult(FansResponse response, boolean fromRefresh) { if (NetworkUtils.handleResponseComm(response) || NetworkUtils.handResponseWithDefaultCode(response)) { return ; } List<CommUser> users = response.result; if (CommonUtils.isListEmpty(users)) { // 加载用户为空 ToastMsg.showShortMsgByResName("umeng_comm_no_recommend_user"); return; } dealNextpageUrl(response.nextPageUrl, fromRefresh); List<CommUser> dataSource = mActiveUserFgView.getBindDataSource(); users.removeAll(dataSource); if (hasRefresh) { dataSource.addAll(0, users); } else { dataSource.addAll(users); } mActiveUserFgView.notifyDataSetChanged(); mActiveUserFgView.onRefreshEnd(); } private void dealNextpageUrl(String url, boolean fromRefersh) { if (fromRefersh && TextUtils.isEmpty(mNextPageUrl) && !hasRefresh) { hasRefresh = true; mNextPageUrl = url; } else if (!fromRefersh) { mNextPageUrl = url; } } /** * 关注某个好友</br> * * @param user */ public void followUser(final CommUser user, final ToggleButton toggleButton) { if (isMySelf(user)) { toggleButton.setChecked(!toggleButton.isChecked()); return; } mCommunitySDK.followUser(user, new SimpleFetchListener<Response>() { @Override public void onComplete(Response response) { if (response.errCode == ErrorCode.NO_ERROR) { ToastMsg.showShortMsgByResName("umeng_comm_follow_user_success"); toggleButton.setChecked(true); DatabaseAPI.getInstance().getFollowDBAPI().follow(user); // 改变状态 List<CommUser> dataSource = mActiveUserFgView.getBindDataSource(); int Index = dataSource.indexOf(user); dataSource.get(Index).extraData.putBoolean(Constants.IS_FOCUSED, true); mActiveUserFgView.notifyDataSetChanged(); // 发送关注用户的广播 BroadcastUtils.sendUserFollowBroadcast(mContext, user); BroadcastUtils.sendCountUserBroadcast(mContext, 1); return; } if (response.errCode == ErrorCode.ERROR_USER_FOCUSED) { ToastMsg.showShortMsgByResName("umeng_comm_user_has_focused"); user.isFollowed = true; toggleButton.setChecked(true); return; } ToastMsg.showShortMsgByResName("umeng_comm_follow_user_failed"); toggleButton.setChecked(false); } }); } /** * 取消关注某个好友</br> * * @param user */ public void cancelFollowUser(final CommUser user, final ToggleButton toggleButton) { if (isMySelf(user)) { toggleButton.setChecked(!toggleButton.isChecked()); return; } mCommunitySDK.cancelFollowUser(user, new SimpleFetchListener<Response>() { @Override public void onComplete(Response response) { if (response.errCode == ErrorCode.NO_ERROR) { ToastMsg.showShortMsgByResName("umeng_comm_follow_cancel_success"); toggleButton.setChecked(false); DatabaseAPI.getInstance().getFollowDBAPI().unfollow(user); // 改变状态 int Index = mActiveUserFgView.getBindDataSource().indexOf(user); mActiveUserFgView.getBindDataSource().get(Index).extraData.putBoolean( Constants.IS_FOCUSED, false); mActiveUserFgView.notifyDataSetChanged(); // 发送取消关注的广播 BroadcastUtils.sendUserCancelFollowBroadcast(mContext, user); BroadcastUtils.sendCountUserBroadcast(mContext, -1); DatabaseAPI.getInstance().getFeedDBAPI().deleteFriendFeed(user.id); return; } if (response.errCode == ErrorCode.ERROR_USER_NOT_FOCUSED) { ToastMsg.showShortMsgByResName("umeng_comm_user_has_not_focused"); user.isFollowed = false; toggleButton.setChecked(false); return; } ToastMsg.showShortMsgByResName("umeng_comm_follow_user_failed"); toggleButton.setChecked(true); } }); } private boolean isMySelf(CommUser user) { if (user.id.equals(CommConfig.getConfig().loginedUser.id)) { ToastMsg.showShortMsgByResName("umeng_comm_no_follow_unfollow_myself"); return true; } return false; } protected DefalutReceiver mReceiver = new DefalutReceiver() { public void onReceiveUser(Intent intent) { BROADCAST_TYPE type = getType(intent); CommUser user = getUser(intent); List<CommUser> dataSource = mActiveUserFgView.getBindDataSource(); int index = dataSource.indexOf(user); if (index < 0) { return; } if (type == BROADCAST_TYPE.TYPE_USER_FOLLOW) { dataSource.get(index).extraData .putBoolean(Constants.IS_FOCUSED, true); } else if (type == BROADCAST_TYPE.TYPE_USER_CANCEL_FOLLOW) { dataSource.get(index).extraData.putBoolean(Constants.IS_FOCUSED, false); } mActiveUserFgView.notifyDataSetChanged(); } }; public void setNextPageUrl(String url) { mNextPageUrl = url; } }