package com.hdl.sdk.ttl_sdk.activity; import android.app.ProgressDialog; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.TextView; import com.hdl.sdk.ttl.HDLAppliances.Config.HDLApConfig; import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.Parser.AirCtrlParser; import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.DoorMachineBackInfo; import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.DoorMachineFristBackInfo; import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.DoorMachineWaringBackInfo; import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.Parser.DoorMachineParser; import com.hdl.sdk.ttl.HDLDeviceManger.Bean.AppliancesInfo; import com.hdl.sdk.ttl.HDLDeviceManger.Core.HDLCommand; import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DeviceStateEvent; import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DoorMachineFeedBackEvent; import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DoorMachineFeedFristBackEvent; import com.hdl.sdk.ttl.Utils.LogUtils.HDLLog; import com.hdl.sdk.ttl_sdk.R; import com.hdl.sdk.ttl_sdk.base.BaseActivity; import com.hdl.sdk.ttl_sdk.utlis.HDLUtlis; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; /** * 门锁控制界面 */ public class DoorMachineActivity extends BaseActivity { /** * Topbar */ private RelativeLayout topBarBack; private TextView topBarTitle; private Button btn_switch; private EditText et_password; private TextView mTextView; private AppliancesInfo appliancesInfo; private int gSwitchState;//Demo仅以此作为演示,实际请根据需求开发设计 private ProgressDialog proDialog; private byte[] secretBytes = new byte[9];//这里是回路号+8byte密钥 private DoorMachineBackInfo doorMachineBackInfo; /** * 要注册使用EventBus,这里要设置返回true * * @return true */ @Override protected boolean isRegisterEventBus() { return true; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_door_machine); initToolbar(); initcurState(); initView(); initClickOnEvent(); showStateView(); Log.d("panlili", "DoorMachineActivity.java:appliancesInfo-----> " + appliancesInfo.toString()); HDLCommand.getDoorMachineDeviceStateFromNetwork(appliancesInfo); } @Override protected void onDestroy() { super.onDestroy(); proDialog.dismiss(); HDLLog.I("onDestroy: DoorMachineActivity"); } /** * 初始化Toolbar */ private void initToolbar() { topBarBack = findViewById(R.id.ll_top_b_left); setViewVisible(topBarBack); topBarTitle = findViewById(R.id.tv_top_b_header_title); topBarBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); } private void initcurState() { appliancesInfo = (AppliancesInfo) getIntent().getSerializableExtra("hdl"); String titleStr = appliancesInfo.getRemarks(); if (TextUtils.isEmpty(titleStr) || titleStr.equals(HDLUtlis.REMAEK_NULL)) { if (TextUtils.isEmpty(appliancesInfo.getDeviceName())) { titleStr = "备注为空"; } else { titleStr = appliancesInfo.getDeviceName(); } } topBarTitle.setText(titleStr); } private void initView() { mTextView = findViewById(R.id.tv_door_machine); btn_switch = findViewById(R.id.btn_switch); et_password = findViewById(R.id.et_password); proDialog = new ProgressDialog(this); proDialog.setTitle("正在发送控制命令..."); proDialog.setMessage("请耐心等待"); proDialog.onStart(); } private void initClickOnEvent() { btn_switch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String tempStr = et_password.getText().toString(); if (TextUtils.isEmpty(tempStr)) { showToast("开锁密码不能为空"); return; } proDialog.show(); //远程开锁,先获取密钥 HDLCommand.doorMachineGetSecret(appliancesInfo); } }); } private void showStateView() { if (appliancesInfo.getArrCurState() != null) { DoorMachineBackInfo doorMachineBackInfo = new DoorMachineBackInfo(appliancesInfo); String stringState = ""; if (doorMachineBackInfo.getDoorStatus() == DoorMachineParser.doorStatusClose) { stringState = "门锁状态:关闭"; } else if (doorMachineBackInfo.getDoorStatus() == DoorMachineParser.doorStatusOpen) { stringState = "门锁状态:打开"; } else if (doorMachineBackInfo.getDoorStatus() == DoorMachineParser.doorStatusNormallyOpen) { stringState = "门锁状态:常开"; } else { stringState = "未知开关状态"; } if (doorMachineBackInfo.getNormalOpenMode() == DoorMachineParser.normalOpenModeClose) { stringState += "\n常开模式:关闭"; } else if (doorMachineBackInfo.getDoorStatus() == DoorMachineParser.normalOpenModeOpen) { stringState += "\n常开模式:打开"; } else { stringState += "\n未知常开模式开关状态"; } stringState += "\n音量:" + doorMachineBackInfo.getDoorVolume(); stringState += "\n电池百分比:" + doorMachineBackInfo.getDoorElectricity(); mTextView.setText(stringState); } else { mTextView.setText("未获取到门锁状态"); } } /** * getSwichStateString * * @param mState * @return */ private String getSwichStateString(int mState) { String mStrState = "未知"; gSwitchState = mState; //更新开关状态 switch (mState) { case DoorMachineParser.doorStatusOpen: mStrState = "门锁状态:打开"; break; case DoorMachineParser.doorStatusClose: mStrState = "门锁状态:关闭"; break; case DoorMachineParser.doorStatusNormallyOpen: mStrState = "门锁状态:常开"; break; default: mStrState = "未知状态"; break; } return mStrState; } /** * getNormalOpenModeStateString * * @param mState * @return */ private String getNormalOpenModeStateString(int mState) { String mStrState = "未知"; switch (mState) { case DoorMachineParser.normalOpenModeClose: mStrState = "常开模式:关闭"; break; case DoorMachineParser.normalOpenModeOpen: mStrState = "常开模式:打开"; break; default: mStrState = "未知状态"; break; } return mStrState; } /** * 门锁远程开锁控制回调Event * * @param event */ @Subscribe(threadMode = ThreadMode.MAIN) public void DoorMachineFeedFristBackEventMain(DoorMachineFeedFristBackEvent event) { proDialog.dismiss(); if (event.getDoorMachineFristBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID() && event.getDoorMachineFristBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID() && event.getDoorMachineFristBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()) { //先判断是否超时 if (!event.isSuccess()) { showToast("门锁远程开锁控制超时,请重新再试"); return; } DoorMachineFristBackInfo doorMachineFristBackInfo = event.getDoorMachineFristBackInfo(); if (doorMachineFristBackInfo != null && doorMachineBackInfo != null) { secretBytes = doorMachineFristBackInfo.getSecretBytes(); HDLCommand.doorMachineCtrl(appliancesInfo, secretBytes, et_password.getText().toString(), doorMachineBackInfo.getDoorStatus()); } } } /** * 门锁远程开锁控制回调Event * * @param event */ @Subscribe(threadMode = ThreadMode.MAIN) public void onDoorMachineFeedBackEventMain(DoorMachineFeedBackEvent event) { proDialog.dismiss(); if (event.getDoorMachineBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID() && event.getDoorMachineBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID() && event.getDoorMachineBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()) { showToast("门锁远程开锁成功"); HDLLog.I("门锁远程开锁成功"); } } /** * 门锁状态和报警广播Event * * @param event */ @Subscribe(threadMode = ThreadMode.MAIN) public void onDoorMachineWaringBackInfoMain(DoorMachineWaringBackInfo event) { if (event.appliancesInfo.getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID() && event.appliancesInfo.getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID() && event.appliancesInfo.getChannelNum() == appliancesInfo.getChannelNum()) { String type = ((DoorMachineWaringBackInfo) event).getType(); showToast("收到门锁1F4D广播:" + type); HDLLog.I("收到门锁1F4D广播:" + type); } } @Subscribe(threadMode = ThreadMode.MAIN) public void onDeviceStateEventMain(DeviceStateEvent event) { proDialog.dismiss(); if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID() && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID() ) { //这个返回的信息是当前状态的 switch (event.getAppliancesInfo().getDeviceType()) { case HDLApConfig.TYPE_DOOR_MACHINE: if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) { if (!event.isSuccess()) { showToast("获取门锁状态失败,请重新再试"); return; } String message = ""; doorMachineBackInfo = new DoorMachineBackInfo(event.appliancesInfo); if (doorMachineBackInfo == null) { showToast("获取门锁状态失败,请重新再试"); return; } showDoorMachineBackInfo(doorMachineBackInfo); } break; } } } /** * showDoorMachineBackInfo * * @param doorMachineBackInfo */ private void showDoorMachineBackInfo(DoorMachineBackInfo doorMachineBackInfo) { String message = ""; message = getSwichStateString(doorMachineBackInfo.getDoorStatus()); message += "\n" + getNormalOpenModeStateString(doorMachineBackInfo.getNormalOpenMode()); message += "\n" + "音量:" + doorMachineBackInfo.getDoorVolume(); message += "\n" + "电池百分比:" + doorMachineBackInfo.getDoorElectricity(); mTextView.setText(message); showToast(message); HDLLog.I(message); } }