package com.hdl.sdk.ttl_sdk.activity; 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.HDLDoorMachine.DoorMachineBackInfo; import com.hdl.sdk.ttl.HDLAppliances.HDLDoorMachine.Parser.DoorMachineParser; import com.hdl.sdk.ttl.HDLAppliances.HDLLight.ColourLightCtrlBackInfo; import com.hdl.sdk.ttl.HDLDeviceManger.Bean.AppliancesInfo; import com.hdl.sdk.ttl.HDLDeviceManger.Core.HDLCommand; import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.ColourLightFeedBackEvent; import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DeviceStateEvent; import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.LightFeedBackEvent; import com.hdl.sdk.ttl_sdk.R; import com.hdl.sdk.ttl_sdk.base.BaseActivity; import com.hdl.sdk.ttl_sdk.utlis.HDLLog; import com.hdl.sdk.ttl_sdk.utlis.HDLUtlis; import com.hdl.sdk.ttl_sdk.utlis.RGBColorPicker; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; /** * Created by panlili on 2023/8/22 * CCT色温灯,RGB灯控制页面 */ public class CtrlColourLightActivity extends BaseActivity { /** * Topbar */ private RelativeLayout topBarBack; private TextView topBarTitle; private Button lightBtn, brightnessBtn, cctBtn; private EditText brightnessEt, cctEt; private TextView lightText,rgbText; private RGBColorPicker rgbColorPicker; private AppliancesInfo appliancesInfo; private int lightState; private ColourLightCtrlBackInfo colourLightCtrlBackInfo; /** * 复写isRegisterEventBus() 要注册使用EventBus,这里要设置返回true * * @return true */ @Override protected boolean isRegisterEventBus() { return true; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ctrl_colour_light); initToolbar(); initView(); initOnClick(); initcurState(); displayStateView(); //从网络上查询刷新一次设备状态,待调试 HDLCommand.getColourLightDeviceStateFromNetwork(appliancesInfo); } /** * 初始化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(); topBarTitle.setText(titleStr); } private void initView() { lightBtn = findViewById(R.id.ctrlbtn); lightText = findViewById(R.id.lightText); brightnessBtn = findViewById(R.id.ctrl_brightness); brightnessEt = findViewById(R.id.et_brightness); cctBtn = findViewById(R.id.ctrl_cct); cctEt = findViewById(R.id.et_cct); rgbText = findViewById(R.id.ctrl_rgb); rgbColorPicker = findViewById(R.id.rgb_bar); } private void initOnClick() { lightBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //通过亮度来控制灯的开关,0为关,100为开 if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_CCT) { HDLCommand.colourLightCtrl(appliancesInfo, lightState, colourLightCtrlBackInfo.getColorTemp()); } else if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_RGB) { HDLCommand.colourLightCtrl(appliancesInfo, lightState, colourLightCtrlBackInfo.getColor()); } HDLLog.Log("lightBtn: 开关灯" + lightState); } }); brightnessBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String brightnessStr = brightnessEt.getText().toString(); if (TextUtils.isEmpty(brightnessStr)) { showToast("设置的亮度不能为空"); return; } if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_CCT) { HDLCommand.colourLightCtrl(appliancesInfo, Integer.parseInt(brightnessStr), colourLightCtrlBackInfo.getColorTemp()); HDLLog.Log("brightnessBtn: 设置亮度=" + brightnessStr + " getColorTemp=" + colourLightCtrlBackInfo.getColorTemp()); } else if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_RGB) { HDLCommand.colourLightCtrl(appliancesInfo, Integer.parseInt(brightnessStr), colourLightCtrlBackInfo.getColor()); HDLLog.Log("brightnessBtn: 设置亮度=" + brightnessStr + " getColorTemp=" + colourLightCtrlBackInfo.getColor()); } } }); cctBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String cctStr = cctEt.getText().toString(); if (TextUtils.isEmpty(cctStr)) { showToast("设置的色温不能为空"); return; } if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_CCT) { HDLCommand.colourLightCtrl(appliancesInfo, colourLightCtrlBackInfo.getBrightness(), Integer.parseInt(cctStr)); } HDLLog.Log("cctBtn: 设置色温=" + cctStr + " getBrightness=" + colourLightCtrlBackInfo.getBrightness()); } }); rgbColorPicker.setColorListener(new RGBColorPicker.DelayColorListener() { @Override public void onDelayColorChanged(int color, boolean fromUser) { if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_RGB) { HDLCommand.colourLightCtrl(appliancesInfo, colourLightCtrlBackInfo.getBrightness(), color); } HDLLog.Log("rgbBtn: 设置RGB=" + color + " getBrightness=" + colourLightCtrlBackInfo.getBrightness()); } @Override public void onColorChange(int color, boolean fromUser) { super.onColorChange(color, fromUser); } }); } private void displayStateView() { switch (appliancesInfo.getDeviceType()) { case HDLApConfig.TYPE_LIGHT_CCT: case HDLApConfig.TYPE_LIGHT_RGB: case HDLApConfig.TYPE_LIGHT_DALI: case HDLApConfig.TYPE_LIGHT_DMX: if (appliancesInfo.getCurState() != null) { ColourLightCtrlBackInfo colourLightCtrlBackInfo = new ColourLightCtrlBackInfo(appliancesInfo); String stringState = getSwichStateString(colourLightCtrlBackInfo.getBrightness()); stringState += "\n当前亮度:" + colourLightCtrlBackInfo.getBrightness(); if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_CCT) { stringState += "\n色温:" + colourLightCtrlBackInfo.getColorTemp(); } else if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_RGB) { stringState += "\nRGB:" + colourLightCtrlBackInfo.getColor(); } lightText.setText(stringState); if (colourLightCtrlBackInfo.getBrightness() == 0) { lightState = 100; lightBtn.setText("开灯"); } else { lightState = 0; lightBtn.setText("关灯"); } } else { lightText.setText("未获取到灯光状态"); lightBtn.setText("未获取到灯光状态"); } break; default: finish();//设备类型不对结束页面 break; } /**根据需求是否发送一次获取刷新状态请求*/ } /** * 灯光控制回调Event * * @param event */ @Subscribe(threadMode = ThreadMode.MAIN) public void onColourLightFeedBackEventMain(ColourLightFeedBackEvent event) { if (event.getColourLightCtrlBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID() && event.getColourLightCtrlBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID() && event.getColourLightCtrlBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()) { //先判断是否超时 if (!event.isSuccess()) { showToast("灯光控制超时,请重新再试"); lightBtn.setText("灯光控制超时,请重新再试"); return; } colourLightCtrlBackInfo = event.getColourLightCtrlBackInfo(); Log.d("panlili", "CtrlColourLightActivity.java:onColourLightFeedBackEventMain-----> " + colourLightCtrlBackInfo.toString()); if (colourLightCtrlBackInfo == null) { showToast("灯光控制超时,请重新再试"); return; } showColourLightCtrlBackInfo(colourLightCtrlBackInfo); } } /** * 获取单一设备状态回调Event * * @param event */ @Subscribe(threadMode = ThreadMode.MAIN) public void onDeviceStateEventMain(DeviceStateEvent event) { if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID() && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID() ) { //这个返回的信息是当前状态的 switch (event.getAppliancesInfo().getDeviceType()) { case HDLApConfig.TYPE_LIGHT_CCT: case HDLApConfig.TYPE_LIGHT_RGB: case HDLApConfig.TYPE_LIGHT_DALI: case HDLApConfig.TYPE_LIGHT_DMX: if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) { if (!event.isSuccess()) { showToast("获取灯光状态失败,请重新再试"); return; } colourLightCtrlBackInfo = new ColourLightCtrlBackInfo(event.getAppliancesInfo()); Log.d("panlili", "CtrlColourLightActivity.java:onDeviceStateEventMain-----> " + colourLightCtrlBackInfo.toString()); if (colourLightCtrlBackInfo == null) { showToast("获取灯光状态失败,请重新再试"); return; } showColourLightCtrlBackInfo(colourLightCtrlBackInfo); } break; default: //不处理 break; } } } /** * showColourLightCtrlBackInfo * * @param colourLightCtrlBackInfo */ private void showColourLightCtrlBackInfo(ColourLightCtrlBackInfo colourLightCtrlBackInfo) { String message = ""; message = getSwichStateString(colourLightCtrlBackInfo.getBrightness()); message += "\n" + "当前亮度:" + colourLightCtrlBackInfo.getBrightness(); if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_CCT) { message += "\n色温:" + colourLightCtrlBackInfo.getColorTemp(); } else if (colourLightCtrlBackInfo.getType() == ColourLightCtrlBackInfo.CONTROL_TYPE_RGB) { message += "\nRGB:" + colourLightCtrlBackInfo.getColor(); } lightText.setText(message); if (colourLightCtrlBackInfo.getBrightness() == 0) { lightState = 100; lightBtn.setText("开灯"); } else { lightState = 0; lightBtn.setText("关灯"); } showToast(message); HDLLog.Log(message); } /** * getSwichStateString * * @param mState * @return */ private String getSwichStateString(int mState) { String mStrState = "未知"; if (mState == 0) { mStrState = "开关状态:关闭"; } else { mStrState = "开关状态:打开"; } return mStrState; } }