package com.application.zhangshi_app_android.ui.function; import android.graphics.drawable.ColorDrawable; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.PopupWindow; import androidx.databinding.library.baseAdapters.BR; import androidx.lifecycle.Observer; import com.android.app_base.manager.AppManager; import com.android.app_base.utils.ScreenSizeUtils; import com.android.app_base.utils.Utils; import com.android.app_base.utils.rxbus.MessageEvent; import com.android.app_base.utils.rxbus.RxBus; import com.android.app_base.widget.LinearItemDecoration; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.ContactsRvAdapter; import com.application.zhangshi_app_android.bean.ContactsBean; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.databinding.ActivityContactsBinding; ; import com.application.zhangshi_app_android.ui.DLBaseActivity; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import io.reactivex.functions.Consumer; /** * @author Gss * @date 2023.04.18. 20:33 * @desc 通讯录 */ public class ContactsActivity extends DLBaseActivity { private ContactsRvAdapter adapter; private PopupWindow mOperatePopupWindow; private boolean isSearchLayoutVisible; @Override public int getLayoutId() { return R.layout.activity_contacts; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { } @Override public void initView() { //下拉刷新布局 binding.refreshLayout.setEnableRefresh(false); binding.refreshLayout.setEnableLoadMore(true); binding.refreshLayout.setEnableOverScrollDrag(true); binding.refreshLayout.setOnLoadMoreListener(refreshLayout -> { viewModel.loadMoreContacts(); }); //recyclerView适配器 adapter = new ContactsRvAdapter(this); LinearItemDecoration itemDecoration = new LinearItemDecoration(); itemDecoration.setBottomSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_12)); itemDecoration.setHorizontalSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); itemDecoration.setFirstTop((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); binding.recyclerView.addItemDecoration(itemDecoration); binding.recyclerView.setAdapter(adapter); //右上角操作弹窗 mOperatePopupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_contacts_import,null)); mOperatePopupWindow.getContentView().findViewById(R.id.layout_contacts_import).setOnClickListener(v -> { mOperatePopupWindow.dismiss(); AppManager.getAppManager().startActivity(ContactsImportActivity.class); }); //点击弹出操作弹窗 binding.ivOperate.setOnClickListener(v -> { mOperatePopupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0); }); //点击放大镜按钮显示出搜索框 binding.ivSearchDefault.setOnClickListener(v -> { binding.layoutSearch.setVisibility(View.VISIBLE); binding.layoutDefault.setVisibility(View.GONE); }); //点击搜索框菜单下拉出 搜索参数 binding.ivSearchType.setOnClickListener(v -> { if (!isSearchLayoutVisible){ binding.layoutSearchParameter.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); int targetHeight = binding.layoutSearchParameter.getMeasuredHeight(); Utils.dropExpand(binding.containerSearchParameter,0, targetHeight); isSearchLayoutVisible = true; } }); //搜索参数layout添加空点击事件,防止点击它内部view时它后面的recycler还能响应点击事件 binding.layoutSearchParameter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); //点击搜索按钮进行搜索 binding.ivSearch.setOnClickListener(v -> { viewModel.getContacts(); binding.layoutSearch.setVisibility(View.GONE); binding.layoutDefault.setVisibility(View.VISIBLE); binding.tvTitle.setText("搜索结果"); hideSoftKeyboard(); }); } @Override public boolean dispatchTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); if (isSearchLayoutVisible){ if (!Utils.isPointInsideView(x, y, binding.layoutSearchParameter)) { Utils.pullCollapse(binding.containerSearchParameter, binding.layoutSearchParameter.getMeasuredHeight(),0); isSearchLayoutVisible = false; return true; } } return super.dispatchTouchEvent(event); } @Override public void initData() { viewModel.getContacts(); } @Override public void initLiveDataObserve() { viewModel.getDataListLiveData().observe(this, contactsDetailBeans -> { //根据名字分组 Set maNames = new HashSet<>(); for (ContactsDetailBean bean : contactsDetailBeans) { maNames.add(bean.getMyName()); } List list = new ArrayList<>(); for (String name : maNames) { ContactsBean bean = new ContactsBean(); bean.setMyName(name); List detailBeans = new ArrayList<>(); for (ContactsDetailBean detailBean : contactsDetailBeans) { if (name.equals(detailBean.getMyName())) { detailBeans.add(detailBean); } } bean.setContactsDetailBeans(detailBeans); list.add(bean); } adapter.setData(list); }); viewModel.getMoreListLiveData().observe(this, list -> { //已经有名字的,直接添加到对应的名字下面 //没有名字的,新建一个名字,添加到对应的名字下面 List data = adapter.getData(); List newData = new ArrayList<>(); Set maNames = new HashSet<>(); for (ContactsDetailBean contactsDetailBean : list) { boolean isAdd = false; for (ContactsBean bean : data) { if (contactsDetailBean.getMyName().equals(bean.getMyName())) { bean.getContactsDetailBeans().add(contactsDetailBean); isAdd = true; break; } } if (!isAdd) { maNames.add(contactsDetailBean.getMyName()); newData.add(contactsDetailBean); } } for (String name : maNames) { ContactsBean bean = new ContactsBean(); bean.setMyName(name); List detailBeans = new ArrayList<>(); for (ContactsDetailBean detailBean : list) { if (name.equals(detailBean.getMyName())) { detailBeans.add(detailBean); } } bean.setContactsDetailBeans(detailBeans); adapter.addItem(bean); } }); RxBus.getInstance().toObservable(this, MessageEvent.class) .subscribe(new Consumer() { @Override public void accept(MessageEvent event) throws Exception { if (event.getMessageEventCode() == MessageEvent.EVENT_REFRESH_DATA){ viewModel.getContacts(); } } }); } @Override protected void dataNull() { super.dataNull(); binding.layoutDataNull.setVisibility(View.VISIBLE); binding.refreshLayout.setVisibility(View.GONE); } @Override protected void dataFinish() { super.dataFinish(); binding.refreshLayout.finishLoadMore(); } @Override protected void hide() { super.hide(); binding.layoutDataNull.setVisibility(View.GONE); binding.refreshLayout.setVisibility(View.VISIBLE); binding.refreshLayout.finishLoadMore(); } }