wjc
2025-05-07 5d3efa4c93dde0cde474951e5310bb72ebbf4184
app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java
@@ -1,7 +1,9 @@
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;
@@ -30,6 +32,9 @@
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;
@@ -52,10 +57,13 @@
    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 :电池单元)
    private String mDeviceTypeFilterValue = FilterType.all;//过滤类型值 deviceType(INV :逆变器;BMS :BMS控制盒;BATTERY :电池单元)
    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 :事件(提示));
@@ -93,10 +101,20 @@
                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;
                viewBinding.messageTabNascentTitleTv.setTextAppearance(R.style.Text20Style);
                viewBinding.messageTabRecoverTitleTv.setTextAppearance(R.style.Text16Style);
                viewBinding.allClearTv.setVisibility(View.VISIBLE);
                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);
            }
        });
@@ -107,10 +125,20 @@
                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;
                viewBinding.messageTabNascentTitleTv.setTextAppearance(R.style.Text16Style);
                viewBinding.messageTabRecoverTitleTv.setTextAppearance(R.style.Text20Style);
                viewBinding.allClearTv.setVisibility(View.GONE);
                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);
            }
        });
@@ -132,20 +160,20 @@
        });
        //清空所有未读按钮
        viewBinding.allClearTv.setOnClickListener(new View.OnClickListener() {
        viewBinding.allClearIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showLoading();
//                showLoading();
                HdlMessageLogic.getInstance().messageAllRead("", new CloudCallBeak<Boolean>() {
                    @Override
                    public void onSuccess(Boolean obj) {
                        hideLoading();
//                        hideLoading();
                        loadNextPageMessageList(true, 1, mDeviceTypeFilterKye, mDeviceTypeFilterValue, mTypeFilterKye, mTypeFilterValue, mTimeTypeFilterKye, mTimeTypeFilterValue, true);
                    }
                    @Override
                    public void onFailure(HDLException e) {
                        hideLoading();
//                        hideLoading();
                        HdlThreadLogic.toast(_mActivity, e);
                    }
                });
@@ -184,44 +212,12 @@
                setTypeTitleListDialog(viewBinding.allTimeTitleTv, FilterType.timeType, getTypeList(FilterType.timeType));
            }
        });
        //下拉按钮
        viewBinding.messageSrl.setColorSchemeResources(R.color.text_FF245EC3);
        viewBinding.messageSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                viewBinding.messageSrl.setRefreshing(false);
                loadNextPageMessageList(true, 1, mDeviceTypeFilterKye, mDeviceTypeFilterValue, mTypeFilterKye, mTypeFilterValue, mTimeTypeFilterKye, mTimeTypeFilterValue, true);
            }
        });
        //上拉按钮
        viewBinding.messageRcv.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
//                super.onScrolled(recyclerView, dx, dy);
                LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
                if (layoutManager == null) {
                    return;
                }
                int visibleItemCount = layoutManager.getChildCount();
                int totalItemCount = layoutManager.getItemCount();
                int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
                if (visibleItemCount > 0 && visibleItemCount + firstVisibleItemPosition == totalItemCount) {
                    if (!isLoadingMore) {
                        // 滑动到了底部,执行相应的操作
                        HdlLogLogic.print("--->滑动到了底部");
                        loadNextPageMessageList(false, ++mCurrentPage, mDeviceTypeFilterKye, mDeviceTypeFilterValue, mTypeFilterKye, mTypeFilterValue, mTimeTypeFilterKye, mTimeTypeFilterValue, false);
                    }
                }
            }
        });
        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.putExtra("messageBean", new Gson().toJson(messageBean));
                    intent.setClass(_mActivity, MessageInfoActivity.class);
                    startActivity(intent);
                }
@@ -238,7 +234,7 @@
     * @param stringList 过滤类型值表
     */
    private void setTypeTitleListDialog(TextView textView, String filterType, List<String> stringList) {
        BTypeTitleListDialog typeTitleListDialog = new BTypeTitleListDialog(_mActivity, stringList);
        BTypeTitleListDialog typeTitleListDialog = new BTypeTitleListDialog(_mActivity, stringList, textView.getText().toString());
        typeTitleListDialog.show();
        typeTitleListDialog.setOnListener(new BTypeTitleListDialog.OnClickListener() {
            @Override
@@ -264,22 +260,98 @@
                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 (isAlarmDeviceClick) {
            viewBinding.messageTabNascentTitleTv.setTextAppearance(R.style.Text20Style);
            viewBinding.messageTabRecoverTitleTv.setTextAppearance(R.style.Text16Style);
            viewBinding.messageTabNascentTitleTv.setTextAppearance(R.style.Text18Style);
            viewBinding.messageTabRecoverTitleTv.setTextAppearance(R.style.Text14Style);
        } else {
            viewBinding.messageTabNascentTitleTv.setTextAppearance(R.style.Text16Style);
            viewBinding.messageTabRecoverTitleTv.setTextAppearance(R.style.Text20Style);
            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() {
        //进来读取一次数据(为了更新currentPage,currentTotal这个值),app启动时候读取,为了刷新消息模块的角标
@@ -360,6 +432,7 @@
                if (messageListClass != null) {
                    mCurrentTotal = (int) messageListClass.getTotalPage();
                    mCurrentPage = (int) messageListClass.getPageNo();
                    mTotalCount = (int) messageListClass.getTotalCount();
                    updateListData();
                }
                isLoadingMore = false;
@@ -377,6 +450,7 @@
                if (isShowLoading) {
                    hideLoading();
                }
                HdlThreadLogic.toast(_mActivity, e.getMsg() + "(" + e.getCode() + ")");
            }
        });
@@ -396,20 +470,25 @@
                updateRecyclerViewList();
                //显示未读信息总数量
                getUnreadCount();
                if (isAlarmDeviceClick) {
                    refreshNascentTotalCount(mTotalCount);
                } else {
                    refreshRecoverTotalCount(mTotalCount);
                }
                //显示没数据Ui样式
                nullDataUpdateUi();
            }
        });
    }
    /**
     * 刷新信息数量总数
     * 刷新发送中消息总数量
     *
     * @param nascentTotalCount 发送中消息总数量
     * @param recoverTotalCount 报警记录消息总数量
     */
    private void refreshAascentAndRecoverTotalCount(int nascentTotalCount, int recoverTotalCount) {
    private void refreshNascentTotalCount(int nascentTotalCount) {
        HdlThreadLogic.runMainThread(new Runnable() {
            @Override
            public void run() {
@@ -422,6 +501,20 @@
                        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) {
@@ -509,8 +602,12 @@
                        if (unCountBean == null) {
                            return;
                        }
                        refreshAascentAndRecoverTotalCount(unCountBean.getUntreatedCount(), unCountBean.getProcessedCount());
                        refreshUnreadCount(unCountBean.getUnreadCount());
//                        if (isRefreshTotalCount) {
//                            isRefreshTotalCount = false;
                        refreshNascentTotalCount(unCountBean.getUntreatedCount());
                        refreshRecoverTotalCount(unCountBean.getProcessedCount());
//                        }
                    }
                });
@@ -551,6 +648,7 @@
        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");
@@ -583,6 +681,7 @@
                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: {