package com.lqr.wechat.ui.presenter; import android.app.Activity; import android.content.Intent; import android.text.TextUtils; import android.view.View; import android.widget.CheckBox; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.lqr.adapter.LQRAdapterForRecyclerView; import com.lqr.adapter.LQRHeaderAndFooterAdapter; import com.lqr.adapter.LQRViewHolderForRecyclerView; import com.lqr.wechat.R; import com.lqr.wechat.api.ApiRetrofit; import com.lqr.wechat.db.DBManager; import com.lqr.wechat.db.model.Friend; import com.lqr.wechat.db.model.Groups; import com.lqr.wechat.model.cache.UserCache; import com.lqr.wechat.model.response.CreateGroupResponse; import com.lqr.wechat.ui.activity.CreateGroupActivity; import com.lqr.wechat.ui.activity.SessionActivity; import com.lqr.wechat.ui.base.BaseActivity; import com.lqr.wechat.ui.base.BasePresenter; import com.lqr.wechat.ui.view.ICreateGroupAtView; import com.lqr.wechat.util.LogUtils; import com.lqr.wechat.util.SortUtils; import com.lqr.wechat.util.UIUtils; import java.util.ArrayList; import java.util.List; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class CreateGroupAtPresenter extends BasePresenter<ICreateGroupAtView> { private String mGroupName = ""; private List<Friend> mData = new ArrayList<>(); private List<Friend> mSelectedData = new ArrayList<>(); private LQRHeaderAndFooterAdapter mAdapter; private LQRAdapterForRecyclerView<Friend> mSelectedAdapter; public CreateGroupAtPresenter(BaseActivity context) { super(context); } public void loadContacts() { loadData(); setAdapter(); setSelectedAdapter(); } private void loadData() { Observable.just(DBManager.getInstance().getFriends()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(friends -> { if (friends != null && friends.size() > 0) { mData.clear(); mData.addAll(friends); //整理排序 SortUtils.sortContacts(mData); if (mAdapter != null) mAdapter.notifyDataSetChanged(); } }, this::loadError); } private void setAdapter() { if (mAdapter == null) { LQRAdapterForRecyclerView adapter = new LQRAdapterForRecyclerView<Friend>(mContext, mData, R.layout.item_contact) { @Override public void convert(LQRViewHolderForRecyclerView helper, Friend item, int position) { helper.setText(R.id.tvName, item.getDisplayName()).setViewVisibility(R.id.cb, View.VISIBLE); ImageView ivHeader = helper.getView(R.id.ivHeader); Glide.with(mContext).load(item.getPortraitUri()).centerCrop().into(ivHeader); CheckBox cb = helper.getView(R.id.cb); //如果添加群成员的话,需要判断是否已经在群中 if (((CreateGroupActivity) mContext).mSelectedTeamMemberAccounts != null && ((CreateGroupActivity) mContext).mSelectedTeamMemberAccounts.contains(item.getUserId())) { cb.setChecked(true); helper.setEnabled(R.id.cb, false).setEnabled(R.id.root, false); } else { helper.setEnabled(R.id.cb, true).setEnabled(R.id.root, true); //没有在已有群中的联系人,根据当前的选中结果判断 cb.setChecked(mSelectedData.contains(item) ? true : false); } String str = ""; //得到当前字母 String currentLetter = item.getDisplayNameSpelling().charAt(0) + ""; if (position == 0) { str = currentLetter; } else { //得到上一个字母 String preLetter = mData.get(position - 1).getDisplayNameSpelling().charAt(0) + ""; //如果和上一个字母的首字母不同则显示字母栏 if (!preLetter.equalsIgnoreCase(currentLetter)) { str = currentLetter; } int nextIndex = position + 1; if (nextIndex < mData.size() - 1) { //得到下一个字母 String nextLetter = mData.get(nextIndex).getDisplayNameSpelling().charAt(0) + ""; //如果和下一个字母的首字母不同则隐藏下划线 if (!nextLetter.equalsIgnoreCase(currentLetter)) { helper.setViewVisibility(R.id.vLine, View.VISIBLE); } else { helper.setViewVisibility(R.id.vLine, View.VISIBLE); } } else { helper.setViewVisibility(R.id.vLine, View.INVISIBLE); } } if (position == mData.size() - 1) { helper.setViewVisibility(R.id.vLine, View.GONE); } //根据str是否为空决定字母栏是否显示 if (TextUtils.isEmpty(str)) { helper.setViewVisibility(R.id.tvIndex, View.GONE); } else { helper.setViewVisibility(R.id.tvIndex, View.VISIBLE); helper.setText(R.id.tvIndex, str); } } }; adapter.addHeaderView(getView().getHeaderView()); mAdapter = adapter.getHeaderAndFooterAdapter(); getView().getRvContacts().setAdapter(mAdapter); ((LQRAdapterForRecyclerView) mAdapter.getInnerAdapter()).setOnItemClickListener((lqrViewHolder, viewGroup, view, i) -> { //选中或反选 Friend friend = mData.get(i - 1); if (mSelectedData.contains(friend)) { mSelectedData.remove(friend); } else { mSelectedData.add(friend); } mSelectedAdapter.notifyDataSetChangedWrapper(); mAdapter.notifyDataSetChanged(); if (mSelectedData.size() > 0) { getView().getBtnToolbarSend().setEnabled(true); getView().getBtnToolbarSend().setText(UIUtils.getString(R.string.sure_with_count, mSelectedData.size())); } else { getView().getBtnToolbarSend().setEnabled(false); getView().getBtnToolbarSend().setText(UIUtils.getString(R.string.sure)); } }); } } private void setSelectedAdapter() { if (mSelectedAdapter == null) { mSelectedAdapter = new LQRAdapterForRecyclerView<Friend>(mContext, mSelectedData, R.layout.item_selected_contact) { @Override public void convert(LQRViewHolderForRecyclerView helper, Friend item, int position) { ImageView ivHeader = helper.getView(R.id.ivHeader); Glide.with(mContext).load(item.getPortraitUri()).centerCrop().into(ivHeader); } }; getView().getRvSelectedContacts().setAdapter(mSelectedAdapter); } } public void addGroupMembers() { ArrayList<String> selectedIds = new ArrayList<>(mSelectedData.size()); for (int i = 0; i < mSelectedData.size(); i++) { Friend friend = mSelectedData.get(i); selectedIds.add(friend.getUserId()); } Intent data = new Intent(); data.putStringArrayListExtra("selectedIds", selectedIds); mContext.setResult(Activity.RESULT_OK, data); mContext.finish(); } public void createGroup() { mSelectedData.add(0, DBManager.getInstance().getFriendById(UserCache.getId())); int size = mSelectedData.size(); if (size == 0) return; List<String> selectedIds = new ArrayList<>(size); for (int i = 0; i < size; i++) { Friend friend = mSelectedData.get(i); selectedIds.add(friend.getUserId()); } mGroupName = ""; if (size > 3) { for (int i = 0; i < 3; i++) { Friend friend = mSelectedData.get(i); mGroupName += friend.getName() + "、"; } } else { for (Friend friend : mSelectedData) { mGroupName += friend.getName() + "、"; } } mGroupName = mGroupName.substring(0, mGroupName.length() - 1); mContext.showWaitingDialog(UIUtils.getString(R.string.please_wait)); ApiRetrofit.getInstance().createGroup(mGroupName, selectedIds) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(createGroupResponse -> { mContext.hideWaitingDialog(); if (createGroupResponse.getCode() == 200) { UIUtils.showToast(UIUtils.getString(R.string.create_group_success)); CreateGroupResponse.ResultEntity resultEntity = createGroupResponse.getResult(); DBManager.getInstance().saveOrUpdateGroup(new Groups(resultEntity.getId(), mGroupName, null, String.valueOf(0))); Intent intent = new Intent(mContext, SessionActivity.class); intent.putExtra("sessionId", resultEntity.getId()); intent.putExtra("sessionType", SessionActivity.SESSION_TYPE_GROUP); mContext.jumpToActivity(intent); mContext.finish(); } else { UIUtils.showToast(UIUtils.getString(R.string.create_group_fail)); } }, this::loadError); } private void loadError(Throwable throwable) { LogUtils.sf(throwable.getLocalizedMessage()); mContext.hideWaitingDialog(); } }