package com.hdl.sdk.hdl_sdk.activity;
|
|
import android.os.Bundle;
|
import android.view.View;
|
import android.widget.Button;
|
import android.widget.RelativeLayout;
|
import android.widget.SeekBar;
|
import android.widget.TextView;
|
|
import com.hdl.sdk.hdl_core.HDLAppliances.Config.HDLApConfig;
|
import com.hdl.sdk.hdl_core.HDLAppliances.HDLLight.CCTBackInfo;
|
import com.hdl.sdk.hdl_core.HDLAppliances.HDLLight.RGBBackInfo;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.AppliancesInfo;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Core.HDLCommand;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.LightCCTCtrlBackEvent;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.LightRGBCtrlBackEvent;
|
import com.hdl.sdk.hdl_sdk.R;
|
import com.hdl.sdk.hdl_sdk.base.BaseActivity;
|
import com.hdl.sdk.hdl_sdk.utlis.HDLLog;
|
|
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.ThreadMode;
|
|
public class CtrlCCTLightActivity extends BaseActivity {
|
/**
|
* Topbar
|
*/
|
private RelativeLayout topBarBack;
|
private TextView topBarTitle;
|
private Button btnOpen, btnClose;
|
// private EditText etR,etG,etB;
|
private SeekBar seekBar, seekBarCCT;
|
private TextView switchText;
|
private AppliancesInfo appliancesInfo;
|
private int settingBrightness = 0;
|
private int settingCCT = 2000;
|
private CCTBackInfo mCCTBackInfo;
|
|
//默认色温范围值 2000K 到7000K,不一定所有设备都是这个范围
|
private int MIN_CCT = 2000;
|
private int MAX_CCT = 7000;
|
|
|
/**
|
* 复写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_cct_light);
|
|
initToolbar();
|
initcurState();
|
initView();
|
initOnClick();
|
displayStateView();
|
mCCTBackInfo = new CCTBackInfo(appliancesInfo);
|
|
//读取状态
|
HDLCommand.getRgbOrCctStateFromNetwork(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");
|
|
}
|
|
private void initView() {
|
btnOpen = findViewById(R.id.btnOpen);
|
btnClose = findViewById(R.id.btnClose);
|
seekBar = findViewById(R.id.sb_brightness);
|
seekBarCCT = findViewById(R.id.sb_cct);
|
switchText = findViewById(R.id.switchText);
|
}
|
|
private void initOnClick() {
|
|
|
btnOpen.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
int brightness = settingBrightness == 0 ? 100 : settingBrightness;
|
if (settingCCT > MAX_CCT) {
|
settingCCT = MAX_CCT;
|
} else if (settingCCT < MIN_CCT) {
|
settingCCT = MIN_CCT;
|
}
|
HDLCommand.lightCCTCtrl(appliancesInfo, brightness, settingCCT);
|
}
|
});
|
|
btnClose.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
if (settingCCT > MAX_CCT) {
|
settingCCT = MAX_CCT;
|
} else if (settingCCT < MIN_CCT) {
|
settingCCT = MIN_CCT;
|
}
|
HDLCommand.lightCCTCtrl(appliancesInfo, 0, settingCCT);
|
}
|
});
|
|
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
@Override
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
|
}
|
|
@Override
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
|
}
|
|
@Override
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
if (seekBar.getProgress() > 0) {
|
settingBrightness = seekBar.getProgress();
|
}
|
if (settingCCT > MAX_CCT) {
|
settingCCT = MAX_CCT;
|
} else if (settingCCT < MIN_CCT) {
|
settingCCT = MIN_CCT;
|
}
|
HDLCommand.lightCCTCtrl(appliancesInfo, seekBar.getProgress(), settingCCT);
|
}
|
});
|
|
seekBarCCT.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
@Override
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
|
}
|
|
@Override
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
|
}
|
|
@Override
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
settingCCT = seekBarProgressToValue(MIN_CCT, MAX_CCT, seekBar.getProgress());
|
if (settingCCT > MAX_CCT) {
|
settingCCT = MAX_CCT;
|
} else if (settingCCT < MIN_CCT) {
|
settingCCT = MIN_CCT;
|
}
|
|
HDLLog.I("色温设置:" + settingCCT + "K");
|
int brightness = settingBrightness == 0 ? 100 : settingBrightness;
|
HDLCommand.lightCCTCtrl(appliancesInfo, brightness, settingCCT);
|
}
|
});
|
|
}
|
|
private void displayStateView() {
|
|
switch (appliancesInfo.getDeviceType()) {
|
case HDLApConfig.TYPE_LIGHT_CCT:
|
break;
|
default:
|
finish();//设备类型不对结束页面
|
break;
|
}
|
/**根据需求是否发送一次获取刷新状态请求*/
|
|
}
|
|
|
/**
|
* showCCTBackInfo
|
*
|
* @param mCCTBackInfo
|
*/
|
private void showCCTBackInfo(CCTBackInfo mCCTBackInfo) {
|
String message = "";
|
if (mCCTBackInfo.getBrightness() > 0) {
|
//如果大于0才记住当前设置的亮度值,下次打开时继续这个亮度值
|
settingBrightness = mCCTBackInfo.getBrightness();
|
|
message = "当前状态:开";
|
message += "\n" + "亮度:" + mCCTBackInfo.getBrightness();
|
message += "\n" + "色温值:" + mCCTBackInfo.getCctValue() + "K";
|
|
} else {
|
message = "当前状态:关";
|
}
|
|
settingCCT = mCCTBackInfo.getCctValue();
|
seekBar.setProgress(mCCTBackInfo.getBrightness());
|
int cctProgress = seekBarValueToProgress(MIN_CCT, MAX_CCT, mCCTBackInfo.getCctValue());
|
seekBarCCT.setProgress(cctProgress);
|
switchText.setText(message);
|
showToast(message);
|
HDLLog.I(message);
|
}
|
|
/**
|
* RGB控制回调Event
|
*
|
* @param event
|
*/
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
public void onLightCCTCtrlBackEventMain(LightCCTCtrlBackEvent event) {
|
if (event.getCCTBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
|
&& event.getCCTBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
|
&& event.getCCTBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
|
) {
|
if (!event.isSuccess()) {
|
showToast("RGB灯控制超时,请重新再试");
|
return;
|
}
|
|
// showToast("RGB灯控制成功");
|
mCCTBackInfo = event.getCCTBackInfo();
|
showCCTBackInfo(mCCTBackInfo);
|
}
|
}
|
|
|
@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_LIGHT_CCT:
|
if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) {
|
if (!event.isSuccess()) {
|
showToast("获取CCT灯状态失败,请重新再试");
|
return;
|
}
|
String message = "";
|
CCTBackInfo cctBackInfo = new CCTBackInfo(event.appliancesInfo);
|
if (cctBackInfo == null) {
|
showToast("获取CCT灯状态失败,请重新再试");
|
return;
|
}
|
mCCTBackInfo = cctBackInfo;
|
showCCTBackInfo(mCCTBackInfo);
|
}
|
break;
|
}
|
}
|
}
|
|
|
/**
|
* 根据滑条刻度值,给定最大最小值 计算出对应显示值
|
* 滑条刻度值范围0~100
|
*
|
* @param maxValue 最大值
|
* @param minValue 最小值
|
* @param mProgress 滑条值
|
* @return 计算后的显示值
|
*/
|
private int seekBarProgressToValue(int minValue, int maxValue, int mProgress) {
|
int progress = mProgress;
|
|
if (progress < 0) {
|
progress = 0;
|
} else if (progress > 100) {
|
progress = 100;
|
}
|
int intValue = 0;
|
intValue = (maxValue - minValue) * progress / 100 + minValue;
|
return intValue;
|
}
|
|
/**
|
* 根据显示值,给定最大最小值 计算出对滑条刻度
|
* 滑条刻度值范围0~100
|
*
|
* @param maxValue 最大值
|
* @param minValue 最小值
|
* @param mIntValue 显示值
|
* @return 计算后的滑条值
|
*/
|
private int seekBarValueToProgress(int minValue, int maxValue, int mIntValue) {
|
int intValue = mIntValue;
|
|
if (intValue < minValue) {
|
intValue = minValue;
|
} else if (intValue > maxValue) {
|
intValue = maxValue;
|
}
|
int progress = 0;
|
progress = (intValue - minValue) * 100 / (maxValue - minValue);
|
return progress;
|
|
|
}
|
}
|