mac
2023-11-03 9e875b253959eff8f6af567308ad804fe69d0a62
app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
@@ -6,20 +6,52 @@
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Process;
import android.view.View;
import com.google.gson.Gson;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.linkpm.sdk.home.type.HomeType;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.base.CustomBaseActivity;
import com.hdl.photovoltaic.bean.MqttInfo;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.databinding.ActivityMyPowerStationBinding;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.other.HdlDeviceLogic;
import com.hdl.photovoltaic.other.HdlLogLogic;
import com.hdl.photovoltaic.other.HdlMqttLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.other.HdlUniLogic;
import com.hdl.photovoltaic.ui.bean.DeviceRemoteInfo;
import com.hdl.photovoltaic.uni.HDLUniMP;
import com.hdl.photovoltaic.utils.AppManagerUtils;
import com.hdl.photovoltaic.utils.PermissionUtils;
import com.hdl.sdk.link.HDLLinkLocalSdk;
import com.hdl.sdk.link.common.event.EventListener;
import com.hdl.sdk.link.core.bean.ModbusResponse;
import com.hdl.sdk.link.core.bean.eventbus.EventNotifyRefreshGatewayAesKeyInfo;
import com.hdl.sdk.link.core.bean.gateway.GatewayBean;
import com.hdl.sdk.link.core.config.HDLLinkConfig;
import com.hdl.sdk.link.core.utils.mqtt.MqttRecvClient;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
/**
 * 我的电站界面
 */
public class MyPowerStationActivity extends CustomBaseActivity {
    private ActivityMyPowerStationBinding viewBinding;
    private int currentFragmentIndex = 0;
    private int currentFragmentIndex = 1;
    private EventListener allTopicsListener;
    private int backPressTimes;
    @Override
@@ -30,28 +62,42 @@
    @Override
    public void onBindView(Bundle savedInstanceState) {
        getWindow().setStatusBarColor(getColor(R.color.text_245EC3));
        //初始化
        initView();
        //初始化界面监听器
        initEvent();
        //注册监听
        registerAllTopicsListener();
        //初始化mqtt客户端
        initMqttClient();
    }
    private void initEvent() {
        viewBinding.myPowerStationBottomIl1.clickTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentFragmentIndex = 0;
                bottomViewChangeOfStyle();
            }
        });
        viewBinding.myPowerStationBottomIl2.clickTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentFragmentIndex = 1;
                bottomViewChangeOfStyle();
            }
        });
        viewBinding.myMessageBottomIl2.clickTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentFragmentIndex = 2;
                bottomViewChangeOfStyle();
            }
        });
        viewBinding.myMeBottomIl3.clickTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentFragmentIndex = 3;
                bottomViewChangeOfStyle();
            }
        });
    }
@@ -59,34 +105,53 @@
    protected void onDestroy() {
        super.onDestroy();
        HdlUniLogic.getInstance().checkRemoveOtherUniMPEventCallBack();
        //移除监听
        HDLLinkLocalSdk.getInstance().removeAllTopicsListener(allTopicsListener);
    }
    private void initView() {
        viewBinding.myPowerStationBottomIl1.titleTv.setText(R.string.my_power_station_电站);
        viewBinding.myPowerStationBottomIl2.titleTv.setText(R.string.my_power_station_我的);
        viewBinding.myPowerStationBottomIl1.titleTv.setText(R.string.power_station);
        viewBinding.myMessageBottomIl2.titleTv.setText(R.string.message);
        viewBinding.myMeBottomIl3.titleTv.setText(R.string.power_station_me);
        this.bottomViewChangeOfStyle();
    }
    private void bottomViewChangeOfStyle() {
        if (this.currentFragmentIndex == 0) {
            viewBinding.myPowerStationFcv1.setVisibility(View.VISIBLE);
            viewBinding.myPowerStationFcv2.setVisibility(View.GONE);
        if (this.currentFragmentIndex == 1) {
            viewBinding.myPowerStationFcv1.setVisibility(View.VISIBLE);//显示电站界面
            viewBinding.myMessageFcv2.setVisibility(View.GONE);//隐藏消息界面
            viewBinding.myMeFcv3.setVisibility(View.GONE);//隐藏我的界面
            viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.selectedpowerstation));
            viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_90000000));
            viewBinding.myPowerStationBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedme));
            viewBinding.myPowerStationBottomIl2.titleTv.setTextColor(getColor(R.color.text_65000000));
        } else {
            viewBinding.myPowerStationFcv1.setVisibility(View.GONE);
            viewBinding.myPowerStationFcv2.setVisibility(View.VISIBLE);
            viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_unselected));
            viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_65000000));
            viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedme));
            viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_65000000));
        } else if (this.currentFragmentIndex == 2) {
            viewBinding.myPowerStationFcv1.setVisibility(View.GONE);//隐藏电站界面
            viewBinding.myMessageFcv2.setVisibility(View.VISIBLE);//显示消息界面
            viewBinding.myMeFcv3.setVisibility(View.GONE);//隐藏我的界面
            viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedpowerstation));
            viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_65000000));
            viewBinding.myPowerStationBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.selectedme));
            viewBinding.myPowerStationBottomIl2.titleTv.setTextColor(getColor(R.color.text_90000000));
            viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_select));
            viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_90000000));
            viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedme));
            viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_65000000));
        } else if (this.currentFragmentIndex == 3) {
            viewBinding.myPowerStationFcv1.setVisibility(View.GONE);//隐藏电站界面
            viewBinding.myMessageFcv2.setVisibility(View.GONE);//隐藏消息界面
            viewBinding.myMeFcv3.setVisibility(View.VISIBLE);//显示我的界面
            viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedpowerstation));
            viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_65000000));
            viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_unselected));
            viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_65000000));
            viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.selectedme));
            viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_90000000));
        }
    }
    public void requestPermissions() {
        String[] ary = PermissionUtils.checkPermission(_mActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION});
@@ -131,4 +196,119 @@
    }
    /**
     * 注册所有主题数据的监听
     */
    private void registerAllTopicsListener() {
        allTopicsListener = new EventListener() {
            @Override
            public void onMessage(Object msg) {
                if (msg instanceof ModbusResponse) {
                    ModbusResponse response = (ModbusResponse) msg;
                    if (response.getTopic() == null) {
                        return;
                    }
                    HdlLogLogic.print("监听到的数据==="+new Gson().toJson(response),false);
//                    if (response.getTopic().endsWith("custom/native/inverter/up")) {
                    HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean();
                    uniCallBackBaseBean.setType(response.getTopic());
                    uniCallBackBaseBean.setData(response.getData());
                    HdlUniLogic.getInstance().sendUni(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL, uniCallBackBaseBean);
//                    }
                }
            }
        };
        HDLLinkLocalSdk.getInstance().registerAllTopicsListener(allTopicsListener);
    }
    /**
     * 初始化mqtt客户端
     */
    public void initMqttClient() {
        HdlMqttLogic.getInstance().getMqttRemoteInfo(HomeType.A, new CloudCallBeak<MqttInfo>() {
            @Override
            public void onSuccess(MqttInfo info) {
                if (info != null) {
                    MqttRecvClient.init(_mActivity, info.getUrl(), info.getClientId(), info.getUserName(), info.getPassWord());
                }
            }
            @Override
            public void onFailure(HDLException e) {
                HdlLogLogic.print("读取mqtt远程信息失败==="+e.getMessage(), e.getCode(),true);
            }
        });
    }
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventMessage(EventNotifyRefreshGatewayAesKeyInfo event) {
        //网关更新mqtt秘钥更新通知
        if (event == null) {
            return;
        }
        int index = -1;
        List<GatewayBean> list = HdlDeviceLogic.getInstance().getCurrentHomeGatewayList();
        for (int i = 0; i < list.size(); i++) {
            GatewayBean gatewayBean = list.get(i);
            if (gatewayBean.getGatewayId().equals(event.getGatewayId())) {
                index = i;
                break;
            }
        }
        if (index > -1) {
            GatewayBean gatewayBean = list.get(index);
            HdlDeviceLogic.getInstance().getDeviceRemoteInfo(UserConfigManage.getInstance().getHomeId(), gatewayBean.getSpk(), gatewayBean.getDevice_mac(), new CloudCallBeak<DeviceRemoteInfo>() {
                @Override
                public void onSuccess(DeviceRemoteInfo deviceRemoteInfo) {
                    if (deviceRemoteInfo != null) {
                        //更新mqtt通讯的新秘钥
                        gatewayBean.setAesKey(deviceRemoteInfo.getSecret());
                        //用之前的库,底层mqtt订阅,加解密会用到该参数;
                        HDLLinkConfig.getInstance().setAesKey(deviceRemoteInfo.getSecret());//设置mqtt通讯秘钥库
                    }
                }
                @Override
                public void onFailure(HDLException e) {
                }
            });
        }
    }
    /**
     * 点击返回键的事件
     */
    @Override
    public void onBackPressed() {
        if (AppManagerUtils.getAppManager().getActivitySize() <= 1) {
            if (backPressTimes == 0) {
                HdlThreadLogic.toast(_mActivity, R.string.kill_app);
                backPressTimes = 1;
                new Thread() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        } finally {
                            backPressTimes = 0;
                        }
                    }
                }.start();
                return;
            } else {
                AppManagerUtils.getAppManager().finishAllActivity();
                Process.killProcess(Process.myPid());
            }
        }
        super.onBackPressed();
    }
}