| | |
| | | package com.hdl.photovoltaic.ui.message; |
| | | |
| | | import android.annotation.SuppressLint; |
| | | import android.content.DialogInterface; |
| | | import android.content.Intent; |
| | | import android.os.AsyncTask; |
| | | import android.os.Bundle; |
| | | import android.view.View; |
| | | import android.widget.TextView; |
| | | |
| | | |
| | | import androidx.fragment.app.Fragment; |
| | | import androidx.fragment.app.FragmentManager; |
| | | import androidx.fragment.app.FragmentTransaction; |
| | | import androidx.annotation.NonNull; |
| | | import androidx.recyclerview.widget.LinearLayoutManager; |
| | | import androidx.recyclerview.widget.RecyclerView; |
| | | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; |
| | | |
| | | import com.google.gson.Gson; |
| | | import com.hdl.linkpm.sdk.core.exception.HDLException; |
| | | import com.hdl.photovoltaic.R; |
| | | import com.hdl.photovoltaic.base.CustomBaseFragment; |
| | | import com.hdl.photovoltaic.config.ConstantManage; |
| | | import com.hdl.photovoltaic.databinding.FragmentMessageBinding; |
| | | import com.hdl.photovoltaic.enums.MessageFunctionTabSwitch; |
| | | import com.hdl.photovoltaic.enums.FilterType; |
| | | import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch; |
| | | import com.hdl.photovoltaic.enums.MessageStateType; |
| | | import com.hdl.photovoltaic.listener.CloudCallBeak; |
| | | import com.hdl.photovoltaic.other.HdlCommonLogic; |
| | | import com.hdl.photovoltaic.other.HdlLogLogic; |
| | | import com.hdl.photovoltaic.other.HdlMessageLogic; |
| | | import com.hdl.photovoltaic.other.HdlThreadLogic; |
| | | import com.hdl.photovoltaic.ui.adapter.MessageAdapter; |
| | | import com.hdl.photovoltaic.ui.bean.MessageBean; |
| | | import com.hdl.photovoltaic.ui.bean.UnCountBean; |
| | | import com.hdl.photovoltaic.widget.BTypeTitleListDialog; |
| | | import com.hdl.photovoltaic.widget.TypeTitleListDialog; |
| | | import com.hdl.photovoltaic.widget.refreshlayout.BGARefreshLayout; |
| | | import com.hdl.photovoltaic.widget.refreshlayout.HDLRefreshViewHolder; |
| | | import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; |
| | | |
| | | import org.greenrobot.eventbus.EventBus; |
| | | import org.greenrobot.eventbus.Subscribe; |
| | | import org.greenrobot.eventbus.ThreadMode; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 消息 |
| | | * 消息模块界面 |
| | | */ |
| | | public class MessageFragment extends CustomBaseFragment { |
| | | |
| | | private FragmentMessageBinding viewBinding; |
| | | |
| | | //当前显示的fragment |
| | | private static final String CURRENT_FRAGMENT = "state_fragment_show"; |
| | | private FragmentManager mFragmentManager; |
| | | private Fragment currentFragment = new Fragment(); |
| | | private final List<Fragment> fragmentList = new ArrayList<>(); |
| | | private int currentIndex = 0; |
| | | private MessageAdapter mMessageAdapter; |
| | | private boolean isAlarmDeviceClick = true;//true表示告警设备被选中,则false表示报警记录被选中 |
| | | |
| | | private final List<MessageBean> mList = new ArrayList<>(); |
| | | |
| | | private boolean isRefreshTotalCount = true; |
| | | private int mTotalCount = 0; //总条数 |
| | | private int mCurrentPage = 0; // 当前页码 |
| | | private int mCurrentTotal = 0; // 总页码 |
| | | private String mDeviceTypeFilterKye = FilterType.deviceType;//过滤类型 deviceType(INV :逆变器;BMS :BMS控制盒;BATTERY :电池单元;"LOAD_CENTRE":负载控制中心) |
| | | private String mDeviceTypeFilterValue = FilterType.all;//过滤类型值 deviceType(INV :逆变器;BMS :BMS控制盒;BATTERY :电池单元;"LOAD_CENTRE":负载控制中心 |
| | | |
| | | private String mTypeFilterKye = FilterType.all;//过滤类型 type(FAULT :故障; WARN :告警; EVENT :事件(提示)); |
| | | private String mTypeFilterValue = FilterType.all;//过滤类型值 type(FAULT :故障; WARN :告警; EVENT :事件(提示)); |
| | | |
| | | private String mTimeTypeFilterKye = FilterType.all;//过滤类型 timeType(TODAY :今天;LAST_3_DAYS: 近3天;LAST_7_DAYS :近7天;LAST_30_DAYS :近30天); |
| | | private String mTimeTypeFilterValue = FilterType.all;//过滤类型值 timeType(TODAY :今天;LAST_3_DAYS: 近3天;LAST_7_DAYS :近7天;LAST_30_DAYS :近30天); |
| | | |
| | | |
| | | private boolean isLoadingMore = false; // 标记正在加载更多数据 |
| | | |
| | | @Override |
| | | public Object getContentView() { |
| | |
| | | |
| | | @Override |
| | | public void onBindView(Bundle savedInstanceState) { |
| | | |
| | | //初始化碎片 |
| | | initFragment(savedInstanceState); |
| | | //初始化界面 |
| | | initView(); |
| | | //初始化监听器 |
| | | initEvent(); |
| | | //初始化数据 |
| | | initData(); |
| | | |
| | | } |
| | | |
| | | private void initEvent() { |
| | | |
| | | |
| | | //发生中 |
| | | viewBinding.messageTabNascentCl.setOnClickListener(new View.OnClickListener() { |
| | | viewBinding.messageTabNascentTitleTv.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | currentIndex = 0; |
| | | showFragment(); |
| | | initView(); |
| | | |
| | | if (isAlarmDeviceClick) { |
| | | return; |
| | | } |
| | | mDeviceTypeFilterKye = FilterType.deviceType; |
| | | mDeviceTypeFilterValue = FilterType.all; |
| | | mTypeFilterKye = FilterType.all; |
| | | mTypeFilterValue = FilterType.all; |
| | | mTimeTypeFilterKye = FilterType.all; |
| | | mTimeTypeFilterValue = FilterType.all; |
| | | viewBinding.allDeviceTitleTv.setText(getString(R.string.alarm_all_device)); |
| | | viewBinding.allGradeTitleTv.setText(getString(R.string.alarm_all_grade)); |
| | | viewBinding.allTimeTitleTv.setText(getString(R.string.alarm_all_time)); |
| | | isAlarmDeviceClick = true; |
| | | isRefreshTotalCount = true; |
| | | viewBinding.messageTabNascentTitleTv.setTextAppearance(R.style.Text18Style); |
| | | viewBinding.messageTabRecoverTitleTv.setTextAppearance(R.style.Text14Style); |
| | | viewBinding.allClearIv.setVisibility(View.VISIBLE); |
| | | loadNextPageMessageList(true, 1, mDeviceTypeFilterKye, mDeviceTypeFilterValue, mTypeFilterKye, mTypeFilterValue, mTimeTypeFilterKye, mTimeTypeFilterValue, true); |
| | | } |
| | | }); |
| | | //已恢复 |
| | | viewBinding.messageTabRecoverCl.setOnClickListener(new View.OnClickListener() { |
| | | //报警记录 |
| | | viewBinding.messageTabRecoverTitleTv.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | currentIndex = 1; |
| | | showFragment(); |
| | | initView(); |
| | | |
| | | if (!isAlarmDeviceClick) { |
| | | return; |
| | | } |
| | | mDeviceTypeFilterKye = FilterType.deviceType; |
| | | mDeviceTypeFilterValue = FilterType.all; |
| | | mTypeFilterKye = FilterType.all; |
| | | mTypeFilterValue = FilterType.all; |
| | | mTimeTypeFilterKye = FilterType.all; |
| | | mTimeTypeFilterValue = FilterType.all; |
| | | viewBinding.allDeviceTitleTv.setText(getString(R.string.alarm_all_device)); |
| | | viewBinding.allGradeTitleTv.setText(getString(R.string.alarm_all_grade)); |
| | | viewBinding.allTimeTitleTv.setText(getString(R.string.alarm_all_time)); |
| | | isAlarmDeviceClick = false; |
| | | isRefreshTotalCount = true; |
| | | viewBinding.messageTabNascentTitleTv.setTextAppearance(R.style.Text14Style); |
| | | viewBinding.messageTabRecoverTitleTv.setTextAppearance(R.style.Text18Style); |
| | | viewBinding.allClearIv.setVisibility(View.GONE); |
| | | loadNextPageMessageList(true, 1, mDeviceTypeFilterKye, mDeviceTypeFilterValue, mTypeFilterKye, mTypeFilterValue, mTimeTypeFilterKye, mTimeTypeFilterValue, true); |
| | | } |
| | | }); |
| | | //搜索消息 |
| | | viewBinding.messageSearchCl.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | String messageStateType; |
| | | if (isAlarmDeviceClick) { |
| | | messageStateType = MessageStateType.untreated; |
| | | } else { |
| | | messageStateType = MessageStateType.processed; |
| | | } |
| | | Intent intent = new Intent(); |
| | | intent.putExtra("MessageStateType", messageStateType); |
| | | intent.setClass(_mActivity, SearchMessageActivity.class); |
| | | startActivity(intent); |
| | | } |
| | | }); |
| | | |
| | | //全部 |
| | | viewBinding.messageTabAllCl.setOnClickListener(new View.OnClickListener() { |
| | | //清空所有未读按钮 |
| | | viewBinding.allClearIv.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | currentIndex = 2; |
| | | showFragment(); |
| | | initView(); |
| | | // showLoading(); |
| | | HdlMessageLogic.getInstance().messageAllRead("", new CloudCallBeak<Boolean>() { |
| | | @Override |
| | | public void onSuccess(Boolean obj) { |
| | | // hideLoading(); |
| | | loadNextPageMessageList(true, 1, mDeviceTypeFilterKye, mDeviceTypeFilterValue, mTypeFilterKye, mTypeFilterValue, mTimeTypeFilterKye, mTimeTypeFilterValue, true); |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | // hideLoading(); |
| | | HdlThreadLogic.toast(_mActivity, e); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | //全部设备(全部设备、逆变器、BMS控制盒、电池单元)按钮 |
| | | viewBinding.messageTabAllDeviceCl.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | viewBinding.allDeviceTitleIv.setBackgroundResource(R.drawable.up); |
| | | viewBinding.allGradeTitleIv.setBackgroundResource(R.drawable.down); |
| | | viewBinding.allTimeTitleIv.setBackgroundResource(R.drawable.down); |
| | | setTypeTitleListDialog(viewBinding.allDeviceTitleTv, FilterType.deviceType, getTypeList(FilterType.deviceType)); |
| | | |
| | | } |
| | | }); |
| | | //全部等级(故障、警告、提示)按钮 |
| | | viewBinding.messageTabAllGradeCl.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | viewBinding.allDeviceTitleIv.setBackgroundResource(R.drawable.down); |
| | | viewBinding.allGradeTitleIv.setBackgroundResource(R.drawable.up); |
| | | viewBinding.allTimeTitleIv.setBackgroundResource(R.drawable.down); |
| | | setTypeTitleListDialog(viewBinding.allGradeTitleTv, FilterType.type, getTypeList(FilterType.type)); |
| | | |
| | | } |
| | | }); |
| | | //全部时间(当天、近3天、近7天、近30天)按钮 |
| | | viewBinding.messageTabAllTimeCl.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | viewBinding.allDeviceTitleIv.setBackgroundResource(R.drawable.down); |
| | | viewBinding.allGradeTitleIv.setBackgroundResource(R.drawable.down); |
| | | viewBinding.allTimeTitleIv.setBackgroundResource(R.drawable.up); |
| | | setTypeTitleListDialog(viewBinding.allTimeTitleTv, FilterType.timeType, getTypeList(FilterType.timeType)); |
| | | } |
| | | }); |
| | | if (mMessageAdapter != null) { |
| | | mMessageAdapter.setOnclickListener(new MessageAdapter.OnClickListener() { |
| | | @Override |
| | | public void onClick(int position, MessageBean messageBean) { |
| | | Intent intent = new Intent(); |
| | | intent.putExtra("messageBean", new Gson().toJson(messageBean)); |
| | | intent.setClass(_mActivity, MessageInfoActivity.class); |
| | | startActivity(intent); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 类型筛选 |
| | | * |
| | | * @param textView 组件显示 |
| | | * @param filterType 过滤类型 |
| | | * @param stringList 过滤类型值表 |
| | | */ |
| | | private void setTypeTitleListDialog(TextView textView, String filterType, List<String> stringList) { |
| | | BTypeTitleListDialog typeTitleListDialog = new BTypeTitleListDialog(_mActivity, stringList, textView.getText().toString()); |
| | | typeTitleListDialog.show(); |
| | | typeTitleListDialog.setOnListener(new BTypeTitleListDialog.OnClickListener() { |
| | | @Override |
| | | public void onClick(int position, String title) { |
| | | textView.setText(title); |
| | | switch (filterType) { |
| | | case FilterType.deviceType: { |
| | | mDeviceTypeFilterKye = filterType; |
| | | mDeviceTypeFilterValue = findFilterValueString(title); |
| | | } |
| | | break; |
| | | case FilterType.type: { |
| | | mTypeFilterKye = filterType; |
| | | mTypeFilterValue = findFilterValueString(title); |
| | | } |
| | | break; |
| | | case FilterType.timeType: { |
| | | mTimeTypeFilterKye = filterType; |
| | | mTimeTypeFilterValue = findFilterValueString(title); |
| | | } |
| | | break; |
| | | } |
| | | loadNextPageMessageList(true, 1, mDeviceTypeFilterKye, mDeviceTypeFilterValue, mTypeFilterKye, mTypeFilterValue, mTimeTypeFilterKye, mTimeTypeFilterValue, true); |
| | | } |
| | | }); |
| | | typeTitleListDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { |
| | | @Override |
| | | public void onDismiss(DialogInterface dialog) { |
| | | viewBinding.allDeviceTitleIv.setBackgroundResource(R.drawable.down); |
| | | viewBinding.allGradeTitleIv.setBackgroundResource(R.drawable.down); |
| | | viewBinding.allTimeTitleIv.setBackgroundResource(R.drawable.down); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | private void initView() { |
| | | if (this.currentIndex == 0) { |
| | | viewBinding.messageTabAllTitleTv.setTextColor(getResources().getColor(R.color.text80_FFFFFF, null)); |
| | | viewBinding.messageTabNascentTitleTv.setTextColor(getResources().getColor(R.color.text_FFFFFFFF, null)); |
| | | viewBinding.messageTabRecoverTitleTv.setTextColor(getResources().getColor(R.color.text80_FFFFFF, null)); |
| | | viewBinding.line1V.setVisibility(View.GONE); |
| | | viewBinding.line2V.setVisibility(View.VISIBLE); |
| | | viewBinding.line3V.setVisibility(View.GONE); |
| | | postEventBus(MessageFunctionTabSwitch.nascent); |
| | | } else if (this.currentIndex == 1) { |
| | | viewBinding.messageTabAllTitleTv.setTextColor(getResources().getColor(R.color.text80_FFFFFF, null)); |
| | | viewBinding.messageTabNascentTitleTv.setTextColor(getResources().getColor(R.color.text80_FFFFFF, null)); |
| | | viewBinding.messageTabRecoverTitleTv.setTextColor(getResources().getColor(R.color.text_FFFFFFFF, null)); |
| | | viewBinding.line1V.setVisibility(View.GONE); |
| | | viewBinding.line2V.setVisibility(View.GONE); |
| | | viewBinding.line3V.setVisibility(View.VISIBLE); |
| | | postEventBus(MessageFunctionTabSwitch.recover); |
| | | } else if (this.currentIndex == 2) { |
| | | viewBinding.messageTabAllTitleTv.setTextColor(getResources().getColor(R.color.text_FFFFFFFF, null)); |
| | | viewBinding.messageTabNascentTitleTv.setTextColor(getResources().getColor(R.color.text80_FFFFFF, null)); |
| | | viewBinding.messageTabRecoverTitleTv.setTextColor(getResources().getColor(R.color.text80_FFFFFF, null)); |
| | | viewBinding.line1V.setVisibility(View.VISIBLE); |
| | | viewBinding.line2V.setVisibility(View.GONE); |
| | | viewBinding.line3V.setVisibility(View.GONE); |
| | | postEventBus(MessageFunctionTabSwitch.all); |
| | | if (isAlarmDeviceClick) { |
| | | viewBinding.messageTabNascentTitleTv.setTextAppearance(R.style.Text18Style); |
| | | viewBinding.messageTabRecoverTitleTv.setTextAppearance(R.style.Text14Style); |
| | | } else { |
| | | viewBinding.messageTabNascentTitleTv.setTextAppearance(R.style.Text18Style); |
| | | viewBinding.messageTabRecoverTitleTv.setTextAppearance(R.style.Text14Style); |
| | | } |
| | | // viewBinding..topMoreBtn.setVisibility(View.VISIBLE); |
| | | // viewBinding.toolbarTopMessageCenterListRl.topMoreIv.setImageResource(R.drawable.clearall); |
| | | mMessageAdapter = new MessageAdapter(_mActivity); |
| | | viewBinding.messageRcv.setLayoutManager(new LinearLayoutManager(_mActivity)); |
| | | viewBinding.messageRcv.setAdapter(mMessageAdapter); |
| | | pullToRefresh(); |
| | | } |
| | | |
| | | /** |
| | | * 下拉刷新的逻辑 |
| | | */ |
| | | protected void pullToRefresh() { |
| | | viewBinding.messageSrl.setDelegate(new BGARefreshLayout.BGARefreshLayoutDelegate() { |
| | | @Override |
| | | public void onBGARefreshLayoutBeginRefreshing(BGARefreshLayout refreshLayout) { |
| | | new AsyncTask<Void, Void, Void>() { |
| | | |
| | | @Override |
| | | protected Void doInBackground(Void... params) { |
| | | try { |
| | | Thread.sleep(1000); |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | protected void onPostExecute(Void aVoid) { |
| | | // 执行任务(如更新UI、跳转等) |
| | | viewBinding.messageSrl.endRefreshing(); |
| | | loadNextPageMessageList(false, 1, mDeviceTypeFilterKye, mDeviceTypeFilterValue, mTypeFilterKye, mTypeFilterValue, mTimeTypeFilterKye, mTimeTypeFilterValue, true); |
| | | |
| | | } |
| | | }.execute(); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public boolean onBGARefreshLayoutBeginLoadingMore(BGARefreshLayout refreshLayout) { |
| | | new AsyncTask<Void, Void, Void>() { |
| | | @Override |
| | | protected Void doInBackground(Void... params) { |
| | | try { |
| | | Thread.sleep(10); |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | protected void onPostExecute(Void aVoid) { |
| | | viewBinding.messageSrl.endLoadingMore(); |
| | | //加载最新数据完成 |
| | | if (!isLoadingMore) { |
| | | // 滑动到了底部,执行相应的操作 |
| | | loadNextPageMessageList(false, ++mCurrentPage, mDeviceTypeFilterKye, mDeviceTypeFilterValue, mTypeFilterKye, mTypeFilterValue, mTimeTypeFilterKye, mTimeTypeFilterValue, false); |
| | | } |
| | | } |
| | | }.execute(); |
| | | return true; |
| | | } |
| | | }); |
| | | HDLRefreshViewHolder hdlRefreshViewHolder = new HDLRefreshViewHolder(_mActivity, true); |
| | | hdlRefreshViewHolder.setPullDownImageResource(R.mipmap.loading_44); |
| | | hdlRefreshViewHolder.setChangeToReleaseRefreshAnimResId(R.drawable.loading_refresh); |
| | | hdlRefreshViewHolder.setRefreshingAnimResId(R.drawable.loading_refresh_end); |
| | | viewBinding.messageSrl.setRefreshViewHolder(hdlRefreshViewHolder); |
| | | } |
| | | |
| | | |
| | | |
| | | private void initData() { |
| | | } |
| | | |
| | | /** |
| | | * 发布点击事件 |
| | | * |
| | | * @param tabSwitch - |
| | | */ |
| | | private void postEventBus(MessageFunctionTabSwitch tabSwitch) { |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setTopic(ConstantManage.message_function_tab_switch); |
| | | baseEventBus.setType(tabSwitch + ""); |
| | | EventBus.getDefault().post(baseEventBus); |
| | | //进来读取一次数据(为了更新currentPage,currentTotal这个值),app启动时候读取,为了刷新消息模块的角标 |
| | | loadNextPageMessageList(true, 1, FilterType.all, FilterType.all, FilterType.all, FilterType.all, FilterType.all, FilterType.all, true); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 初始化Fragment |
| | | * |
| | | * @param savedInstanceState - |
| | | */ |
| | | private void initFragment(Bundle savedInstanceState) { |
| | | mFragmentManager = _mActivity.getSupportFragmentManager(); |
| | | //碎片初始化 |
| | | NascentMessageFragment mNascentMessageFragment = new NascentMessageFragment(); |
| | | RecoverMessageFragment mRecoverMessageFragment = new RecoverMessageFragment(); |
| | | AllMessageFragment mAllMessageFragment = new AllMessageFragment(); |
| | | if (savedInstanceState != null) { |
| | | //“内存重启”时调用 获取“内存重启”时保存的索引下标 |
| | | currentIndex = savedInstanceState.getInt(CURRENT_FRAGMENT, 0); |
| | | if (fragmentList.size() != 0) { |
| | | fragmentList.clear(); |
| | | @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) |
| | | public void onEventMessage(BaseEventBus eventBus) { |
| | | super.onEventMessage(eventBus); |
| | | if (eventBus == null) { |
| | | return; |
| | | } |
| | | //接收外部点击事件 |
| | | if (eventBus.getTopic().equals(ConstantManage.homepage_title_tab_switch)) { |
| | | if (eventBus.getType().equals(HomepageTitleTabSwitch.message.toString())) { |
| | | // 取消粘性事件 |
| | | EventBus.getDefault().removeStickyEvent(eventBus); |
| | | //进来读取一次数据(为了更新currentPage,currentTotal这个值) |
| | | // initData(); |
| | | HdlLogLogic.print("正在点击【消息】"); |
| | | |
| | | } |
| | | fragmentList.add(mFragmentManager.findFragmentByTag(0 + "")); |
| | | fragmentList.add(mFragmentManager.findFragmentByTag(1 + "")); |
| | | fragmentList.add(mFragmentManager.findFragmentByTag(2 + "")); |
| | | restoreFragment();//恢复fragment页面 |
| | | } else { |
| | | //正常启动时调用 |
| | | fragmentList.add(mNascentMessageFragment); |
| | | fragmentList.add(mRecoverMessageFragment); |
| | | fragmentList.add(mAllMessageFragment); |
| | | showFragment(); |
| | | |
| | | |
| | | } else if (eventBus.getTopic().equals(ConstantManage.message_function_push_post)) { |
| | | if (eventBus.getType().equals(MessageStateType.untreated)) { |
| | | updateListData(); |
| | | }/* else if (eventBus.getType().equals(MessageStateType.processed)) { |
| | | updateListData(); |
| | | }*/ |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 加载一页数据 |
| | | * |
| | | * @param pageNo 页数 |
| | | * @param isShowLoading 是否启动加载框 true启动 |
| | | * @param deviceType_filter_key 类型(设备,等级,时间) |
| | | * @param deviceType_filter_value deviceType(INV :逆变器;BMS :BMS控制盒;BATTERY :电池单元); |
| | | * type(FAULT :故障; WARN :告警; EVENT :事件(提示)); |
| | | * timeType(TODAY :今天;LAST_3_DAYS: 近3天;LAST_7_DAYS :近7天;LAST_30_DAYS :近30天); |
| | | * @param isClear true表示清空缓存 |
| | | */ |
| | | private void loadNextPageMessageList( |
| | | |
| | | boolean isShowLoading, |
| | | int pageNo, |
| | | String deviceType_filter_key, |
| | | String deviceType_filter_value, |
| | | String type_filter_key, |
| | | String type_filter_value, |
| | | String timeType_filter_key, |
| | | String timeType_filter_value, |
| | | boolean isClear) { |
| | | if (isClear) { |
| | | //表示从第一页可以读取,默认清空所有缓存数据; |
| | | clearCacheData(); |
| | | } |
| | | //第一页读取数据强制读 |
| | | if (pageNo > 1 && mCurrentPage > mCurrentTotal) { |
| | | --mCurrentPage; |
| | | //当前页不能大于总页数 |
| | | return; |
| | | } |
| | | isLoadingMore = true;//标记读取状态 |
| | | if (isShowLoading) { |
| | | showLoading(); |
| | | } |
| | | String messageStateType; |
| | | if (isAlarmDeviceClick) { |
| | | messageStateType = MessageStateType.untreated; |
| | | } else { |
| | | messageStateType = MessageStateType.processed; |
| | | } |
| | | HdlMessageLogic.getInstance().getPageNoMessageList("", pageNo, messageStateType, deviceType_filter_key, deviceType_filter_value, type_filter_key, type_filter_value, timeType_filter_key, timeType_filter_value, "", new CloudCallBeak<HdlMessageLogic.MessageListClass>() { |
| | | @Override |
| | | public void onSuccess(HdlMessageLogic.MessageListClass messageListClass) { |
| | | if (messageListClass != null) { |
| | | mCurrentTotal = (int) messageListClass.getTotalPage(); |
| | | mCurrentPage = (int) messageListClass.getPageNo(); |
| | | mTotalCount = (int) messageListClass.getTotalCount(); |
| | | updateListData(); |
| | | } |
| | | isLoadingMore = false; |
| | | if (isShowLoading) { |
| | | hideLoading(); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | if (mCurrentPage > 1) { |
| | | --mCurrentPage; |
| | | } |
| | | isLoadingMore = false; |
| | | if (isShowLoading) { |
| | | hideLoading(); |
| | | } |
| | | HdlThreadLogic.toast(_mActivity, e.getMsg() + "(" + e.getCode() + ")"); |
| | | } |
| | | }); |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 使用show() hide()切换页面 |
| | | * 显示fragment |
| | | * 刷新列表数据 |
| | | */ |
| | | private void showFragment() { |
| | | FragmentTransaction ft = mFragmentManager.beginTransaction(); |
| | | //如果之前没有添加过 |
| | | if (!fragmentList.get(currentIndex).isAdded()) { |
| | | //第三个参数为添加当前的fragment时绑定一个tag |
| | | ft.hide(currentFragment) |
| | | .add(R.id.message_fcv, fragmentList.get(currentIndex), currentIndex + ""); |
| | | } else { |
| | | ft.hide(currentFragment) |
| | | .show(fragmentList.get(currentIndex)); |
| | | } |
| | | currentFragment = fragmentList.get(currentIndex); |
| | | ft.commit(); |
| | | private void updateListData() { |
| | | HdlThreadLogic.runMainThread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | //读取缓存数据 |
| | | updateCacheData(); |
| | | //刷新列表 |
| | | updateRecyclerViewList(); |
| | | //显示未读信息总数量 |
| | | getUnreadCount(); |
| | | if (isAlarmDeviceClick) { |
| | | refreshNascentTotalCount(mTotalCount); |
| | | } else { |
| | | refreshRecoverTotalCount(mTotalCount); |
| | | } |
| | | //显示没数据Ui样式 |
| | | nullDataUpdateUi(); |
| | | |
| | | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 恢复fragment |
| | | * 刷新发送中消息总数量 |
| | | * |
| | | * @param nascentTotalCount 发送中消息总数量 |
| | | */ |
| | | private void restoreFragment() { |
| | | FragmentTransaction ft = mFragmentManager.beginTransaction(); |
| | | for (int i = 0; i < fragmentList.size(); i++) { |
| | | if (i == currentIndex) { |
| | | ft.show(fragmentList.get(i)); |
| | | } else { |
| | | ft.hide(fragmentList.get(i)); |
| | | private void refreshNascentTotalCount(int nascentTotalCount) { |
| | | HdlThreadLogic.runMainThread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | //设备报警总数量 |
| | | TextView nascentTv = _mActivity.findViewById(R.id.message_tab_nascent_title_tv); |
| | | if (nascentTv != null) { |
| | | nascentTv.setText(getText(R.string.message_nascent)); |
| | | if (nascentTotalCount > 0) { |
| | | String s = getText(R.string.message_nascent) + "(" + nascentTotalCount + ")"; |
| | | nascentTv.setText(s); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 刷新报警记录消息总数量 |
| | | * |
| | | * @param recoverTotalCount 报警记录消息总数量 |
| | | */ |
| | | private void refreshRecoverTotalCount(int recoverTotalCount) { |
| | | HdlThreadLogic.runMainThread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | //报警记录总数量 |
| | | TextView recoverTV = _mActivity.findViewById(R.id.message_tab_recover_title_tv); |
| | | if (recoverTV != null) { |
| | | recoverTV.setText(getText(R.string.alarm_record)); |
| | | if (recoverTotalCount > 0) { |
| | | String s = getText(R.string.alarm_record) + "(" + recoverTotalCount + ")"; |
| | | recoverTV.setText(s); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 刷新【消息模块】下角标数值 |
| | | * |
| | | * @param unreadCount 未读信息数量总数 |
| | | */ |
| | | private void refreshUnreadCount(int unreadCount) { |
| | | HdlThreadLogic.runMainThread(new Runnable() { |
| | | @SuppressLint("SetTextI18n") |
| | | @Override |
| | | public void run() { |
| | | TextView textView = _mActivity.findViewById(R.id.my_message_bottom_il2).findViewById(R.id.red_count_tv); |
| | | if (textView != null) { |
| | | if (unreadCount == 0) { |
| | | textView.setVisibility(View.GONE); |
| | | } else { |
| | | textView.setVisibility(View.VISIBLE); |
| | | if (unreadCount > 99) { |
| | | textView.setText("99+"); |
| | | } else { |
| | | textView.setText(unreadCount + ""); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 重新更新列表数据 |
| | | */ |
| | | private void updateRecyclerViewList() { |
| | | if (mMessageAdapter == null) { |
| | | return; |
| | | } |
| | | mMessageAdapter.setList(mList); |
| | | } |
| | | |
| | | /** |
| | | * 清空所有缓存数据(获取第一页之前要清空所有缓存数据) |
| | | */ |
| | | private void clearCacheData() { |
| | | mList.clear(); |
| | | HdlMessageLogic.getInstance().clearListMessage();//表示强制清空所有缓存信息 |
| | | } |
| | | |
| | | /** |
| | | * 更新缓存数据 |
| | | */ |
| | | private void updateCacheData() { |
| | | mList.clear(); |
| | | if (isAlarmDeviceClick) { |
| | | //设备报警 |
| | | mList.addAll(HdlMessageLogic.getInstance().getNascentMessageMemoryList()); |
| | | } else { |
| | | //报警记录 |
| | | mList.addAll(HdlMessageLogic.getInstance().getRecoverMessageMemoryList()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 读取消息【未读数量,未处理总数量,已处理总数量】 |
| | | */ |
| | | private void getUnreadCount() { |
| | | HdlMessageLogic.getInstance().getMessageUntreatedCount("", new CloudCallBeak<UnCountBean>() { |
| | | @Override |
| | | public void onSuccess(UnCountBean unCountBean) { |
| | | |
| | | HdlThreadLogic.runMainThread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | if (unCountBean == null) { |
| | | return; |
| | | } |
| | | refreshUnreadCount(unCountBean.getUnreadCount()); |
| | | if (isRefreshTotalCount) { |
| | | isRefreshTotalCount = false; |
| | | refreshNascentTotalCount(unCountBean.getUntreatedCount()); |
| | | refreshRecoverTotalCount(unCountBean.getProcessedCount()); |
| | | } |
| | | } |
| | | |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | HdlThreadLogic.runMainThread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | TextView textView = _mActivity.findViewById(R.id.my_message_bottom_il2).findViewById(R.id.red_count_tv); |
| | | if (textView != null) { |
| | | textView.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 没有消息列表的样式 |
| | | */ |
| | | private void nullDataUpdateUi() { |
| | | HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity, viewBinding.nullDataIc.getRoot(), viewBinding.nullDataIc.nullDataGifAnimationIv, viewBinding.nullDataIc.nullDataTv, getString(R.string.message_alarm_data_null), mList.size() > 0); |
| | | } |
| | | |
| | | /** |
| | | * 查找过滤值 |
| | | * |
| | | * @param title 标题 |
| | | * @return 过滤值 |
| | | */ |
| | | public String findFilterValueString(String title) { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put(getString(R.string.alarm_all_device), "");//设备全部 |
| | | map.put(getString(R.string.alarm_all_device_inverter), "INV"); |
| | | map.put(getString(R.string.alarm_all_device_bms), "BMS"); |
| | | map.put(getString(R.string.alarm_all_device_battery_cell), "BATTERY"); |
| | | map.put(getString(R.string.alarm_all_device_load_centre), "LOAD_CENTRE"); |
| | | map.put(getString(R.string.alarm_all_grade), "");//设等级全部 |
| | | map.put(getString(R.string.alarm_all_grade_malfunction), "FAULT"); |
| | | map.put(getString(R.string.alarm_all_grade_warning), "WARN"); |
| | | map.put(getString(R.string.alarm_all_grade_tip), "EVENT"); |
| | | map.put(getString(R.string.alarm_all_time), "");//时间全部 |
| | | map.put(getString(R.string.alarm_all_time_same_day), "TODAY"); |
| | | map.put(getString(R.string.alarm_all_time_3), "LAST_3_DAYS"); |
| | | map.put(getString(R.string.alarm_all_time_7), "LAST_7_DAYS"); |
| | | map.put(getString(R.string.alarm_all_time_30), "LAST_30_DAYS"); |
| | | |
| | | for (Map.Entry<String, String> entry : map.entrySet()) { |
| | | if (title.equals(entry.getKey())) { |
| | | return entry.getValue(); |
| | | } |
| | | } |
| | | ft.commit(); |
| | | //把当前显示的fragment记录下来 |
| | | currentFragment = fragmentList.get(currentIndex); |
| | | return ""; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取类型列表 |
| | | * |
| | | * @param filterType 过滤类型 |
| | | * @return 返回类型列表 |
| | | */ |
| | | private List<String> getTypeList(String filterType) { |
| | | List<String> stringList = new ArrayList<>(); |
| | | switch (filterType) { |
| | | case FilterType.deviceType: { |
| | | stringList.add(getString(R.string.alarm_all_device)); |
| | | stringList.add(getString(R.string.alarm_all_device_inverter)); |
| | | stringList.add(getString(R.string.alarm_all_device_bms)); |
| | | stringList.add(getString(R.string.alarm_all_device_battery_cell)); |
| | | stringList.add(getString(R.string.alarm_all_device_load_centre)); |
| | | } |
| | | break; |
| | | case FilterType.type: { |
| | | stringList.add(getString(R.string.alarm_all_grade)); |
| | | stringList.add(getString(R.string.alarm_all_grade_malfunction)); |
| | | stringList.add(getString(R.string.alarm_all_grade_warning)); |
| | | stringList.add(getString(R.string.alarm_all_grade_tip)); |
| | | } |
| | | break; |
| | | case FilterType.timeType: { |
| | | stringList.add(getString(R.string.alarm_all_time)); |
| | | stringList.add(getString(R.string.alarm_all_time_same_day)); |
| | | stringList.add(getString(R.string.alarm_all_time_3)); |
| | | stringList.add(getString(R.string.alarm_all_time_7)); |
| | | stringList.add(getString(R.string.alarm_all_time_30)); |
| | | } |
| | | break; |
| | | } |
| | | return stringList; |
| | | } |
| | | } |