package com.hdl.photovoltaic.ui.powerstation;
|
|
import androidx.annotation.NonNull;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|
import android.os.Bundle;
|
import android.text.Editable;
|
import android.text.TextUtils;
|
import android.text.TextWatcher;
|
import android.view.View;
|
|
import com.google.gson.Gson;
|
import com.google.gson.reflect.TypeToken;
|
import com.hdl.linkpm.sdk.core.exception.HDLException;
|
import com.hdl.photovoltaic.R;
|
import com.hdl.photovoltaic.base.CustomBaseActivity;
|
import com.hdl.photovoltaic.bean.PageNumberObject;
|
import com.hdl.photovoltaic.databinding.ActivityDeviceSearchBinding;
|
import com.hdl.photovoltaic.enums.ShowErrorMode;
|
import com.hdl.photovoltaic.listener.CloudCallBeak;
|
import com.hdl.photovoltaic.other.HdlDeviceLogic;
|
import com.hdl.photovoltaic.other.HdlFileLogic;
|
import com.hdl.photovoltaic.other.HdlLogLogic;
|
import com.hdl.photovoltaic.other.HdlThreadLogic;
|
import com.hdl.photovoltaic.other.HdlUniLogic;
|
import com.hdl.photovoltaic.ui.adapter.DeviceInfoAdapter;
|
import com.hdl.photovoltaic.ui.adapter.SearchDeviceAdapter;
|
import com.hdl.photovoltaic.ui.adapter.SearchHistoryAdapter;
|
import com.hdl.photovoltaic.ui.bean.DeviceBean;
|
import com.hdl.photovoltaic.uni.HDLUniMP;
|
import com.hdl.photovoltaic.utils.URLEncodingUtils;
|
import com.hdl.sdk.link.core.bean.gateway.GatewayBean;
|
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
|
/**
|
* 设备搜索界面
|
*/
|
public class DeviceSearchActivity extends CustomBaseActivity {
|
|
|
private ActivityDeviceSearchBinding viewBinding;
|
|
SearchDeviceAdapter searchDeviceAdapter;//设备适配器
|
SearchHistoryAdapter searchHistoryAdapter;//历史记录适配器
|
|
private List<DeviceBean> deviceList = new ArrayList<>();
|
|
private int currentHouseListPage = 0; // 当前电站列表页码
|
private int currentHouseListTotal = 0; // 电站列表总页码
|
private boolean isHouseLoadingMore = false; // 标记电站列表正在加载更多数据
|
|
private String currSearchText;
|
|
List<String> searchHistoryTitleList = new ArrayList<>();
|
|
@Override
|
public Object getContentView() {
|
viewBinding = ActivityDeviceSearchBinding.inflate(getLayoutInflater());
|
return viewBinding.getRoot();
|
}
|
|
@Override
|
public void onBindView(Bundle savedInstanceState) {
|
setStatusBarTranslucent();
|
//历史记录文件夹创建
|
HdlFileLogic.getInstance().createFileDir(HdlFileLogic.getInstance().getCurrentUserRootPath());
|
//初始化数据
|
initData();
|
//初始化
|
initView();
|
//初始化界面监听器
|
initEvent();
|
}
|
|
private void initData() {
|
try {
|
String json = HdlFileLogic.getInstance().readFile(getHistoryFileNamePath());
|
if (TextUtils.isEmpty(json)) {
|
return;
|
}
|
searchHistoryTitleList = new Gson().fromJson(json, new TypeToken<List<String>>() {
|
}.getType());
|
} catch (Exception ignored) {
|
}
|
}
|
|
|
private void initEvent() {
|
|
//后退
|
viewBinding.backRl.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
finish();
|
}
|
});
|
viewBinding.powerStationSearchEt.addTextChangedListener(textWatcher);
|
|
|
//搜索
|
viewBinding.powerStationSearchTv.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
//搜索关键字
|
currSearchText = viewBinding.powerStationSearchEt.getText().toString().replace(" ", "");
|
if (TextUtils.isEmpty(currSearchText)) {
|
HdlThreadLogic.toast(_mActivity, R.string.search_content_null);
|
return;
|
}
|
viewBinding.historyListParent.setVisibility(View.GONE);
|
viewBinding.listParent.setVisibility(View.VISIBLE);
|
addSearchTextToList();
|
loadNextPageHouseList(true, 1, true);
|
}
|
});
|
|
|
//下拉箭头颜色
|
viewBinding.listSrl.setColorSchemeResources(R.color.text_FF245EC3);
|
//下拉读取
|
viewBinding.listSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
@Override
|
public void onRefresh() {
|
viewBinding.listSrl.setRefreshing(false);
|
loadNextPageHouseList(true, 1, true);
|
}
|
});
|
//上拉读取
|
viewBinding.listRcv.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
@Override
|
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int 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 (!isHouseLoadingMore) {
|
// 滑动到了底部,执行相应的操作
|
HdlLogLogic.print("--->滑动到了底部");
|
loadNextPageHouseList(false, ++currentHouseListPage, false);
|
}
|
}
|
}
|
});
|
//清除
|
viewBinding.powerStationClearIv.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
currSearchText = "";
|
viewBinding.powerStationSearchEt.setText("");
|
viewBinding.historyListParent.setVisibility(View.VISIBLE);
|
viewBinding.listParent.setVisibility(View.GONE);
|
searchHistoryAdapter.setList(searchHistoryTitleList);
|
clearData();
|
}
|
});
|
//删除
|
viewBinding.powerStationDelIv.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
searchHistoryTitleList = new ArrayList<>();
|
searchHistoryAdapter.setList(searchHistoryTitleList);
|
HdlFileLogic.getInstance().deleteFile(getHistoryFileNamePath());
|
}
|
});
|
//历史记录点击事件
|
searchHistoryAdapter.setOnclickListener(new SearchHistoryAdapter.OnClickListener() {
|
@Override
|
public void onClick(int position, String title) {
|
viewBinding.powerStationSearchEt.setText(title);
|
}
|
});
|
//设备点击是事件
|
searchDeviceAdapter.setOnclickListener(new DeviceInfoAdapter.OnClickListener() {
|
@Override
|
public void onClick(int position, DeviceBean deviceBean) {
|
GatewayBean gatewayBean = new GatewayBean();
|
gatewayBean.setCategorySecondName(deviceBean.getCategorySecondName());
|
gatewayBean.setDevice_mac(deviceBean.getOsn());
|
gatewayBean.setDevice_model(deviceBean.getOmodel());
|
gatewayBean.setOid(deviceBean.getOid());
|
gatewayBean.setGatewayId(deviceBean.getGatewayId());
|
gatewayBean.setAddresses(deviceBean.getAddresses());
|
gatewayBean.setSid(deviceBean.getSid());
|
gatewayBean.setDeviceId(deviceBean.getDeviceId());
|
gatewayBean.setDevice_name(deviceBean.getName());
|
gatewayBean.setDeviceStatus(deviceBean.getDeviceStatus());
|
gatewayBean.setHomeId(deviceBean.getHomeId());
|
gatewayBean.setDeviceType(deviceBean.getDeviceType());
|
String jsonEncryption = URLEncodingUtils.encodeURIComponent(new Gson().toJson(gatewayBean));
|
String path = HDLUniMP.UNI_EVENT_OPEN_DEVICE_DETAILS + "?inverterInfo=" + jsonEncryption;
|
HdlUniLogic.getInstance().openUniMP(path, null);
|
}
|
});
|
|
}
|
|
private void initView() {
|
viewBinding.historyListParent.setVisibility(View.VISIBLE);
|
viewBinding.listParent.setVisibility(View.GONE);
|
viewBinding.powerStationClearIv.setVisibility(View.GONE);
|
//初始化历史记录适配器
|
searchHistoryAdapter = new SearchHistoryAdapter(_mActivity);
|
viewBinding.historyListRcv.setLayoutManager(new LinearLayoutManager(_mActivity));
|
viewBinding.historyListRcv.setAdapter(searchHistoryAdapter);
|
searchHistoryAdapter.setList(searchHistoryTitleList);
|
//初始化电站适配器
|
searchDeviceAdapter = new SearchDeviceAdapter(_mActivity);
|
viewBinding.listRcv.setLayoutManager(new LinearLayoutManager(_mActivity));
|
viewBinding.listRcv.setAdapter(searchDeviceAdapter);
|
}
|
|
|
/**
|
* 输入电站名称进行过滤
|
*/
|
private final TextWatcher textWatcher = new TextWatcher() {
|
@Override
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
|
}
|
|
@Override
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
}
|
|
@Override
|
public void afterTextChanged(Editable s) {
|
String et = viewBinding.powerStationSearchEt.getText().toString().replace(" ", "");
|
if (TextUtils.isEmpty(et)) {
|
viewBinding.powerStationClearIv.setVisibility(View.GONE);
|
} else {
|
viewBinding.powerStationClearIv.setVisibility(View.VISIBLE);
|
}
|
viewBinding.powerStationSearchEt.setSelection(viewBinding.powerStationSearchEt.length());
|
|
}
|
};
|
|
/**
|
* 物理按键返回事件
|
*/
|
@Override
|
public void onBackPressed() {
|
super.onBackPressed();
|
}
|
|
@Override
|
protected void onDestroy() {
|
viewBinding.powerStationSearchEt.removeTextChangedListener(textWatcher);
|
if (searchHistoryTitleList.size() > 0) {
|
HdlFileLogic.getInstance().deleteFile(getHistoryFileNamePath());
|
HdlFileLogic.getInstance().appendFile(getHistoryFileNamePath(), new Gson().toJson(searchHistoryTitleList));
|
}
|
super.onDestroy();
|
}
|
|
/**
|
* 刷新UI(设备)
|
*
|
* @param isRefreshing 表示是下拉刷新的
|
*/
|
private void loadNextPageHouseList(boolean isRefreshing, long pageNo, boolean isClear) {
|
|
//搜索关键字
|
if (TextUtils.isEmpty(currSearchText)) {
|
return;
|
}
|
|
if (isClear) {
|
clearData();
|
}
|
//第一页读取数据强制读取
|
if (pageNo > 1 && currentHouseListPage > currentHouseListTotal) {
|
--currentHouseListPage;
|
//当前页不能大于总页数
|
return;
|
}
|
isHouseLoadingMore = true;//标记读取状态
|
if (isRefreshing) {
|
showLoading();
|
}
|
|
//获取云端上设备列表
|
HdlDeviceLogic.getInstance().getPowerStationDeviceList(currSearchText, pageNo, 20, new CloudCallBeak<PageNumberObject<DeviceBean>>() {
|
@Override
|
public void onSuccess(PageNumberObject<DeviceBean> deviceClass) {
|
HdlThreadLogic.runMainThread(new Runnable() {
|
@Override
|
public void run() {
|
if (isRefreshing) {
|
hideLoading();
|
}
|
isHouseLoadingMore = false;
|
if (deviceClass != null) {
|
currentHouseListTotal = (int) deviceClass.getTotalPage();
|
currentHouseListPage = (int) deviceClass.getPageNo();
|
//更新缓存
|
setDeviceList(deviceClass.getList());
|
if (searchDeviceAdapter != null) {
|
//更新UI
|
searchDeviceAdapter.setList(deviceList);
|
}
|
}
|
}
|
}, _mActivity, ShowErrorMode.YES);
|
|
}
|
|
@Override
|
public void onFailure(HDLException e) {
|
HdlThreadLogic.runMainThread(new Runnable() {
|
@Override
|
public void run() {
|
if (currentHouseListPage > 1) {
|
--currentHouseListPage;
|
}
|
isHouseLoadingMore = false;
|
if (isRefreshing) {
|
hideLoading();
|
}
|
|
}
|
}, _mActivity, ShowErrorMode.YES);
|
}
|
});
|
}
|
|
private void clearData() {
|
if (deviceList != null && deviceList.size() > 0) {
|
deviceList.clear();
|
}
|
}
|
|
public void setDeviceList(List<DeviceBean> list) {
|
if (list == null || list.size() == 0) {
|
return;
|
}
|
if (this.deviceList.size() == 0) {
|
this.deviceList.addAll(list);
|
return;
|
}
|
for (int i = 0; i < list.size(); i++) {
|
this.setSingleDevice(list.get(i));
|
}
|
}
|
|
/**
|
* 添加设备到列表里面
|
*
|
* @param deviceBean -设备对象
|
*/
|
public void setSingleDevice(DeviceBean deviceBean) {
|
try {
|
if (deviceBean == null) {
|
return;
|
}
|
boolean if_boolean = false;
|
for (int i = 0; i < deviceList.size(); i++) {
|
if (deviceList.get(i).getOsn().equals(deviceBean.getOsn())) {
|
//存在替换
|
deviceList.remove(i);
|
deviceList.add(i, deviceBean);
|
if_boolean = true;
|
break;
|
}
|
}
|
if (!if_boolean) {
|
//没有添加
|
this.deviceList.add(deviceBean);
|
}
|
} catch (Exception e) {
|
String mes = e.getMessage();
|
HdlLogLogic.print("--->" + mes);
|
}
|
}
|
|
/**
|
* 添加历史记录
|
*/
|
private void addSearchTextToList() {
|
for (int i = 0; i < searchHistoryTitleList.size(); i++) {
|
if (searchHistoryTitleList.get(i).equals(currSearchText)) {
|
searchHistoryTitleList.remove(searchHistoryTitleList.get(i));
|
}
|
}
|
searchHistoryTitleList.add(currSearchText);
|
// 倒序排列数据(搜索最后排在前面)
|
Collections.reverse(searchHistoryTitleList);
|
if (searchHistoryTitleList.size() > 10) {
|
//历史记录不能超出10
|
searchHistoryTitleList.remove(searchHistoryTitleList.get(11));
|
}
|
|
}
|
|
/**
|
* 获取【搜索历史记录文件】全路径
|
*/
|
public String getHistoryFileNamePath() {
|
return HdlFileLogic.getInstance().getCurrentUserRootPath() + "/house_device.txt";
|
}
|
}
|