package com.hdl.photovoltaic.ui.powerstation;
|
|
import android.Manifest;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.content.pm.PackageManager;
|
import android.hardware.camera2.CameraManager;
|
import android.os.Bundle;
|
import android.view.View;
|
|
import androidx.annotation.NonNull;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
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.config.ConstantManage;
|
import com.hdl.photovoltaic.config.UserConfigManage;
|
import com.hdl.photovoltaic.databinding.FragmentHouseListBinding;
|
import com.hdl.photovoltaic.base.CustomBaseFragment;
|
import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
|
import com.hdl.photovoltaic.enums.ShowErrorMode;
|
import com.hdl.photovoltaic.listener.CloudCallBeak;
|
import com.hdl.photovoltaic.listener.LinkCallBack;
|
import com.hdl.photovoltaic.other.HdlCommonLogic;
|
import com.hdl.photovoltaic.other.HdlDeviceLogic;
|
import com.hdl.photovoltaic.other.HdlLogLogic;
|
import com.hdl.photovoltaic.other.HdlResidenceLogic;
|
import com.hdl.photovoltaic.other.HdlThreadLogic;
|
import com.hdl.photovoltaic.other.HdlUniLogic;
|
import com.hdl.photovoltaic.ui.MyPowerStationActivity;
|
import com.hdl.photovoltaic.ui.adapter.HouseInfoAdapter;
|
import com.hdl.photovoltaic.ui.bean.CloudInverterDeviceBean;
|
import com.hdl.photovoltaic.ui.bean.HouseIdBean;
|
import com.hdl.photovoltaic.uni.HDLUniMP;
|
import com.hdl.photovoltaic.utils.PermissionUtils;
|
import com.hdl.photovoltaic.widget.DelayedConfirmationCancelDialog;
|
import com.hdl.sdk.link.common.exception.HDLLinkException;
|
import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus;
|
import com.hdl.sdk.link.core.utils.mqtt.MqttRecvClient;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* (住宅)电站列表-界面
|
*/
|
public class HouseListFragment extends CustomBaseFragment {
|
private FragmentHouseListBinding viewBinding;
|
private HouseInfoAdapter houseInfoAdapter;
|
private CameraManager manager;
|
|
private List<HouseIdBean> houseListBeanIDList = null;
|
|
|
@Override
|
public Object getContentView() {
|
viewBinding = FragmentHouseListBinding.inflate(getLayoutInflater());
|
return viewBinding.getRoot();
|
}
|
|
@Override
|
public void onBindView(Bundle savedInstanceState) {
|
manager = (CameraManager) _mActivity.getSystemService(Context.CAMERA_SERVICE);
|
initData();
|
//初始化
|
initView();
|
//初始化界面监听器
|
initEvent();
|
}
|
|
private void initEvent() {
|
|
|
//添加电站
|
viewBinding.toolbarTopFragmentHouseListRl.topMoreIv.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
HdlUniLogic.getInstance().openUniMP(HDLUniMP.UNI_EVENT_OPEN_HOME_CREATION, null);
|
|
}
|
});
|
//设置下拉箭头颜色
|
viewBinding.fragmentHouseSrl.setColorSchemeResources(R.color.text_FF245EC3);
|
viewBinding.fragmentHouseSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
@Override
|
public void onRefresh() {
|
downReadData(true);
|
}
|
});
|
//进入电站详情,删除电站,移动电站位置
|
houseInfoAdapter.setNoOnclickListener(new HouseInfoAdapter.OnclickListener() {
|
@Override
|
public void onClick(int position, HouseIdBean houseIdBean) {
|
//点击住宅详情
|
HdlLogLogic.print("点击住宅详情--->" + new Gson().toJson(houseIdBean), false);
|
HdlResidenceLogic.getInstance().switchHouse(houseIdBean);
|
String path = HDLUniMP.UNI_EVENT_OPEN_HOME_DETAILS + "?homeId=" + houseIdBean.getHomeId() + "&homeName=" + houseIdBean.getHomeName() + "&powerStationStatus=" + houseIdBean.getPowerStationStatus();
|
HdlUniLogic.getInstance().openUniMP(path, null);
|
|
}
|
|
@Override
|
public void onMoveClick(int position, HouseIdBean houseIdBean) {
|
String frontHomeId = "";
|
if (position > 0) {
|
frontHomeId = houseListBeanIDList.get(position - 1).getHomeId();
|
}
|
HdlResidenceLogic.getInstance().moveResidence(houseIdBean.getHomeId(), frontHomeId, new CloudCallBeak<Boolean>() {
|
@Override
|
public void onSuccess(Boolean obj) {
|
//移动电站位置
|
HdlResidenceLogic.getInstance().moveHouseId(houseIdBean.getHomeId());
|
initData();//初始化缓存数据
|
houseInfoAdapter.setList(houseListBeanIDList);//重新刷新列表
|
nullDataUpdateUi(houseListBeanIDList);//检测数据是否为空
|
}
|
|
@Override
|
public void onFailure(HDLException e) {
|
HdlThreadLogic.toast(_mActivity, e);
|
}
|
});
|
|
|
}
|
|
@Override
|
public void onDelClick(int position, HouseIdBean houseIdBean) {
|
DelayedConfirmationCancelDialog delayedConfirmationCancelDialog = new DelayedConfirmationCancelDialog(_mActivity);
|
delayedConfirmationCancelDialog.setTitleContent(getString(R.string.loading_title_tip));
|
String homeName = "\"" + houseIdBean.getHomeName() + "\"";
|
delayedConfirmationCancelDialog.setContent(getString(R.string.delete_power_station).replace("%s", homeName));
|
delayedConfirmationCancelDialog.show();
|
delayedConfirmationCancelDialog.startCountdown(3);
|
delayedConfirmationCancelDialog.setYesOnclickListener(new DelayedConfirmationCancelDialog.onYesOnclickListener() {
|
@Override
|
public void Confirm() {
|
delayedConfirmationCancelDialog.dismiss();
|
delete(houseIdBean.getHomeId());
|
// //删除住宅
|
// HdlResidenceLogic.getInstance().delResidence(houseIdBean.getHomeId(), new CloudCallBeak<Boolean>() {
|
// @Override
|
// public void onSuccess(Boolean obj) {
|
// HdlResidenceLogic.getInstance().delHouseId(houseIdBean.getHomeId());
|
// initData();//初始化缓存数据
|
// houseInfoAdapter.setList(houseListBeanIDList);//重新刷新列表
|
// nullDataUpdateUi(houseListBeanIDList);//检测数据是否为空
|
// }
|
//
|
// @Override
|
// public void onFailure(HDLException e) {
|
// HdlThreadLogic.toast(_mActivity, e);
|
// }
|
// });
|
}
|
});
|
delayedConfirmationCancelDialog.setNoOnclickListener(new DelayedConfirmationCancelDialog.onNoOnclickListener() {
|
@Override
|
public void Cancel() {
|
delayedConfirmationCancelDialog.dismiss();
|
}
|
});
|
|
}
|
});
|
|
//编辑电站按钮
|
viewBinding.toolbarTopFragmentHouseListRl.topEditIv.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
startActivity(HouseListEditActivity.class);
|
}
|
});
|
}
|
|
private void initView() {
|
viewBinding.toolbarTopFragmentHouseListRl.topTitleTv.setText(R.string.my_power_station);
|
viewBinding.toolbarTopFragmentHouseListRl.topEditIv.setVisibility(View.VISIBLE);
|
viewBinding.toolbarTopFragmentHouseListRl.topEditIv.setImageResource(R.drawable.editor_house);
|
viewBinding.toolbarTopFragmentHouseListRl.topMoreIv.setVisibility(View.VISIBLE);
|
viewBinding.toolbarTopFragmentHouseListRl.topMoreIv.setImageResource(R.drawable.add);
|
LinearLayoutManager linearLayout = new LinearLayoutManager(_mActivity);
|
houseInfoAdapter = new HouseInfoAdapter(_mActivity);
|
viewBinding.fragmentHouseSrlListRc.setLayoutManager(linearLayout);
|
viewBinding.fragmentHouseSrlListRc.setAdapter(houseInfoAdapter);
|
houseInfoAdapter.setList(this.houseListBeanIDList);
|
this.nullDataUpdateUi(houseListBeanIDList);
|
|
|
}
|
|
private void initData() {
|
this.houseListBeanIDList = new ArrayList<>();
|
this.houseListBeanIDList.addAll(HdlResidenceLogic.getInstance().getHouseIdList());
|
}
|
|
/**
|
* 收到EventBUs通知
|
*
|
* @param eventBus 数据
|
*/
|
@Override
|
public void onEventMessage(BaseEventBus eventBus) {
|
super.onEventMessage(eventBus);
|
if (HDLUniMP.UNI_EVENT_REPLY_HOME_MODEL.equals(eventBus.getTopic())) {
|
if (HDLUniMP.UNI_EVENT_REPLY_HOME_CREATION.equals(eventBus.getType())) {
|
//uin创建电站成功后通知
|
downReadData(false);
|
if (eventBus.getData() != null) {
|
Gson gson = new Gson();
|
String json = eventBus.getData().toString();
|
HouseIdBean houseIdBean = gson.fromJson(json, HouseIdBean.class);
|
HdlResidenceLogic.getInstance().switchHouse(houseIdBean);
|
|
}
|
} else if (HDLUniMP.UNI_EVENT_REPLY_HOME_EDIT.equals(eventBus.getType())) {
|
//todo 现在默认刷新全部
|
//uin编辑住宅通知
|
// String homeId = HdlUniLogic.getInstance().getKeyValue("homeId", eventBus.getData());
|
// String home_name = HdlUniLogic.getInstance().getKeyValue("powerStationName", eventBus.getData());
|
// if (TextUtils.isEmpty(homeId) || TextUtils.isEmpty(home_name)) {
|
// return;
|
// }
|
// int index = -1;
|
// for (int i = 0; i < houseListBeanIDList.size(); i++) {
|
// HouseIdBean houseIdBean = houseListBeanIDList.get(i);
|
// if (houseIdBean.getHomeId().equals(homeId)) {
|
// index = i;
|
// houseIdBean.setHomeName(home_name);
|
// break;
|
// }
|
// }
|
// if (index > -1) {
|
// if (houseInfoAdapter != null) {
|
// //更新单个数据
|
// houseInfoAdapter.notifyItemChanged(index);
|
// }
|
// }
|
|
|
}
|
} else if (HDLUniMP.UNI_EVENT_REPLY_HOME_CLOSE_HOME_DETAILS_PAGE.equals(eventBus.getType())) {
|
|
//uin关闭住宅详情界面通知
|
if (MqttRecvClient.getInstance() != null) {
|
MqttRecvClient.getInstance().removeAllTopic();
|
}
|
downReadData(false);
|
|
} else if (HDLUniMP.UNI_EVENT_REPLY_DEVICE_LIST.equals(eventBus.getType())) {
|
//进去住宅详情uni读取逆变器列表成功后通知
|
for (int i = 0; i < HdlDeviceLogic.getInstance().getCurrentHomeGatewayList(UserConfigManage.getInstance().getHomeId()).size(); i++) {
|
String gatewayId = HdlDeviceLogic.getInstance().getCurrentHomeGatewayList(UserConfigManage.getInstance().getHomeId()).get(i).getGatewayId();
|
//字符串是自己按规则拼接的,里面注册主题时会解析字符串,只拿getGatewayId()值;
|
String topic = "/user/" + gatewayId + "/1";
|
//进去住宅详情开始订阅主题
|
MqttRecvClient.getInstance().checkAndsubscribeAllTopics(topic);
|
}
|
} else if (eventBus.getTopic().equals(ConstantManage.homepage_title_tab_switch)) {
|
//接收外部点击事件
|
if (eventBus.getType().equals(HomepageTitleTabSwitch.powerstation.toString())) {
|
HdlLogLogic.print("正在点击【电站】");
|
initData();//初始化缓存数据
|
houseInfoAdapter.setList(houseListBeanIDList);//重新刷新列表
|
}
|
}
|
}
|
|
|
/**
|
* 刷新UI
|
*
|
* @param isRefreshing 表示是下拉刷新的
|
*/
|
private void downReadData(boolean isRefreshing) {
|
//获取住宅(电站)ID列表
|
HdlResidenceLogic.getInstance().getResidenceIdList("", "", new CloudCallBeak<List<HouseIdBean>>() {
|
@Override
|
public void onSuccess(List<HouseIdBean> list) {
|
HdlThreadLogic.runMainThread(new Runnable() {
|
@Override
|
public void run() {
|
if (isRefreshing) {
|
//关闭下拉刷新的圈圈
|
viewBinding.fragmentHouseSrl.setRefreshing(false);
|
}
|
if (list != null && list.size() > 0) {
|
//更新缓存
|
HdlResidenceLogic.getInstance().setHouseIdList(list);
|
if (houseInfoAdapter != null) {
|
initData();
|
//更新UI
|
houseInfoAdapter.setList(houseListBeanIDList);
|
}
|
|
}
|
nullDataUpdateUi(list);
|
}
|
}, _mActivity, ShowErrorMode.YES);
|
|
}
|
|
@Override
|
public void onFailure(HDLException e) {
|
HdlThreadLogic.runMainThread(new Runnable() {
|
@Override
|
public void run() {
|
if (isRefreshing) {
|
//关闭下拉刷新的圈圈
|
viewBinding.fragmentHouseSrl.setRefreshing(false);
|
}
|
|
}
|
}, _mActivity, ShowErrorMode.YES);
|
}
|
});
|
}
|
|
|
/**
|
* 申请权限
|
*/
|
private void requestPermissions(PermissionsResultCallback permissionsResultCallback) {
|
|
|
mPermissionsResultCallback = permissionsResultCallback;
|
|
String[] s = new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CAMERA,};
|
String[] ary = PermissionUtils.checkPermission(_mActivity, s);
|
if (ary.length > 0) {
|
requestPermissions(ary, PermissionUtils.STATUS_SUCCESS);
|
} else {
|
if (mPermissionsResultCallback != null) {
|
mPermissionsResultCallback.succeed();
|
}
|
}
|
}
|
|
@Override
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
if (requestCode == PermissionUtils.STATUS_SUCCESS) {
|
for (int i = 0; i < permissions.length; i++) {
|
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
|
if (mPermissionsResultCallback != null) {
|
mPermissionsResultCallback.succeed();
|
}
|
} else {
|
if (mPermissionsResultCallback != null) {
|
mPermissionsResultCallback.failing();
|
}
|
}
|
|
}
|
}
|
|
}
|
|
|
private PermissionsResultCallback mPermissionsResultCallback;
|
|
public interface PermissionsResultCallback {
|
|
void succeed();
|
|
void failing();
|
|
}
|
|
/**
|
* 没有电站列表的样式
|
*/
|
private void nullDataUpdateUi(List<HouseIdBean> list) {
|
HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity, viewBinding.nullDataIc.getRoot(), viewBinding.nullDataIc.nullDataGifAnimationIv, viewBinding.nullDataIc.nullDataTv, getString(R.string.my_power_station_data_null), list != null && list.size() > 0);
|
}
|
|
/**
|
* 删除电站,逆变器
|
* (先获取云端上逆变器列表,开始删除电站,同时,向逆变器发送初始化逆变器指令)
|
*
|
* @param homeId 电站id
|
*/
|
private void delete(String homeId) {
|
HdlDeviceLogic.getInstance().getCloudInverterDeviceList(homeId, new CloudCallBeak<List<CloudInverterDeviceBean>>() {
|
@Override
|
public void onSuccess(List<CloudInverterDeviceBean> list) {
|
deleteResidence(homeId);
|
if (list != null) {
|
for (int i = 0; i < list.size(); i++) {
|
CloudInverterDeviceBean cloudInverterDeviceBean = list.get(i);
|
HdlDeviceLogic.getInstance().initializeGateway(cloudInverterDeviceBean.getOsn(), new LinkCallBack<Boolean>() {
|
@Override
|
public void onSuccess(Boolean obj) {
|
// HdlLogLogic.print("初始化逆变器成功-->mac:" + cloudInverterDeviceBean.getOsn(),true);
|
}
|
|
@Override
|
public void onError(HDLLinkException e) {
|
// HdlLogLogic.print("初始化逆变器失败-->mac:" + cloudInverterDeviceBean.getOsn(),true);
|
}
|
});
|
}
|
}
|
}
|
|
@Override
|
public void onFailure(HDLException e) {
|
deleteResidence(homeId);
|
}
|
});
|
}
|
|
/**
|
* 删除电站
|
*
|
* @param homeId 电站id
|
*/
|
private void deleteResidence(String homeId) {
|
//删除住宅
|
HdlResidenceLogic.getInstance().delResidence(homeId, new CloudCallBeak<Boolean>() {
|
@Override
|
public void onSuccess(Boolean obj) {
|
HdlResidenceLogic.getInstance().delHouseId(homeId);
|
initData();//初始化缓存数据
|
houseInfoAdapter.setList(houseListBeanIDList);//重新刷新列表
|
nullDataUpdateUi(houseListBeanIDList);//检测数据是否为空
|
}
|
|
@Override
|
public void onFailure(HDLException e) {
|
HdlThreadLogic.toast(_mActivity, e);
|
}
|
});
|
}
|
|
|
}
|